与nlinfit的matlab错误

时间:2013-04-11 20:47:00

标签: matlab

我试图得到以下等式的非线性最小二乘拟合:

  

y = 1 /(1 + a(ln(持续时间)^ b))

我希望适合的数据如下所示,我尝试使用nlinfit函数来解决它......

x = [1.99000000000000;3.01000000000000;4.01000000000000;5.09000000000000;5.77000000000000;6.85000000000000;7.72000000000000;8.87000000000000;9.56000000000000;];
y = [1;1;0.800000000000000;0.730000000000000;0.470000000000000;0.230000000000000;0.270000000000000;0.100000000000000;0.100000000000000;];

plot(x,y,'o','linestyle','none');

p(1) = 1;
p(2) = 1;

fun = @(p,x) 1 / (1 + p(1).*(log(x).^p(2)));

myfit = nlinfit(x,y,fun,p);

我的问题似乎是定义nlinfit函数的第四个必需输入(上例中的'p')。该文档没有明确说明该工作需要什么,我无法根据收到的错误消息解决问题:

  

???使用==>时出错在128 MODELFUN的nlinfit应该返回一个与Y相同长度的拟合值向量。

     

==>中的错误适合14 myfit = nlinfit(x,y,fun,p);

我已经尝试将p设置为repmat(1,9,1)和repmat(1,1,9),但这些似乎都没有解决我的问题。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

我相信你忘了点在函数中删除元素:

fun = @(p,x) 1 ./ (1 + p(1).*(log(x).^p(2)));
               ^