用Python的Numpy求解线性方程组

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

由Kaizong Ye,Liao Bao撰写

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

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

×

预备工作:线性方程组类型的判断

对于 [公式] ,(a) [公式] ,则解唯一,称为相容方程组;(b) [公式] ,则解无穷,称为超定方程组;(c) [公式] ,则无解,称为不相容方程组

此外,判断方程组是否有解还可以用以下2个充要条件:(a) 如果[公式] 是左可逆矩阵, [公式] 是它的一个左逆矩阵,若 [公式] 成立,则 [公式] 有唯一解,且解为 [公式] ;(b) 如果[公式] 是右可逆矩阵,则[公式] 对任何 [公式] 都有解,若 [公式] 时,则方程组的解可表示成 [公式] ,其中 [公式] 是 [公式] 的一个右逆矩阵。(单边逆的定义、判别和求法,参见【1】P178-182)


首先讨论相容线性方程组的解法。

一. 三角分解法

思路: [公式] 被三角分解成[公式] 后,将[公式] 转化为[公式] ,算出 [公式] 。因为 [公式] 是上三角矩阵,容易求解出最后一行的 [公式] ;将[公式]代入倒数第二行,容易求解出 [公式] ;将[公式][公式] 代入倒数第三行,容易求解出 [公式],以此类推。

1.1 QR分解

1.1.1 形式一: 满秩方阵

(a) 对 [公式] 进行列分块,得列分块向量 [公式]

(b) 对列分块向量施密特正交化,得到正交向量 [公式] ,其中

[公式]

(c) 令系数[公式]

(d) 最后得到[公式]

1. 拓展:上述过程中[公式],同时还可进行 [公式] [公式] 分解,在步骤(a)中行分块即可。 类似地,[公式]时可进行 [公式] 或 [公式] 分解。区别在于 [公式] 是正交矩阵,而 [公式] 是酉矩阵。下面开始仅讨论复矩阵的情形,相应的实矩阵情形很好类推。

1.1.2 形式二: 行满秩矩阵

[公式] ,其中 [公式] 为 [公式] 阶正线下三角复矩阵, [公式] 为 [公式] 阶酉矩阵,[公式] 为零矩阵。(【1】P92证明)

1.1.3 形式三: 列满秩矩阵

[公式] ,其中 [公式] 为 [公式] 阶酉矩阵,[公式] 为 [公式] 阶正线上三角复矩阵,[公式] 为零矩阵。(【1】P92证明)

1.1.4 形式四: 任意矩阵

[公式],其中[公式] 为 [公式] 阶酉矩阵, [公式] 为 [公式] 阶酉矩阵,[公式] 为 [公式] 阶正线下三角复矩阵,[公式] 为零矩阵。还可以分解为[公式] ,[公式] 为 [公式] 阶正线下三角复矩阵。(【1】P94证明)

1.2 LU分解

1.2.1 形式一: 满秩方阵

[公式] ,[公式] 的各阶顺序主子式行列式不为零, [公式] 的主对角线上元素不为0。(【1】P89-92证明,4个命题等价)

1. 参数含义:[公式] 为上三角复矩阵, [公式] 为下三角复矩阵, [公式] 为单位上三角复矩阵, [公式] 为单位下三角复矩阵, [公式] 为对角矩阵。
2. 拓展:同样地, [公式] 的分解形式类推,相应的所得则为实矩阵。
3. 分解方法:
(1) 待定系数法
(a) 写出含待定系数的分解形式

[公式]
(b) 按照规则“ 先行后列”、“列除行不除”、“旧元素减去其所在行和列前(k-1)个元素的对应乘积然后求和”,对照上式一步步地写出待定系数

[公式]
(2) 高斯消元法
(a) 搭建框架
[公式]
(b) 提取高斯消元(即初等行变换)过程中的乘子和结果。(注意行列的对应,第 [公式] 行对第 [公式] 行做初等行变换的乘子,对应到结果矩阵的 [公式] 元素)

[公式]
4. 注意:
(a) 利用高斯消元法对矩阵 [公式] 进行 [公式] 矩阵分解时,绝对值小的主元可能产生麻烦,因此一般在进行前先判断是否对行进行调整。假设调整后的矩阵是 [公式] ,分解为 [公式] ,那么, [公式] 的分解又该表示为什么形式呢?我们用一个单位矩阵 [公式] 来表征这种变换,如果要交换矩阵 [公式] 中的一些行,那我们就对单位矩阵 [公式] 中相应的行进行交换,得到矩阵 [公式] 。因此有 [公式] 。
(b) 得到 [公式] 后,我们可以很容易地基于此,将 [公式] 拆成 [公式] 的形式从而得到 [公式] ;再将[公式] 合并为 [公式]从而得到[公式] ,过程如下:

[公式]
(c) 对于三对角矩阵,如果它的非零系数在主对角线上和两条次对角线上,那么可以对其进行 [公式] 分解,上述的两种分解方法都可以使用。

1.2.2 形式二: 行满秩矩阵

[公式] ,其中 [公式] 是 [公式] 阶正线下三角矩阵, [公式] ,表示以 [公式] 个两两正交的单位向量为行组成的矩阵的集合。(【1】P93证明,证明过程给出了分解步骤)

1.2.3 形式三: 列满秩矩阵

[公式] ,其中,[公式] 是 [公式] 阶正线上三角矩阵,[公式],表示以 [公式] 个两两正交的单位向量为列组成的矩阵的集合。(【1】P93证明,证明过程给出了分解步骤)

1.3 Cholesky分解

[公式], [公式] 是正定Hermite矩阵,[公式] 是正线上三角复矩阵。类似的, [公式] 则要求 [公式] 为实对称正定矩阵。

1. 拓展:对于 [公式] 同时还是正定Hermite矩阵的情况,它还可以分解为 [公式] ,这里的 [公式] 为单位上三角复矩阵, [公式] 为对角阵。
2. 分解方法(即待定系数法):
[公式]

二. 迭代解法

2.1 迭代思想

从最简单的一元函数零点问题开始考虑,假设 [公式] 具有一个零点 [公式] 使得 [公式] 成立,通过变换我们可以得到等式 [公式] 。通常情况下,我们可以直接把 [公式] 变换为 [公式] 的形式,容易发现,仅当 [公式] 时该形式才成立,这时我们把通过 [公式] 求解[公式]的问题转换成了通过[公式]求解 [公式] 的问题,显然后者更容易求解。为什么呢?我们选择一个适当的初始值 [公式] 代入到等式右边,可以在等式左边得到 [公式] ,如果 [公式] ,我们继续将 [公式] 代入到等式右边,继续可以在等式左边得到 [公式] ,重复进行该操作,我们得到一系列的 [公式] 组成一个数列[公式] 。这就是格式为 [公式] 的迭代计算,如果该数列的极限 [公式] 存在且等于 [公式] ,则称该迭代格式收敛,[公式] 就是我们求解的零点,也叫不动点。这个例子是最简单的“不动点迭代法”,其实我们还可以自己构造出各式各样的迭代格式,然而不一定每种迭代格式都是可行的。那我们又该怎么判断一个迭代格式是否可行呢?

首先判断迭代格式的不动点的存在唯一性,然后再判断其收敛性,下面以“不动点迭代法”为例,可以证明以下定理:

(1-a) (存在唯一性)设 [公式] 且 [公式] 对一切 [公式] 成立,则 [公式] 在 [公式] 上一定有不动点。进一步设 [公式] 且存在常数 [公式] 使 [公式] 对一切 [公式] 成立,则 [公式] 在 [公式] 上的不动点是唯一的(【2】P25-26证明)。

(1-b) (全局收敛性)设 [公式] 且满足(1) [公式] 对一切 [公式] 成立;(2)存在常数 [公式] 使 [公式] 对一切 [公式] 成立,则对任意的 [公式] 产生的序列 [公式] 必收敛到 [公式] 的不动点(【2】P26证明)。

(1-c) (局部收敛性)设 [公式] 为 [公式] 的不动点, [公式] 在 [公式] 连续且 [公式] ,则存在 [公式] 的某邻域对任意 [公式] 属于该邻域,迭代格式 [公式] 产生的序列 [公式] 收敛到不动点 [公式] 。

当然,一个迭代格式就像极限那样,无穷逼近与不动点,因此我们要对其设置终止准则。同样以“不动点迭代法”为例,可以证明以下定理:

(1-d)( 全局收敛性的误差估计)设 [公式] 且满足(1) [公式] 对一切 [公式] 成立;(2)存在常数 [公式] 使 [公式] 对一切 [公式] 成立,则对任意 [公式] 产生的序列满足下面两式: [公式] (【2】P26-27证明)。

“不动点迭代法”是在原式的基础上进行构造的,除此之外,我们还可以采用“牛顿迭代法”,它先在原式的基础上近似后再进行构造的,具体做法为:用 [公式] 的泰勒展开式 [公式] 中的线性函数 [公式] 近似代替函数 [公式] ,则将求解 [公式] 的问题转换为求解[公式] 的问题。由此很容易得到牛顿迭代格式为式[公式] 。(【3】P32-34证明,牛顿迭代法的存在唯一性、收敛性等)

最后,不同迭代格式之间如何进行优劣比较呢?考察各迭代格式的收敛速度即可。收敛速度的定义为:

设 [公式] (即序列 [公式] 收敛于 [公式] ),如果存在 [公式] 使得 [公式] ,则称数列 [公式] 为 [公式] 阶收敛。特别地:当 [公式]时,称为线性收敛; 当 [公式]时,称为超线性收敛; 当 [公式]时,称为平方收敛。序列的收敛阶数越高,则收敛速度越快。

判断一个迭代格式的收敛阶数可用以下定理:

设 [公式] 为方程 [公式] 的根。如果迭代函数 [公式] 满足条件:(1)[公式]在 [公式] 邻近是 [公式] 次连续可微的 [公式] ;(2) [公式] 而 [公式] ,则当初值 [公式] 取得充分靠近 [公式] 时,迭代格式 [公式] 是 [公式] 阶收敛的。

至此,迭代思想的核心大致总结为4个方面:“根的存在唯一性”、“收敛性”、“终止准则”和“收敛速度”。

1. 注意:(1) 需要构造迭代格式时,如果没指明需要构造的形式,往往我们可以首先考虑牛顿迭代法;(2) 牛顿迭代法至少二阶收敛的前提是没有重根,但如果遇到有重根的情况则需要更加仔细地代入公式进去算,因为在计算过程中,能够导致为0的元素可能分子分母消去,比如 [公式] ;(3) 牛顿迭代法擅长处理非线性方程,所以在对于实际问题构造时往往要往非线性方程构造,比如对于同一个问题构造为 [公式] 是无法使用牛顿迭代法的,应该构造为 [公式] 。预备工作:线性方程组类型的判断

对于 [公式] ,(a) [公式] ,则解唯一,称为相容方程组;(b) [公式] ,则解无穷,称为超定方程组;(c) [公式] ,则无解,称为不相容方程组

此外,判断方程组是否有解还可以用以下2个充要条件:(a) 如果[公式] 是左可逆矩阵, [公式] 是它的一个左逆矩阵,若 [公式] 成立,则 [公式] 有唯一解,且解为 [公式] ;(b) 如果[公式] 是右可逆矩阵,则[公式] 对任何 [公式] 都有解,若 [公式] 时,则方程组的解可表示成 [公式] ,其中 [公式] 是 [公式] 的一个右逆矩阵。(单边逆的定义、判别和求法,参见【1】P178-182)


首先讨论相容线性方程组的解法。

一. 三角分解法

思路: [公式] 被三角分解成[公式] 后,将[公式] 转化为[公式] ,算出 [公式] 。因为 [公式] 是上三角矩阵,容易求解出最后一行的 [公式] ;将[公式]代入倒数第二行,容易求解出 [公式] ;将[公式][公式] 代入倒数第三行,容易求解出 [公式],以此类推。

1.1 QR分解

1.1.1 形式一: 满秩方阵

(a) 对 [公式] 进行列分块,得列分块向量 [公式]

(b) 对列分块向量施密特正交化,得到正交向量 [公式] ,其中

[公式]

(c) 令系数[公式]

(d) 最后得到[公式]

1. 拓展:上述过程中[公式],同时还可进行 [公式] [公式] 分解,在步骤(a)中行分块即可。 类似地,[公式]时可进行 [公式] 或 [公式] 分解。区别在于 [公式] 是正交矩阵,而 [公式] 是酉矩阵。下面开始仅讨论复矩阵的情形,相应的实矩阵情形很好类推。

1.1.2 形式二: 行满秩矩阵

[公式] ,其中 [公式] 为 [公式] 阶正线下三角复矩阵, [公式] 为 [公式] 阶酉矩阵,[公式] 为零矩阵。(【1】P92证明)

1.1.3 形式三: 列满秩矩阵

[公式] ,其中 [公式] 为 [公式] 阶酉矩阵,[公式] 为 [公式] 阶正线上三角复矩阵,[公式] 为零矩阵。(【1】P92证明)

1.1.4 形式四: 任意矩阵

[公式],其中[公式] 为 [公式] 阶酉矩阵, [公式] 为 [公式] 阶酉矩阵,[公式] 为 [公式] 阶正线下三角复矩阵,[公式] 为零矩阵。还可以分解为[公式] ,[公式] 为 [公式] 阶正线下三角复矩阵。(【1】P94证明)

1.2 LU分解

1.2.1 形式一: 满秩方阵

[公式] ,[公式] 的各阶顺序主子式行列式不为零, [公式] 的主对角线上元素不为0。(【1】P89-92证明,4个命题等价)

1. 参数含义:[公式] 为上三角复矩阵, [公式] 为下三角复矩阵, [公式] 为单位上三角复矩阵, [公式] 为单位下三角复矩阵, [公式] 为对角矩阵。
2. 拓展:同样地, [公式] 的分解形式类推,相应的所得则为实矩阵。
3. 分解方法:
(1) 待定系数法
(a) 写出含待定系数的分解形式

[公式]
(b) 按照规则“ 先行后列”、“列除行不除”、“旧元素减去其所在行和列前(k-1)个元素的对应乘积然后求和”,对照上式一步步地写出待定系数

[公式]
(2) 高斯消元法
(a) 搭建框架
[公式]
(b) 提取高斯消元(即初等行变换)过程中的乘子和结果。(注意行列的对应,第 [公式] 行对第 [公式] 行做初等行变换的乘子,对应到结果矩阵的 [公式] 元素)

[公式]
4. 注意:
(a) 利用高斯消元法对矩阵 [公式] 进行 [公式] 矩阵分解时,绝对值小的主元可能产生麻烦,因此一般在进行前先判断是否对行进行调整。假设调整后的矩阵是 [公式] ,分解为 [公式] ,那么, [公式] 的分解又该表示为什么形式呢?我们用一个单位矩阵 [公式] 来表征这种变换,如果要交换矩阵 [公式] 中的一些行,那我们就对单位矩阵 [公式] 中相应的行进行交换,得到矩阵 [公式] 。因此有 [公式] 。
(b) 得到 [公式] 后,我们可以很容易地基于此,将 [公式] 拆成 [公式] 的形式从而得到 [公式] ;再将[公式] 合并为 [公式]从而得到[公式] ,过程如下:

[公式]
(c) 对于三对角矩阵,如果它的非零系数在主对角线上和两条次对角线上,那么可以对其进行 [公式] 分解,上述的两种分解方法都可以使用。

1.2.2 形式二: 行满秩矩阵

[公式] ,其中 [公式] 是 [公式] 阶正线下三角矩阵, [公式] ,表示以 [公式] 个两两正交的单位向量为行组成的矩阵的集合。(【1】P93证明,证明过程给出了分解步骤)

1.2.3 形式三: 列满秩矩阵

[公式] ,其中,[公式] 是 [公式] 阶正线上三角矩阵,[公式],表示以 [公式] 个两两正交的单位向量为列组成的矩阵的集合。(【1】P93证明,证明过程给出了分解步骤)

1.3 Cholesky分解

[公式], [公式] 是正定Hermite矩阵,[公式] 是正线上三角复矩阵。类似的, [公式] 则要求 [公式] 为实对称正定矩阵。

1. 拓展:对于 [公式] 同时还是正定Hermite矩阵的情况,它还可以分解为 [公式] ,这里的 [公式] 为单位上三角复矩阵, [公式] 为对角阵。
2. 分解方法(即待定系数法):
[公式]

二. 迭代解法

2.1 迭代思想

从最简单的一元函数零点问题开始考虑,假设 [公式] 具有一个零点 [公式] 使得 [公式] 成立,通过变换我们可以得到等式 [公式] 。通常情况下,我们可以直接把 [公式] 变换为 [公式] 的形式,容易发现,仅当 [公式] 时该形式才成立,这时我们把通过 [公式] 求解[公式]的问题转换成了通过[公式]求解 [公式] 的问题,显然后者更容易求解。为什么呢?我们选择一个适当的初始值 [公式] 代入到等式右边,可以在等式左边得到 [公式] ,如果 [公式] ,我们继续将 [公式] 代入到等式右边,继续可以在等式左边得到 [公式] ,重复进行该操作,我们得到一系列的 [公式] 组成一个数列[公式] 。这就是格式为 [公式] 的迭代计算,如果该数列的极限 [公式] 存在且等于 [公式] ,则称该迭代格式收敛,[公式] 就是我们求解的零点,也叫不动点。这个例子是最简单的“不动点迭代法”,其实我们还可以自己构造出各式各样的迭代格式,然而不一定每种迭代格式都是可行的。那我们又该怎么判断一个迭代格式是否可行呢?

首先判断迭代格式的不动点的存在唯一性,然后再判断其收敛性,下面以“不动点迭代法”为例,可以证明以下定理:

(1-a) (存在唯一性)设 [公式] 且 [公式] 对一切 [公式] 成立,则 [公式] 在 [公式] 上一定有不动点。进一步设 [公式] 且存在常数 [公式] 使 [公式] 对一切 [公式] 成立,则 [公式] 在 [公式] 上的不动点是唯一的(【2】P25-26证明)。

(1-b) (全局收敛性)设 [公式] 且满足(1) [公式] 对一切 [公式] 成立;(2)存在常数 [公式] 使 [公式] 对一切 [公式] 成立,则对任意的 [公式] 产生的序列 [公式] 必收敛到 [公式] 的不动点(【2】P26证明)。

(1-c) (局部收敛性)设 [公式] 为 [公式] 的不动点, [公式] 在 [公式] 连续且 [公式] ,则存在 [公式] 的某邻域对任意 [公式] 属于该邻域,迭代格式 [公式] 产生的序列 [公式] 收敛到不动点 [公式] 。

当然,一个迭代格式就像极限那样,无穷逼近与不动点,因此我们要对其设置终止准则。同样以“不动点迭代法”为例,可以证明以下定理:

(1-d)( 全局收敛性的误差估计)设 [公式] 且满足(1) [公式] 对一切 [公式] 成立;(2)存在常数 [公式] 使 [公式] 对一切 [公式] 成立,则对任意 [公式] 产生的序列满足下面两式: [公式] (【2】P26-27证明)。

“不动点迭代法”是在原式的基础上进行构造的,除此之外,我们还可以采用“牛顿迭代法”,它先在原式的基础上近似后再进行构造的,具体做法为:用 [公式] 的泰勒展开式 [公式] 中的线性函数 [公式] 近似代替函数 [公式] ,则将求解 [公式] 的问题转换为求解[公式] 的问题。由此很容易得到牛顿迭代格式为式[公式] 。(【3】P32-34证明,牛顿迭代法的存在唯一性、收敛性等)

最后,不同迭代格式之间如何进行优劣比较呢?考察各迭代格式的收敛速度即可。收敛速度的定义为:

设 [公式] (即序列 [公式] 收敛于 [公式] ),如果存在 [公式] 使得 [公式] ,则称数列 [公式] 为 [公式] 阶收敛。特别地:当 [公式]时,称为线性收敛; 当 [公式]时,称为超线性收敛; 当 [公式]时,称为平方收敛。序列的收敛阶数越高,则收敛速度越快。

判断一个迭代格式的收敛阶数可用以下定理:

设 [公式] 为方程 [公式] 的根。如果迭代函数 [公式] 满足条件:(1)[公式]在 [公式] 邻近是 [公式] 次连续可微的 [公式] ;(2) [公式] 而 [公式] ,则当初值 [公式] 取得充分靠近 [公式] 时,迭代格式 [公式] 是 [公式] 阶收敛的。

至此,迭代思想的核心大致总结为4个方面:“根的存在唯一性”、“收敛性”、“终止准则”和“收敛速度”。

1. 注意:(1) 需要构造迭代格式时,如果没指明需要构造的形式,往往我们可以首先考虑牛顿迭代法;(2) 牛顿迭代法至少二阶收敛的前提是没有重根,但如果遇到有重根的情况则需要更加仔细地代入公式进去算,因为在计算过程中,能够导致为0的元素可能分子分母消去,比如 [公式] ;(3) 牛顿迭代法擅长处理非线性方程,所以在对于实际问题构造时往往要往非线性方程构造,比如对于同一个问题构造为 [公式] 是无法使用牛顿迭代法的,应该构造为 [公式] 。


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

等式1:

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

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


课程

R语言数据分析挖掘必知必会

从数据获取和清理开始,有目的的进行探索性分析与可视化。让数据从生涩的资料,摇身成为有温度的故事。

立即参加

在矩阵解中,要求解的线性方程组以矩阵形式表示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.]

验证一下,如果在方程式中插入x4替换未知数,您将看到结果为20。

现在,让我们解决由三个线性方程组成的系统,如下所示:

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.]

未知数xy和的值分别是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()方法是首选方法。


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds