用Python的Numpy求解线性方程组

北慕城南 提交于 2019-12-03 17:32:56

原文链接:http://tecdat.cn/?p=8445

 

在本文中,您将看到如何使用Python的Numpy库解决线性方程组。

什么是线性方程组?

维基百科将线性方程组定义为:

在数学中,线性方程组(或线性系统)是两个或多个涉及同一组变量的线性方程的集合。

解决线性方程组的最终目标是找到未知变量的值。这是带有两个未知变量的线性方程组的示例,x并且y

等式1:

4x  + 3y = 20
-5x + 9y = 26

为了解决上述线性方程组,我们需要找到xy变量的值。解决此类系统的方法有多种,例如消除变量,克莱默规则,行缩减技术和矩阵解决方案。在本文中,我们将介绍矩阵解决方案。

在矩阵解中,要求解的线性方程组以矩阵形式表示AX = B。例如,我们可以用矩阵形式表示等式1,如下所示:

A = [[ 4   3]
     [-5   9]]

X = [[x]
     [y]]

B = [[20]
     [26]]

要查找的值xy变量方程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.]

 

 

这里,24是未知的各个值xy等式1。验证一下,如果在方程式中插入2未知数x4替换未知数,您将看到结果为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()方法是首选方法。

 

如果您有任何疑问,请在下面发表评论。 

 

 

  

大数据部落 -中国专业的第三方数据服务提供商,提供定制化的一站式数据挖掘和统计分析咨询服务

统计分析和数据挖掘咨询服务:y0.cn/teradat(咨询服务请联系官网客服

QQ:3025393450

 

​QQ交流群:186388004 

【服务场景】  

科研项目; 公司项目外包;线上线下一对一培训;数据爬虫采集;学术研究;报告撰写;市场调查。

【大数据部落】提供定制化的一站式数据挖掘和统计分析咨询

欢迎选修我们的R语言数据分析挖掘必知必会课程!

  

大数据部落 -中国专业的第三方数据服务提供商,提供定制化的一站式数据挖掘和统计分析咨询服务

统计分析和数据挖掘咨询服务:y0.cn/teradat(咨询服务请联系官网客服

QQ:3025393450

 

​QQ交流群:186388004 

【服务场景】  

科研项目; 公司项目外包;线上线下一对一培训;数据爬虫采集;学术研究;报告撰写;市场调查。

【大数据部落】提供定制化的一站式数据挖掘和统计分析咨询

欢迎选修我们的R语言数据分析挖掘必知必会课程!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!