线性方程求解之 二范数类型

本文介绍了当线性方程组过定(m>n)时,如何通过最小化二范数来求解。在这种情况下,我们解决的是一个优化问题:minx∥Ax−b∥2,其导数形式为ATAx−ATb=0。通过求解x=(ATA)−1ATb,我们得到原方程的近似解,这在A非方阵且无逆时尤为有用。
摘要由CSDN通过智能技术生成

求解线性系统
在线性代数中我们经常需要求解具有m个方程 ,n 个 未知量的问题。这个问题可以以简洁的形式 表示为
Ax=b
其中 A 是一个 m×n x 是一个长度为n的向量(如不特别强调,都是列向量) , b 是一个长度为m 的向量。如果 m=n ,并且 满秩(各行向量或列向量线性无关) ,则这个线性方程的解为 x=A1b
那如果 m>n ?这意味着什么?
事实上,实际问题中常常碰到的是 m>n 的情况 ,这时我们方程的数量大于未知数的数量,这样我们面对的是一个over-determined 系统的求解问题。每个方程典型上包含噪声,或者是不正确的观察。在这样的情形下,我们尝试求解的是下面的最优化问题。
minxAxb

线性方程组的最小范数解,可以使用奇异值分解(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。最后,我们打印出最小范数解。 如果你有任何其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值