目前位置: VCer资源中心 >>> VCer论坛 >>> 技术问答

[本帖已阅读2191次 分值100 回复0次] 张贴资源 发回信箱 控制面板

最小二乘算法源码请大家帮忙看看出了什么问题

提供者:barco 张贴时间:2004-05-14 12:58:58.0 出处:vcer.net 作者:不祥

最小二乘算法源码请大家帮忙看看出了什么问题(2004-05-14 12:58:58.0)


巴壳


 
级别: VCer小兵
头衔: VCer会员

经验: 462
作品: 15
分会: 华中分会
注册: 2004-05-13 22:18:24.0
登录: 2004-07-22 21:24:52.0

算法说明

 

文档下载: 算法说明[750,563字节]

 

设随机变量Y(论文中的涌水量值)依赖于X1,X2,X3,X4 (分别为总进尺,原煤产量,回采面积和降水量)。Y是正态随机变量,其均值为µ(X1,X2,X3,X4)=β0+β1 X1+β2 X2+β3 X3+β4X4 其中,Y值,X1,X2,X3,X4均为已知

问题:如何求β0,β1,β2,β3,β4这四个值,用最小二乘法解决此问题,即选择如此的βi (i=0,1,2,3,4)使残差Q=∑[yk- yk]2 =∑[yk-(β0+β1 X1kβ2 X2kβ3 X3kβ4X4k)]2 达最小。令аQ/аβi=0(i=0,1,2,3,4)(求偏导)就求得回归系数β0,β1,β2,β3,β4 的正规方程组 

其中p=4,上述方程组写成矩阵形式A*B=YY……①,B就是待求参数组成的列向量:

(β0,β1,β2,β3,β4 )T

程序思路

在工程里有三个类:CPoint,  Clist, CMatrix

CPint 是为了装入我的输入数据,每组为:(Y、X1、X2、X3、X4),Clist是为了动态地装入各组数据,以使输入的组数不固定!设输入数据组数为N,在程序中为n_P,然后在程序里我用了矩阵

    1   1   1 ……  1   1   1  

    X11 X12 X13……X1n-1    X1n

X = X21 X22 X23……X2n-1    X2n

    X31 X32 X33……X3n-1    X3n

X41 X42 X43……X4n-1    X4n

Y= (Y1 Y2 ……Yn-1 Yn)T

上述方程A*B=YY……①中A=X*XT ,YY=X*Y ,在程序中矩阵A、B、X、Y、YY

分别对应类CMatrix的对象A、B、X、Y、YY,于是 B=A-1*YY 求得参数

(β0,β1,β2,β3,β4 )T

出现的问题

我们测试了Clist类的数据输入和CMatrix的各种运算都是正确的,但最后计算参数矩阵B 有很大错误,添加了测试 语句:

CMatrix D;

D=A*A.reverse();

D.Display();

其中reverse()是求矩阵逆,Display()是显示矩阵,结果居然不得单位矩阵

找了好久的原因都找不到,晕~,请大家帮帮忙看看哪出了问题!!

谢谢哦!

注:转载文章需注明来源:VCer.net 文章地址:http://vcer.net/2161.html

  如果你觉得VCer.net不错,而且你愿意为VCer.net捐赠一元钱,那么点击后面的捐赠按钮吧:) vcer.net捐赠

[回复该贴] [加入个人书签]