如果您知道要拟合的函数的形式但不知道其参数,则可以使用fminsearch查找适合您数据的参数.如果你有数据(可能是嘈杂的)你想要适合y = x ^ a bwhere aand bare unknown(这里我假设真值是a = 1/3和b = 5)这就是我的方式快速回答:
在这里,我生成我的数据(你不必在现实生活中这样做)
>> x = linspace(0,5,10);
>> y = x.^(1/3) + 5;
>> y_noisy = y + 0.1*rand(size(y));
然后我定义了我想要最小化的关于a和b的函数,并用fminsearch最小化它.在这种情况下,我最小化了我的数据和用于拟合的函数之间差异的平方的积分.下面我定义了两个函数,一个是噪声数据,一个是噪声.你会发现在没有噪音的情况下,你可以完全恢复a和b的值.
注意:fminsearch wotks带有参数向量(在我的例子中为v).我拿a = v(1)和b = v(2).你还必须为v提供一些初始猜测(这里[1 1]).
>> err_noisy = @(v) trapz(x,(y_noisy - x.^v(1)-v(2)).^2);
>> err = @(v) trapz(x,(y - x.^v(1)-v(2)).^2);
>> v_noisy = fminsearch(err_noisy,[1 1])
v_noisy =
0.3345 5.0594
>> v = fminsearch(err,[1 1])
v =
0.3333 5.0000
最后一条注释,如果您对aand位的值有约束,则有时可以对变量执行某些更改.例如,如果您知道a> 0,则可能需要标识log(a),然后将标识的值转换为a.
希望这可以帮助.
一个.