将 lsqcurvefit 的输出限制为正值

To restrict lsqcurvefit's output to positive values

我认为这在很大程度上取决于 objective 函数。 但是,如果有任何其他方法来限制它——那就太好了。 至少,我的老师说有一些选择。 但是,我在搜索 positive 时无法从 manual 中找到它。

lsqcurvefit是否有任何设置限制每个参数的输出为正值?

如果仅通过 objective 函数获得正值并且 lsqcurvefit 中没有针对正值的选项

lsqcurvefit:

lsqcurvefit('count', params, V_vec, I_vec, [], [], options);

其中 V_vec 和 I_vec 中有一些负值。 参数选项

options = optimset('TolFun', 10^-6, 'MaxIter', 100);

假设您的虚拟 objective 函数是

function [ x ] = count_i( params, V )
a = size(V);
for i = 1:a(1)
    if i == 1
        x(i,1) = fsolve( @(I) diode1( I, params, V(i) ), 3.4 ); 
    else
        x(i,1) = fsolve( @(I) diode1( I, params, V(i) ), x(i-1) );
    end
end
end 

我注意到这里选择的 x0 3.4 对 lsqcurvefit.

的结果影响很大

如何通过其他方法将 lsqcurvefit 限制为正值? 通过 objective 功能或其他方式?

使用参数 #5,下限。现在你传递的是 [],这意味着 "all variables are unbounded below"。使用零的下限(当然是矢量化)使它们非负。