声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1002|回复: 5

[编程技巧] 这里的最小二乘法出现什么错误了

[复制链接]
发表于 2009-8-14 11:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
公式是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); [theta,rho,zi] = 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 编辑 ]
回复
分享到:

使用道具 举报

 楼主| 发表于 2009-8-14 19: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 编辑 ]
发表于 2009-8-14 19:25 | 显示全部楼层
大呼小脚
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 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2009-8-21 13:15 | 显示全部楼层

回复 板凳 VibrationMaster 的帖子

谢谢,谢谢,呵呵,呵呵
你太好了,呵呵,太谢谢你了,:loveliness: :victory:

[ 本帖最后由 ChaChing 于 2009-8-22 11:30 编辑 ]
发表于 2009-8-23 15:32 | 显示全部楼层
稍微修了下, 参考下
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=[pai_theta'*pai_theta, a12; a12, rho'*rho];
B=[pai_theta'*zi; rho'*zi];
aus=A\B
 楼主| 发表于 2009-8-24 10:40 | 显示全部楼层

谢谢啦

:@D ,是简便了很多,呵呵,谢谢啦!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-17 00:32 , Processed in 0.057559 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表