作业帮 > 综合 > 作业

请问我这段matlab程序有什么问题?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/12 06:44:08
请问我这段matlab程序有什么问题?
x=[600 600 600 600 600 600 600 500 500 500 500 500 500 500 400 400 400 400 400 400 400 300 300 300 300 300 300 300 200 200 200 200 200 200 200];
y=[4 6 8 10 12 14 16 4 6 8 10 12 14 16 4 6 8 10 12 14 16 4 6 8 10 12 14 16 4 6 8 10 12 14 16];
z=[0 0.20 0.38 0.56 0.71 0.88 0.98 0 0.14 0.29 0.41 0.56 0.69 0.81 0 0.11 0.21 0.39 0.48 0.56 0.64 0 0.12 0.20 0.31 0.40 0.48 0.58 0 0.11 0.26 0.43 0.54 0.67 0.79];
f=@(p,x,y)(p(1)*x.^3+p(2)*x.^2+p(3)*x+p(4)*y+p(5));
p=lsqcurvefit(f,rand(1,2),[x;y],z);
报错如下:
Error using ==> optim\private\lsqncommon
User supplied function failed with the following error:
Index exceeds matrix dimensions.
Error in ==> lsqcurvefit at 149
[x,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...
Error in ==> Untitled at 7
p=lsqcurvefit(f,rand(1,2),[x;y],z);%p=[a b]
请问我应该如何修改?
lsqcurvefit多输入的函数貌似不能直接用的.
吧x和y作为一个复数的实部和虚部,就变成单输入,可以运行了
x=[600 600 600 600 600 600 600 500 500 500 500 500 500 500 400 400 400 400 400 400 400 300 300 300 300 300 300 300 200 200 200 200 200 200 200];
y=[4 6 8 10 12 14 16 4 6 8 10 12 14 16 4 6 8 10 12 14 16 4 6 8 10 12 14 16 4 6 8 10 12 14 16];
z=[0 0.20 0.38 0.56 0.71 0.88 0.98 0 0.14 0.29 0.41 0.56 0.69 0.81 0 0.11 0.21 0.39 0.48 0.56 0.64 0 0.12 0.20 0.31 0.40 0.48 0.58 0 0.11 0.26 0.43 0.54 0.67 0.79];
x=x+y.*i;
f=@(p,x)(p(1)*real(x).^3+p(2)*real(x).^2+p(3)*real(x)+p(4)*imag(x)+p(5));
p=lsqcurvefit(f,rand(1,5),x,z);
再问: 我想把f输出来,并且在图形视窗里绘出f的曲面,以及x,y,z的散点,该如何添加代码呢?谢谢你了
再答: xx=[600 600 600 600 600 600 600 500 500 500 500 500 500 500 400 400 400 400 400 400 400 300 300 300 300 300 300 300 200 200 200 200 200 200 200]; yy=[4 6 8 10 12 14 16 4 6 8 10 12 14 16 4 6 8 10 12 14 16 4 6 8 10 12 14 16 4 6 8 10 12 14 16]; xxx=200:10:600; yyy=1:20; zzz=[]; for j=1:length(xxx) for k=1:length(yyy) zzz(j,k)=f(p,(xxx(j)+yyy(k).*1i)); end end mesh(xxx,yyy,zzz') hold on plot3(xx,yy,z,'r*')