线性方程组的解(SVD,正规方程)

非齐次线性方程组Ax=b,A是m*n的矩阵,x是n*1,b是m*1。

   超定:当m>n时,rank(A)不等于rank(A,b)    ==>(即b不在A的列向量张成的子空间中),此时不存在精确解。

                               rank(A)=n=rank(A,b)     ==>(即b在A的列向量张成的子空间中),此时也存在精确解

   当m=n时,rank(A)=rank(A,b)=n,    ==>存在唯一解。

    当m<n时,rank(A)=rank(A,b)<n,    ==>存在无穷解。

齐次线性方程组Ax=0,A是m*n的矩阵,x是n*1。

    超定:当mn时,rank(A)=n      ==> 存在唯一零解。

    当m<n时,rank(A)<n       ==> 存在无穷解。
 

Ax=b,A是m*n,且m>n.

1) A的秩为n,即A是列满秩的。

解法一:SVD奇异值分解

其中利用了正交变换的保范性质,即一个正交矩阵乘一个矢量,矢量的范数不改变。证明如下,

(Ux)^T(Ux)=x^TU^TUx=x^Tx

||Ax-b|| = ||UDV^Tx-b|| = ||DV^Tx-U^Tb||,记y=V^Txb^{'}=U^Tb

那么问题变为||Dy-b^{'}||,其中D为m*n的矩阵并且对角线以外元素为零。该方程组的形式为

显然,离b^{'}最近的Dy是矢量(b_1^',b_2^',......,b_n^',0,....0)^T,由于A的秩为n,那么d_i\neq 0,可以令y_i=b_i^{'}/d_i得到y_i,进而得到x=Vy。

在伪逆的概念下:

对角矩阵D的伪逆D^+

那么A=UDV^T的伪逆为A^+=VD^+U^T

那么解简写为:x=A^+b

解法二:正规方程

参考最小二乘法的几何意义: 任务是在A的列向量所组成的IR^m的子空间中找到接近b的矢量。最接近的情况是Ax是b在A的列空间IR^m中的投影,那么Ax-b必然是与A的列空间垂直的矢量,垂直投影指向b。那么Ax-b垂直于A的每一列。

A^T(Ax-b)=0

(A^TA)x=A^Tb,

那么这是一个n*n的线性方程组,称正规方程。

由于A秩为n,(A^TA)为n*n的可逆矩阵。则方程解为x=(A^TA)^{-1}A^Tb

当n相对于m很小时,正规方程解有优势。

2)当A的秩为r<n时,即A不是列满秩的。

待研究。

 

Ax=0,A是m*n,且m>n.

1) A的秩为n,即A是列满秩的。

解法一:SVD奇异值分解

||Ax||=||UDV^Tx||=||DV^Tx||

对于齐次方程组,x是方程组的解,那么乘以一个标量k,即kx也是方程组的解,一个约束是求||x||=1的解。

即在||x||=||V^Tx||=1约束下求,最小化||DV^Tx||

y=V^Tx,则问题变成在||y||=1下最小化||Dy||,D是一个按降序排列的对角矩阵,

则解为y=(0,0,....0,1)^T,x=Vy.即是V的最后一列,也是A^TA的最小特征值的特征矢量

2)当A的秩为r<n时,即A不是列满秩的。

待研究。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要求线性方程组的最小范数,可以使用奇异值分(Singular Value Decomposition,SVD)方法。下面是求解线性方程组最小范数的步骤: 1. 将线性方程组表示为矩阵形式:Ax = b,其中A是系数矩阵,x是未知向量,b是常数向量。 2. 对系数矩阵A进行奇异值分:A = UΣV^T,其中U和V是正交矩阵,Σ是对角矩阵。 3. 将线性方程组表示为奇异值分的形式:UΣV^Tx = b。 4. 由于U和V是正交矩阵,它们的转置等于它们的逆。因此,可以将方程组重写为:ΣV^Tx' = U^Tb,其中x'是新的未知向量。 5. 由于Σ是对角矩阵,可以通过将对角线上的非零元素取倒数,并将其他元素设为零来计算Σ的伪逆Σ⁺。 6. 计算新的未知向量x':x' = VΣ⁺U^Tb。 这样就得到了线性方程组的最小范数x'。 以下是使用NumPy库来求解线性方程组最小范数的示例代码: ```python import numpy as np # 定义线性方程组的系数矩阵 A 和常数向量 b A = np.array([[1, 2], [3, 4], [5, 6]]) b = np.array([1, 2, 3]) # 进行奇异值分 U, S, Vt = np.linalg.svd(A) # 计算伪逆矩阵 S_pseudo_inv = np.zeros((A.shape[1], A.shape[0])) S_pseudo_inv[:A.shape[1], :A.shape[1]] = np.linalg.inv(np.diag(S)) # 计算最小范数 x_prime = Vt.T @ S_pseudo_inv @ U.T @ b # 打印最小范数 print("线性方程组的最小范数为:", x_prime) ``` 在这个示例中,我们使用`np.linalg.svd`函数对系数矩阵A进行奇异值分,得到正交矩阵U、对角矩阵Σ和正交矩阵V的转置。然后,我们计算Σ的伪逆矩阵S_pseudo_inv,以及最小范数x_prime。最后,我们打印出最小范数。 如果你有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值