我认为这很大程度上取决于目标函数。 但是,如果有任何其他方法来限制它 - 它会很棒。 至少,我的老师说有一些选择。 但是,在搜索正面时,我无法从manual找到它。
是否有任何设置可以限制每个参数的输出为lsqcurvefit?
lsqcurvefit:
lsqcurvefit('count', params, V_vec, I_vec, [], [], options);
V_vec和I_vec中有一些负值。 参数选项
options = optimset('TolFun', 10^-6, 'MaxIter', 100);
假设你的虚拟目标函数是
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对于 lsqcurvefit 的结果影响很大。
如何通过其他方法将lsqcurvefit限制为正值? 通过目标函数或其他东西?
答案 0 :(得分:1)
使用参数#5,下限。现在你正在传递[]
,这意味着“所有变量都在下面无界限”。使用零的下限(当然是矢量化)使它们成为非负数。