> 数学 >
奇异矩阵求逆问题!
急求奇异矩阵求逆问题:
已知:Y=X*C,其中Y大小为100*1,X为100*1110;C应该为1110*1,现在需要求系数C.我用最小二乘法可得
C=inv(X'X)*X'Y;但是问题来了:X'X是奇异矩阵,行列式为0,所以matlab会显示warning! 有什么方法实现X'X的逆矩阵吗?请各位帮忙啊!万分感谢!
本题式子:Y=X*C--是典型多元线性回归公式.
我已经用pinv函数,最终预测得到的X*C其结果和Y的数据是一模一样,按理来说不应该是这么精确吧!找不出原因,大侠们帮忙啊!
人气:295 ℃ 时间:2020-10-02 00:33:10
解答
X奇异C有无穷多解.找基础解系
对不起,最小二乘都快忘光了,线性代数还行.希望下面的东西能帮到你(你试试看):
对A进行QR分解(A=QR),其中Q是nxk正交矩阵(Orthonormal Matrix),R是kxk上三角矩阵(Upper Triangular Matrix),然后min ||Ax-b|| = min ||QRx-b|| = min ||Rx-Q'b||,用MATLAB命令x=R\(Q'*b)可解得x.
最小二乘法的Matlab实现
① 一次函数 使用polyfit(x,y,1)
②多项式函数 使用 polyfit(x,y,n),n为次数
拟合曲线
x=[0.5,1.0,1.5,2.0,2.5,3.0],y=[1.75,2.45,3.81,4.80,7.00,8.60].
MATLAB程序如下:x=[0.5,1.0,1.5,2.0,2.5,3.0]; y=[1.75,2.45,3.81,4.80,7.00,8.60]; p=polyfit(x,y,2) x1=0.5:0.05:3.0; y1=polyval(p,x1); plot(x,y,'*r',x1,y1,'-b') 计算结果为:p =0.5614 0.8287 1.1560
即所得多项式为y=0.5614x^2+0.08287x+1.15560
③非线性函数 使用 lsqcurvefit(fun,x0,x,y)我明白了。。。不好意思,我复制的时候也没有多注意,以上的内容帮不了你不过还是解释一下。那个不是等于0,而是范数的最小值。因为最小二乘法是由于方程无法求精确解所以才采用近似,使得x的值代入后能更接近于b。你的情况里最根本的问题是,这个方程根本就用不着最小二乘法= =|||,最小二乘法是在方程组系数的秩大于增广矩阵从而无解时才采用近似的。而在这里,原方程组AX=b中未知量的个数1110大于方程的个数100,所以本身就是有解的(无穷多解)。出现奇异的原因是:原方程组的秩最多为100,所以A'A的秩会小于100,故而是奇异矩阵。最后再提醒一下,使用最小二乘法一定要是原方程组无解(所以至少未知量的个数要大于方程组的个数)时才行,这时的A'AX=A'b是原方程组的正规方程,一定是有解的,不会出现系数矩阵奇异的情况!而这也正是你预测的数据与Y一摸一样的原因。。。
推荐
猜你喜欢
© 2024 79432.Com All Rights Reserved.
电脑版|手机版