nlinfit的Matlab误差分析

nlinfit的Matlab误差分析,matlab,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

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

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),但这两个选项似乎都不能解决我的问题。任何帮助都将不胜感激

我相信您忘记了在函数中执行元素删除的点:

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