一个MATLAB函数拟合问题

一个MATLAB函数拟合问题
x1=0:7:42
x2=0:3:18
Y=[86.9 162.5 216.4 274.7 274.3 301.4 270.3;...
110.4 204.4 276.7 342.8 343.4 368.4 335.1;...
134.3 238.9 295.9 363.3 361.7 345.4 351.5;...
162.5 275.1 325.3 336.3 381.0 362.4 382.2;...
158.2 237.9 320.5 353.7 369.5 388.2 355.3;...
144.3 204.5 286.9 322.5 345.9 344.6 353.5;...
88.7 192.5 219.9 278.0 319.1 290.5 281.2]
%这是一个试验所得的数据,需要用二元二次函数进行拟合,请给出MATLAB
%拟合的代码,要求是常数项,交叉项以及二次项都有。50分。
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function z=zhidao_fit_1(a,x)
%其中x,y分别用x(1,:),x(2,:)表示
%z=a(1)*x^2+a(2)*x*y+a(3)*y^2+a(4)*x+a(5)*y+a(6)

z=a(1)*x(1,:).^2+a(2)*x(1,:).*x(2,:)+a(3)*x(2,:).^2+a(4)*x(1,:)+a(5)*x(2,:)+a(6);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

以下是测试:在Matlab下面输入:
%先由已经的x,y和已知的二元二次项系数aa来产生z,然后通过x,y,z
%验证一下:能否得到我们刚才所选用的参数aa
%下面以随机数为例
x=rand(1,100);
y=rand(1,100);

aa=[1,2,3,4,5,6];

F=zhidao_fit_1(aa,[x;y]);
[A,res]=lsqcurvefit('zhidao_fit_1',ones(1,6),[x;y],F);
A

得到的结果:
A =

0.9999 2.0000 3.0000 4.0001 5.0001 6.0000
跟aa的值吻合,说明程序的可行。

===============以下是解决你的实例
在Matlab下输入:
x1=0:7:42;
x2=0:3:18;
Y=[86.9 162.5 216.4 274.7 274.3 301.4 270.3;
110.4 204.4 276.7 342.8 343.4 368.4 335.1;
134.3 238.9 295.9 363.3 361.7 345.4 351.5;
162.5 275.1 325.3 336.3 381.0 362.4 382.2;
158.2 237.9 320.5 353.7 369.5 388.2 355.3;
144.3 204.5 286.9 322.5 345.9 344.6 353.5;
88.7 192.5 219.9 278.0 319.1 290.5 281.2];

[xx1,xx2]=meshgrid(x1,x2);
xx1=xx1(:)';
xx2=xx2(:)';
YY=Y(:)';
[A,res]=lsqcurvefit('zhidao_fit_1',ones(1,6),[xx1;xx2],YY);
A

得到结果:
A =

-0.2184 -0.0414 -1.0725 14.4131 21.0414 60.0226
← 上一篇: 下一篇: →