哪有问题xdata=[0.02 0.02 0.06 0.06 0.11 0.11 0.22 0.22 0.56 0.56 1.10 1.10]; ydata=[76 47 97 107 123 139 159 152 191 201 207 200]; v=ones(1,length(ydata))./ydata; u=ones(1,length(xdata))./xdata; fun1=@(x,u) x(1)+x(2)*u; fun2=@(y,xdata)y(1)*xdata/(y(2)+xdata); x0=[1 1]; x=lsqcurvefit(fun1,x0,u,v) y(1)=1/x(1); y(2)=x(2)/x(1); fun1=lincurve(x,u); fun2=curve(y,xdata); plot(u,v,'rp',u,fun1) title('1/y与1/x的散点图和回归曲线') plot(xdata,ydata,'rp',xdata,fun2) title('y与x的散点图和回归曲线')
时间: 2023-05-28 17:07:07 浏览: 137
正交线性回归:以正交方式将线 y=p0+p1*y 拟合到数据集 (xdata,ydata)。-matlab开发
代码中存在一些语法错误和函数参数错误。
代码中的fun1和fun2分别定义了两个函数,但是在后续的操作中并没有使用。可以将fun1和fun2的定义删除。
在fun1的定义中,缺少了一个乘号,应该改为 fun1=@(x,u) x(1)*x(2)*u;
在fun2的定义中,分母中的 xdata 和 y(2) 应该用乘号连接,应该改为 fun2=@(y,xdata) y(1)*xdata/(y(2)*xdata);
最后一行代码中,lincurve应该改为fun1,curve应该改为fun2。
修改后的代码如下:
xdata=[0.02 0.02 0.06 0.06 0.11 0.11 0.22 0.22 0.56 0.56 1.10 1.10];
ydata=[76 47 97 107 123 139 159 152 191 201 207 200];
v=ones(1,length(ydata))./ydata;
u=ones(1,length(xdata))./xdata;
fun1=@(x,u) x(1)*x(2)*u;
fun2=@(y,xdata) y(1)*xdata/(y(2)*xdata);
x0=[1 1];
x=lsqcurvefit(fun1,x0,u,v);
y(1)=1/x(1);
y(2)=x(2)/x(1);
fun1=fun1(x,u);
fun2=fun2(y,xdata);
plot(u,v,'rp',u,fun1)
title('1/y与1/x的散点图和回归曲线')
plot(xdata,ydata,'rp',xdata,fun2)
title('y与x的散点图和回归曲线')
阅读全文