将lsqcurvefit的输出限制为正值

时间:2015-03-04 16:53:20

标签: matlab curve-fitting nonlinear-optimization

我认为这很大程度上取决于目标函数。 但是,如果有任何其他方法来限制它 - 它会很棒。 至少,我的老师说有一些选择。 但是,在搜索正面时,我无法从manual找到它。

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

如果仅通过目标函数为正值而在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限制为正值? 通过目标函数或其他东西?

1 个答案:

答案 0 :(得分:1)

使用参数#5,下限。现在你正在传递[],这意味着“所有变量都在下面无界限”。使用零的下限(当然是矢量化)使它们成为非负数。