将 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"。使用零的下限(当然是矢量化)使它们非负。
我认为这在很大程度上取决于 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"。使用零的下限(当然是矢量化)使它们非负。