这里的最小二乘法出现什么错误了
公式是z=a*theta+b*rho请大家帮我看看这个程序,我的最小二乘法哪里错了?谢谢大家,在线等,谢谢啦!
clc; clear all;
load('C:\Documents and Settings\zou\桌面\newshuj.txt'); input_nor=newshuj;
X=input_nor(:,1); Y=input_nor(:,2); Z=input_nor(:,3); = cart2pol(X,Y,Z);
if(length(theta) == length(rho)),n = length(theta);
else disp('x和y的维数不相等!'); return; end %维数检查
A=zeros(2,2); B=zeros(2,1);
for i=1:length(theta)
A(1,1)=A(1,1)+theta(i)*theta(i);
A(1,2)=-(A(1,2)+theta(i)*rho(i));
A(2,2)=-(A(2,2)+rho(i)*rho(i));
B(1,1)=B(1,1)+theta(i)*zi(i);
B(2,1)=B(2,1)+rho(i)+zi(i);
end
A(2,1)=-A(1,2); aus=A\B
程序可以运行,但是结果是不对的,aus(1)应该等于10左右的。 aus(2)=0.3640左右
我的错误出现在哪里呢?谢谢大家啊!非常感谢,我看了一个上午,硬是没有想出来,在线等,谢谢!
[ 本帖最后由 ChaChing 于 2009-8-23 15:03 编辑 ]
来看看啊,最小二乘法 平面拟合 错误出去哪里了?谢谢大家!
clc; clear all;x=1:1:10; y=3:0.5:7.5; length(x); length(y);
z=2*x+3*y;
pai_theta=x'; rho=y'; zi=z';
if(length(pai_theta) == length(rho)), n = length(pai_theta);
else disp('x和y的维数不相等!'); return; end %维数检查
A=zeros(2,2); B=zeros(2,1);
for i=1:length(pai_theta)
A(1,1)=A(1,1)+pai_theta(i)*pai_theta(i);
A(1,2)=A(1,2)+pai_theta(i)*rho(i);
A(2,2)=A(2,2)+rho(i)*rho(i);
B(1,1)=B(1,1)+pai_theta(i)*zi(i);
B(2,1)=B(2,1)+rho(i)+zi(i);
end
A(2,1)=A(1,2); aus=A\B
可以运行,可是结果并不是2,和3, 这是为什么呢?我用就是最小二乘法呀
[ 本帖最后由 ChaChing 于 2009-8-23 14:55 编辑 ] 大呼小脚
B(2,1)=B(2,1)+rho(i)+zi(i);--》 B(2,1)=B(2,1)+rho(i)*zi(i);
[ 本帖最后由 ChaChing 于 2009-8-23 15:24 编辑 ]
回复 板凳 VibrationMaster 的帖子
谢谢,谢谢,呵呵,呵呵你太好了,呵呵,太谢谢你了,:loveliness: :victory:
[ 本帖最后由 ChaChing 于 2009-8-22 11:30 编辑 ] 稍微修了下, 参考下
clc; clear all;
x=1:1:10; y=3:0.5:7.5; length(x); length(y); z=2*x+3*y;
pai_theta=x'; rho=y'; zi=z';
if(length(pai_theta) == length(rho)), n = length(pai_theta);
else disp('x和y的维数不相等!'); return; end %维数检查
a12=pai_theta'*rho;
A=;
B=;
aus=A\B
谢谢啦
:@D ,是简便了很多,呵呵,谢谢啦!
页:
[1]