登录论坛

查看完整版本 : [MATLAB基础] 简单的数据拟合程序编程,谁能帮我看看哪错了?


xintu9027
2012-06-22, 15:35
%设计变量
t=[0.0022 0.0022 0.0022 0.0022 0.0022 0.0022 0.0023 0.0023 0.0023 0.0023 0.0023 0.0023 0.0024 0.0024 0.0024 0.0024 0.0024 0.0024 0.0025 0.0025 0.0025 0.0025 0.0025 0.0025 0.0026 0.0026 0.0026 0.0026 0.0026 0.0026 0.0027 0.0027 0.0027 0.0027 0.0027 0.0027]';
l=[0.1200 0.1300 0.1400 0.1500 0.1600 0.1700 0.1200 0.1300 0.1400 0.1500 0.1600 0.1700 0.1200 0.1300 0.1400 0.1500 0.1600 0.1700 0.1200 0.1300 0.1400 0.1500 0.1600 0.1700 0.1200 0.1300 0.1400 0.1500 0.1600 0.1700 0.1200 0.1300 0.1400 0.1500 0.1600 0.1700]';
a=[1.6000 1.6000 1.6000 1.7000 1.7000 1.7000 1.6000 1.6000 1.6000 1.7000 1.7000 1.7000 1.6000 1.6000 1.6000 1.7000 1.7000 1.7000 1.6000 1.6000 1.6000 1.7000 1.7000 1.7000 1.7000 1.7000 1.7000 1.8000 1.8000 1.8000 1.7000 1.7000 1.7000 1.8000 1.8000 1.8000]';
b=[1.1000 1.2000 1.3000 1.1000 1.2000 1.3000 1.1000 1.2000 1.3000 1.1000 1.2000 1.3000 1.1000 1.2000 1.3000 1.1000 1.2000 1.3000 1.1000 1.2000 1.3000 1.1000 1.2000 1.3000 1.1000 1.2000 1.3000 1.1000 1.2000 1.3000 1.1000 1.2000 1.3000 1.1000 1.2000 1.3000]';
响应值
pcrg=[2.3151 2.3452 2.3721 2.3157 2.3662 2.4118 2.3587 2.3896 2.4172 2.3572 2.4088 2.4554 2.4017 2.4334 2.4616 2.3980 2.4506 2.4982 2.4440 2.4764 2.5053 2.4381 2.4918 2.5402 2.7933 2.8339 2.8699 2.7731 2.8359 2.8929 2.8384 2.8799 2.9166 2.8159 2.8797 2.9377]';
O2=[-202.9898 -201.7412 -199.7662 -197.1919 -195.1847 -193.4136 -193.8554 -193.0568 -191.4518 -189.1154 -187.2725 -185.5763 -185.3962 -184.9974 -183.7346 -181.6335 -179.9613 -178.3569 -177.5454 -177.5001 -176.5516 -174.6796 -173.1797 -171.6785 -170.4459 -170.7064 -170.0215 -168.3391 -166.9764 -165.5550 -163.6328 -164.1731 -163.7539 -162.2846 -161.0899 -159.7837]';
Or=[-49.8852 -47.0071 -44.4500 -48.0079 -45.1424 -42.5878 -50.0945 -47.2516 -44.7319 -48.2422 -45.4268 -42.9093 -50.2372 -47.4295 -44.9476 -48.4041 -45.6416 -43.1648 -50.3219 -47.5492 -45.1051 -48.5027 -45.7949 -43.3615 -48.4412 -45.7528 -43.3944 -46.7696 -44.1662 -41.8268 -48.4717 -45.8135 -43.4874 -46.8001 -44.2480 -41.9509]';
O1eq=[-256.1320 -261.5469 -266.7249 -260.0686 -265.8668 -270.9702 -240.5716 -245.7553 -250.7594 -244.1609 -249.8619 -254.9104 -226.4374 -231.4038 -236.2306 -229.6914 -235.2801 -240.2606 -213.5507 -218.3158 -222.9666 -216.4888 -221.9537 -226.8546 -205.5080 -209.9767 -214.3569 -207.8659 -213.1066 -217.8265 -194.6122 -198.9206 -203.1420 -196.7098 -201.8209 -206.4522]';
Z=[ones(36,1),t,t.^2,l,l.^2,a,a^2,b,b.^2,t.*l,t.*a,t.*b,t.*a.*b,l.*a,l.*b,l.*a.*b,a.*b,l.*t.*a.*b];
c=Z\pcrg
d=Z\O2
e=Z\Or
f=Z\O1eq


运行后,提示:
??? Error using ==> mpower
Matrix must be square.
Error in ==> xiangyingmian0621 at 25
Z=[ones(36,1),t,t.^2,l,l.^2,a,a^2,b,b.^2,t.*l,t.*a,t.*b,t.*a.*b,l.*a,l.*b,l.*a.*b,a.*b,l.*t.*a.*b];
请问我哪里错了,应该如何改?

jimmymacong
2012-06-22, 23:07
我不知道是不是你不小心,Z的赋值式中有一个写错了,不该是a^2,该是a.^2下面是完整语句
Z=[ones(36,1),t,t.^2,l,l.^2,a,a.^2,b,b.^2,t.*l,t.*a,t.*b,t.*a.*b,l.*a,l.*b,l.*a.*b,a.*b,l.*t.*a.*b];

另外补充一下你还可能犯的另外一个拟合错误,Z不是一个满秩阵,因此你可能做的结果并不是你想要的结果,我建议你用伪逆指令代替你的右除指令,比如说:
c=pinv(Z)*pcrg; 这是一个良好的编程习惯,不会引起混淆。
另外告诉你求满秩方阵的逆矩阵的函数b=inv(A);