算法说明
文档下载:
算法说明[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()是显示矩阵,结果居然不得单位矩阵
找了好久的原因都找不到,晕~,请大家帮帮忙看看哪出了问题!!
谢谢哦!