麻烦帮我看一下代码的问题?
b2=0.5;
b3=0.02;
b4=0.1;
b5=2;
x1data=[470 285 470 470 470 100 100 470 100 100 100 285 285]
x2data=[300 80 300 80 80 190 80 190 300 300 80 300 190]
x3data=[10 10 120 120 10 10 65 65 54 10 120 10 120]
x=[x1data',x2data',x3data'];
ydata=[8.55 3.79 4.82 0.02 2.75 14.39 2.54 4.35 13 8.5 0.05 11.32 3.13]';
b0=[2 1 0 1 3];
fun=@(b,x) (b(1)*x(2,:)-(x(3,:)/b(5)))/(1+b(2)*x(1,:)+b(3)*x(2,:)+b(4)*x(3,:));
C=lsqcurvefit(fun,b0,x,ydata);
x1=linspace(x1data(1),x1data(end));
x2=linspace(x2data(1),x2data(end));
x3=linspace(x3data(1),x3dta(end));
y=fun(C,[x1;x2;x3]);
Plot4(x1data,x2data,x3data,ydata,'o',x1,x2,x3,y) 展开
【代码问题】
1、函数定义有误。
fun=@(b,x) (b(1)*x(2,:)-(x(3,:)/b(5)))/(1+b(2)*x(1,:)+b(3)*x(2,:)+b(4)*x(3,:));
这里的x(1,:)、x(2,:)、x(3,:)与给定的数据数组格式不一致
应纠正为
fun=@(b,x)(b(1)*x(:,2)-(x(:,3)/b(5)))./(1+b(2)*x(:,1)+b(3)*x(:,2)+b(4)*x(:,3));
2、linspace函数使用有误。
x1=linspace(x1data(1),x1data(end));
x2=linspace(x2data(1),x2data(end));
x3=linspace(x3data(1),x3data(end));
由于x1data、x2data与x3data是无规律的数据,所以用linspace函数扩充数据是不对应的。
因此,也绘制不出其新的图形。
【建议】
对于拟合后的数据,应与原数据进行相关系数计算R²(该公式可以参考数理统计的回归分析)。
即ydata与y的比较
y2=fun(C,x);
y1=ydata;
R2=R2_coef(y1,y2);
经多次拟合,可得到
C = 324.25 11.836 20.375 8.3067 0.0042971 0.86396
决定系数 R^2=0.8639580173