-
2020-12-04 06:32:27
原文链接:拓端数据科技 / Welcome to tecdattecdat.cn
在本文中,您将看到如何使用Python的Numpy库解决线性方程组。
什么是线性方程组?
维基百科将线性方程组定义为:在数学中,线性方程组(或线性系统)是两个或多个涉及同一组变量的线性方程的集合。
解决线性方程组的最终目标是找到未知变量的值。这是带有两个未知变量的线性方程组的示例,x并且y:
等式1:4x + 3y = 20
-5x + 9y = 26
为了解决上述线性方程组,我们需要找到x和y变量的值。解决此类系统的方法有多种,例如消除变量,克莱默规则,行缩减技术和矩阵解决方案。在本文中,我们将介绍矩阵解决方案。
在矩阵解中,要求解的线性方程组以矩阵形式表示AX = B。例如,我们可以用矩阵形式表示等式1,如下所示:A = [[ 4 3]
[-5 9]]
X = [[x]
[y]]
B = [[20]
[26]]
要查找的值x和y变量方程1,我们需要找到在矩阵中的值X。为此,我们可以采用矩阵逆的点积A和矩阵B,如下所示:
X = inverse(A).B
用numpy求解线性方程组
要求解线性方程组,我们需要执行两个操作:矩阵求逆和矩阵点积。Python的Numpy库支持这两种操作。如果尚未安装Numpy库,则可以使用以下pip命令:
$ pip install numpy
现在让我们看看如何使用Numpy库解决线性方程组。
使用inv()和dot()方法
首先,我们将找到A在上一节中定义的矩阵逆。
首先让我们A在Python中创建矩阵。要创建矩阵,array可以使用Numpy模块的方法。矩阵可以视为列表列表,其中每个列表代表一行。
在以下脚本中,我们创建一个名为的列表m_list,其中进一步包含两个列表:[4,3]和[-5,9]。这些列表是矩阵中的两行A。要A使用Numpy 创建矩阵,请将m_list传递给array方法,如下所示:
import numpy as np
m_list = [[4, 3], [-5, 9]]
A = np.array(m_list)
为了找到矩阵的逆,将矩阵传递给linalg.inv()Numpy模块的方法:inv_A = np.linalg.inv(A)
print(inv_A)
下一步是找出矩阵的逆矩阵之间的点积A和矩阵B。重要的是要提一下,只有在矩阵的内部尺寸相等的情况下,才可能在矩阵之间获得矩阵点积,即,左矩阵的列数必须与右矩阵的行数匹配。
要使用Numpy库查找点积,请使用该linalg.dot()函数。B = np.array([20, 26])
X = np.linalg.inv(A).dot(B)
print(X)
输出:
[2. 4.]
这里,2和4是未知的各个值x和y在等式1。验证一下,如果在方程式中插入2未知数x并4替换未知数,您将看到结果为20。y4x + 3y
现在,让我们解决由三个线性方程组成的系统,如下所示:4x + 3y + 2z = 25
-2x + 2y + 3z = -10
3x -5y + 2z = -4
可以使用Numpy库按以下方式求解以上方程式:
公式2:print(X)
在上面的脚本中,linalg.inv()和linalg.dot()方法链接在一起。该变量X包含方程式2的解,并打印如下:
[ 5. 3. -2.]
未知数x,,y和的值分别是5、3 z和-2。您可以将这些值代入公式2并验证其正确性。
使用solve()方法
在前两个示例中,我们使用linalg.inv()和linalg.dot()方法来找到方程组的解。但是,Numpy库包含该linalg.solve()方法,该方法可用于直接找到线性方程组的解:print(X2)
输出:
[ 5. 3. -2.]
您可以看到输出与以前相同。
一个真实的例子
让我们看看如何使用线性方程组来解决实际问题。
假设有一个卖水果的人一天就卖出了20个芒果和10个橘子,总价为350元。第二天,他以500元的价格出售了17个芒果和22个橙子。如果这两天的水果价格都保持不变,那么一个芒果和一个橙子的价格是多少?
使用两个线性方程组可以轻松解决此问题。
假设一个芒果x的价格为,一个橙子的价格为y。上面的问题可以这样转换:20x + 10y = 350
17x + 22y = 500
上面的方程组的解决方案如下所示:X = np.linalg.solve(A,B)
print(X)
这是输出:
[10. 15.]
输出显示,一个芒果的价格为10元,一个橙子的价格为15元。
结论
本文介绍了如何使用Python的Numpy库解决线性方程组。您可以链式使用linalg.inv()和linalg.dot()方法来求解线性方程组,也可以简单地使用该solve()方法。该solve()方法是首选方法。
更多相关内容 -
利用SVD(奇异值分解)求解线性方程组.zip
2020-09-24 15:51:34在MVG(多视图几何)和机器学习领域,求解线性方程组几乎是所有算法的根本,本文旨在帮助读者搞懂矩阵分解与线性方程组的关系,并给出利用SVD求解线性方程组的实战代码。 本资源是博文"【动手学MVG】矩阵分解与线性... -
利用eigen矩阵库求解线性方程组
2017-11-21 18:37:35c++代码,利用eigen矩阵库,求解线性方程组。 c++代码,利用eigen矩阵库,求解线性方程组。 c++代码,利用eigen矩阵库,求解线性方程组。 c++代码,利用eigen矩阵库,求解线性方程组。 c++代码,利用eigen矩阵库,... -
Numpy系列(七)求解线性方程组、计算逆矩阵求解线性方程组
2020-08-16 16:40:22计算逆矩阵求解线性方程组 对于这样的线性方程组: x + y + z = 6 2y + 5z = -4 2x + 5y - z = 27 可以表示成矩阵的形式: [11102525−1][xyz]=[6−427]\left[\begin{array}{ccc} 1 & 1 & 1 \\ 0 ...求解线性方程组
对于
Ax=b
,已知A
和b
,怎么算出x
?调用
solve
方法直接求解:还可以验证一下:
计算逆矩阵求解线性方程组
对于这样的线性方程组:
- x + y + z = 6
- 2y + 5z = -4
- 2x + 5y - z = 27
可以表示成矩阵的形式:
[ 1 1 1 0 2 5 2 5 − 1 ] [ x y z ] = [ 6 − 4 27 ] \left[\begin{array}{ccc} 1 & 1 & 1 \\ 0 & 2 & 5 \\ 2 & 5 & -1 \end{array}\right]\left[\begin{array}{l} x \\ y \\ z \end{array}\right]=\left[\begin{array}{c} 6 \\ -4 \\ 27 \end{array}\right] ⎣⎡10212515−1⎦⎤⎣⎡xyz⎦⎤=⎣⎡6−427⎦⎤
用公式可以表示为:Ax=b,其中A是矩阵,x和b都是列向量
- 逆矩阵(inverse matrix)的定义:
设A是数域上的一个n阶矩阵,若存在另一个n阶矩阵B,使得: AB=BA=E ,则我们称B是A的逆矩阵,而A则被称为可逆矩阵。注:E为单位矩阵。
- 使用逆矩阵求解线性方程组的方法:
两边都乘以 A − 1 A^{-1} A−1,变成 A − 1 A x = A − 1 b A^{-1}Ax=A^{-1}b A−1Ax=A−1b,因为任何矩阵乘以单位矩阵都是自身,所以 x = A − 1 b x = A^{-1}b x=A−1b
求解逆矩阵
np.linalg.inv()
方法就可以求解逆矩阵:验证矩阵和逆矩阵的乘积是单位矩阵
验证线性方程组
-
大型系数矩阵求解线性方程组GMRES算法的VB程序
2022-04-29 00:24:29大型系数矩阵求解线性方程组GMRES算法的VB程序 -
GS迭代法,求解线性方程组 matlab代码
2020-02-28 16:58:52GS迭代法,求解线性方程组 matlab代码 -
Eigen求解线性方程组
2017-04-22 16:05:15手动输入矩阵,调用C++Eigen库求解线性方程组,代码精简 -
CUSPARSE的LU分解以及求解线性方程组
2018-01-24 20:26:43在Ubuntu下的CUDA编程中,使用CUSPARSE API中的cusparseScsrsv_solve函数和cusparseScsrilu0进行LU分解以及求解线性方程组。 -
利用逆矩阵解线性方程组_经典Jacobi方法用于求解矩阵特征值
2020-11-20 15:49:531、引言求解线性方程组在许多领域中都有重要应用,写成矩阵的形式: 。求解 可以写成: ,这里需要求解矩阵 的逆。《线性代数》中给出的方法主要有两类:1、设置增广矩阵,利用高斯消元法,通过初等行列变换可以求 ...1、引言
求解线性方程组在许多领域中都有重要应用,写成矩阵的形式:
。
求解
可以写成:
,这里需要求解矩阵
的逆。《线性代数》中给出的方法主要有两类:
1、设置增广矩阵,利用高斯消元法,通过初等行列变换可以求
但这种方法不利于使用计算机计算。
2、利用矩阵对角化求
这种方法关键在于求解矩阵
的特征值和特征向量,根据《线性代数》中给出求特征值和特征向量的方法,其复杂度大概是
,其中
是矩阵的行数,有个著名的算法SVD(singular value decomposition)。关于SVD的介绍已经很多了,今天我们想要更近一步,介绍另一种著名的矩阵对角化方法——
2、经典Jacobi方法
1846年数学家Jacobi提出的经典Jacobi方法用于求解实对称矩阵的特征值。它的核心思想是采用一些列的Jacobi平面旋转矩阵将对称阵
变为对角阵
把
左右的Jacobi旋转矩阵乘起来就是特征向量组成的特征矩阵,
为特征值组成的对角阵。Jacobi希望每通过一个Jacobi旋转矩阵都能消去矩阵
中的
Jacobi旋转矩阵定义如下:
一个Jacobi旋转矩阵,对角线上只有第i行i列,j行j列为c,其余为1,未标出的元素均为0。
表示消去元素在矩阵
中的位置,其中
,
被称为旋转角,我们的目的就是找到一个合适的
,使得非对角元上的两个元素变为0。由于
仅影响
行列的元素,故写为二阶主子式来表示旋转变换过程:
其中
解得:
当一次变换结束后,
和
同时为0,而矩阵
的非对角元素的Frobenius norm的平方和将减少
[2]
其中
表示取A的对角线元素组成的对角矩阵。Frobenius norm的定义为:
3、复杂度分析
当
时,说明
被对角化了,其中
为精度要求。从贪心算法的角度来说,每次做旋转都希望尽可能减少Frobenius norm,因此
的选择矩阵
中最大的非对角元做旋转变换。
但由于每次做旋转变换后会影响矩阵
两行两列的数据,这会导致前面变成0的非对角元素在后续的变换中变为非0因此旋转矩阵个数并不是
,同时在矩阵中寻找绝对值最大非对角元的复杂度也是
,而合并旋转变换矩阵的部分复杂度为
,这在大规模矩阵中,遍历元素将占绝大部分时间。
可能的改进方法
(1)循环Jacobi方法[3]
按照行顺序或者列顺序依次做Jacobi旋转变换,持续多轮,直到满足收敛条件。
图1:循环遍历的Jacobi方法 (2)过关Jacobi方法[4]
在顺序遍历的基础上,在加入门限值,大于某个门限值,才做旋转变换,其中门限值与
的Frobenius norm有关。
4、非对称矩阵的Jacobi方法
对于非对称矩阵
,可以将其构造为对称矩阵
5、讨论
高效使用Jacobi方法的关键在于,如何使用尽量少的旋转角度完成对角化矩阵,贪心算法是否是最优方法还值得进一步探讨。是否在矩阵中存在一个固定的最优的
的顺序组合,还是说这与矩阵元素的具体取值有关。
参考文献
[1] 郭强. 并行JACOBI方法求解矩阵奇异值的研究[D]. 苏州大学.
[2] C.F. Van Loan G. H. Golub. Matrix COmputations[M]. John Hopkins University Press, Baltimore and London, second edition, 1993.
[3] E. R. Hansen. On Cyclic Jacobi Methods[J]. J.Soc,Indust.Appl.Math, 1963, 11(2): 448–459.
[4] B. N. Parlett. The Symmetric Eigenvalue Problem[M]. Prentice-Hall, 1980.
-
五、广义逆矩阵–求解线性方程组
2020-12-11 11:43:24五、广义逆矩阵–求解线性方程组 1. 广义逆矩阵A+ 为解决各种线性方程组(系数矩阵是非方阵和方阵为奇异),将逆矩阵的概念推广到"不可逆方阵"和"长方形矩阵"上,从而产生了"广义逆矩阵"有了广义逆矩阵之后,可以给出... -
矩阵解线性方程
2020-02-24 17:58:10用矩阵表示方程组 我们使用矩阵来包含一个方程组的主要信息 上面一个是系数矩阵,一个是曾广矩阵 那么如何求解,首先我们看看先后关系 答案很明显了,解方程也就是对矩阵的变换 我们来看组无解的情况: 当化成第... -
关于一类并行求解线性方程组的迭代方法的补充
2019-12-28 14:44:32关于一类并行求解线性方程组的迭代方法的补充,张承平,,本文补充了两种平方零矩阵的结构,一般对称方程的对称标准化处理,并给出一类并行迭代方法来求解线性方程组的几个收敛定理,采用数值 -
MATLAB实现列主元消去法求解任意线性方程组的解.docx
2021-04-03 14:14:43MATLAB实现列主元消去法求解任意线性方程组的解 -
论文研究-矩阵分解在求解线性矩阵方程中的应用 .pdf
2019-08-21 11:01:34矩阵分解在求解线性矩阵方程中的应用,刘景松,,矩阵的分解在最优化问题、特征值问题、最小二乘方问题、广义逆矩阵问题及统计学等方面都有着重要应用。本文中讨论和 分析了矩阵�� -
实验一用matlab求解线性方程组.docx
2020-12-06 18:45:24实验 用 matlab 求解线性方程组 第一节 线性方程组的求解 一齐次方程组的求解 rref A %将矩阵 A 化为阶梯形的最简式 nullA %求满足 AX0 的解空间的一组基即齐次线性方程组的基 础解系 例 求下列齐次线性方程组的一个... -
矩阵分解法求解线性方程组
2019-08-13 16:57:251、LU分解求解线性方程组 把一个矩阵分解为一个上三角阵和一个下三角阵的乘积的形式称为矩阵的因式分解。若所分解的下三角阵还是单位下三角阵,则称这种分解为LU分解。 设n阶矩阵A的各阶顺序主子式都不为0,则A存在... -
解线性方程组的直接方法 —— 三角分解法
2021-01-07 21:31:35矩阵的三角分解其基本原理可见上面的博客链接(写的很好,此处不再赘述)。 本博客主要是给出三角分解的C语言实现过程。 这里举出的计算实例如下所示: 2. 我们采用的第二种方法是直接将L中的元素和U中的元素写入到... -
【矩阵论】广义逆矩阵与线性方程组求解思维导图
2020-06-07 14:28:31前言:为什么需要广义逆矩阵? 我们在书中所学的逆矩阵A−1A^{-1}A−1必须是非奇异矩阵才行,但现实生活...一、广义逆矩阵的概念与性质二、广义逆矩阵与线性方程组的求解参考文献 一、广义逆矩阵的概念与性质 二、广义 -
Matlab用Jacobi迭代法求解非线性方程组
2018-12-20 12:07:36利用Jacobi迭代法求解非线性方程组Ax=b,当系数矩阵A是严格对角占优矩阵或不可约对角占优时,该方法适用,里面附有详细注释,适合新手阅读 -
matlab逆矩阵/初等变换法求解线性方程组
2020-07-14 09:03:20线性方程组是线性代数学课的考虑范畴,会使用matlab解决,可以效率更快。matlab种逆矩阵是左除和右除。初等变换法就是一个rref函数 -
矩阵求逆与线性方程组求解
2018-04-25 21:21:14讲解了经典的矩阵求逆方法和线性方程组的解法,矩阵是目前人工智能、深度学习的计算方式 -
计算方法:高斯消去法(线性方程组求解)
2020-12-21 15:11:28为求解一个线性方程组,首先构造增广矩阵[A|B],采用偏序选主元策略的高斯消去法变换成上三角矩阵,再执行回代过程得到解。 输入形式 在屏幕上依次输入方阵阶数n,系数矩阵A和常数矩阵B。 输出形式 首先输出上三角... -
基于MATLAB的稀疏矩阵与符号求解线性方程组(附完整代码)
2022-04-19 00:19:58前面文章已经更新了至少三种求解线性方程组的MATLAB指令,分别是: 逆矩阵法:x=inv(A)*b,或者写成 x=A^(-1)*b 伪逆法:x=pinv(A)*b 左除法:x=A\b 本节将更新另外两种方法,符号矩阵法与稀疏矩阵求解法。 ... -
高斯·赛德尔(Gauss Seidel):使用高斯·赛德尔方法求解线性方程组。-matlab开发
2021-05-30 13:45:53使用 Gauss Seidel 方法求解线性方程组。 在这种情况下,A 是方程矩阵,向量 b 具有方程的右侧。 -
线性代数代码实现(七)求解线性方程组(C++)
2021-11-06 10:17:42在本篇文章中,我和大家探讨一下线性代数里面一个重要的知识——线性方程组及其解法。 一、线性代数知识回顾: 我们先探讨一下二元一次方程组的解法: 相信这个解法大家已经很熟悉了,将第一个式子的 -2... -
Matlab求解线性方程组 非线性方程组.pdf
2022-05-31 19:59:11Matlab求解线性方程组 非线性方程组.pdfMatlab求解线性方程组 非线性方程组.pdfMatlab求解线性方程组 非线性方程组.pdfMatlab求解线性方程组 非线性方程组.pdfMatlab求解线性方程组 非线性方程组.pdfMatlab求解线性... -
Matlab求解线性方程组 非线性方程组.docx
2022-05-31 19:14:33Matlab求解线性方程组 非线性方程组.docxMatlab求解线性方程组 非线性方程组.docxMatlab求解线性方程组 非线性方程组.docxMatlab求解线性方程组 非线性方程组.docxMatlab求解线性方程组 非线性方程组.docxMatlab求解... -
第二章,用矩阵解线性方程组,01-高斯消元法
2020-10-03 11:26:51第二章,用矩阵解线性方程组,01-高斯消元法行列式的局限超定方程组与欠定方程组消元法与同解变换消元法同解变换等价矩阵的定义矩阵元素、行标和列标行矩阵或行向量 玩转线性代数的笔记 行列式的局限 超定方程组与欠... -
Matlab求解线性方程组、非线性方程组.pdf
2022-05-31 19:42:46Matlab求解线性方程组、非线性方程组.pdfMatlab求解线性方程组、非线性方程组.pdfMatlab求解线性方程组、非线性方程组.pdfMatlab求解线性方程组、非线性方程组.pdfMatlab求解线性方程组、非线性方程组.pdfMatlab求解...