Advanced Algebra高等代数 - 多元建模有多个方程(多元线性)组成 - 使用 NumPy 实现 矩阵的初等行变换:
-
线性:指多元变量的每一元变量都是1次方(可以将高于1次方的元,以新一元变量代换,求解再做开方运算)
-
将应用问题转化为 多个多元线性方程,并成一组;
-
由多元线性方程组 抽出 增广矩阵,并以“消元法”的策略,步步判断求解;
- 对 增广矩阵 的 多个 “方程” 应用“行消元法” 化简 成 阶梯矩阵;判断有无解;是否出现 0 = !0 的行(方程);
- 由 阶梯矩阵 的 多个 “方程” 应用“列消元法” 化简 成 简化阶梯矩阵;判断:
- 有1个解时(非全0行数 = 元总数), 解是将 系数矩阵 化简为 N x N 的单位方阵(对角线上全为1,其余全为0),常数列一一对应主元的解;
- 有多解时(非全0行数 < 元总数),写出每个 主元 由 所有 自由变量 表达的一般表达式(通解);
- 初等行变换(假设
增广矩阵为N = np.array( [ [...], [...], ...]
):
- 把一行的倍数加到另一行上;
N[r0, :] += k * N[r1, :], k为倍数
- 交换任何两行的位置;
N[[r0, r1], :] = N[[r1, r0], :]
- 用一非零0⃣️数乘任一行;
N[r0, :] *= k, k为非0⃣️乘数
实例(Pg.17: 应用与实验课题:配制食品模型):
[ins] In [1]: s = np.array(
...: [
...: [8, 6, 3, 2, 4, 100],
...: [5, 25, 10, 15, 5, 240],
...: [15, 5, 20, 10, 10, 300],
...: [4.4, 2, 2.4, 2.8, 3.2, 11111111111],
...: ]
...: )
[ins] In [2]: s
Out[2]:
array([[8.000000, 6.000000, 3.000000, 2.000000, 4.000000, 100.000000],
[5.000000, 25.000000, 10.000000, 15.000000, 5.000000, 240.000000],
[15.000000, 5.000000, 20.000000, 10.000000, 10.000000, 300.000000],
[4.400000, 2.000000, 2.400000, 2.800000, 3.200000, 11111111111.000000]])
[ins] In [3]: s[:2,]
Out[3]:
array([[8.000000, 6.000000, 3.000000, 2.000000, 4.000000, 100.000000],
[5.000000, 25.000000, 10.000000, 15.000000, 5.000000, 240.000000]])
**# 拷贝一份矩阵,便于对比;**
[ins] In [4]: v = s.copy()
**# 用一非0⃣️数乘任一行**
[ins] In [5]: v[0,] /= 2
[ins] In [6]: v[1,] /= 5
[ins] In [7]: v[2,] /= 5
[ins] In [8]: v
Out[8]:
array([[4.000000, 3.000000, 1.500000, 1.000000, 2.000000, 50.000000],
[1.000000, 5.000000, 2.000000, 3.000000, 1.000000, 48.000000],
[3.000000, 1.000000, 4.000000, 2.000000, 2.000000, 60.000000],
[4.400000, 2.000000, 2.400000, 2.800000, 3.200000, 11111111111.000000]])
**# NumPy Array交换两行**
[ins] In [9]: v[[0, 1], :] = v[[1,0], :]
[ins] In [10]: v
Out[10]:
array([[1.000000, 5.000000, 2.000000, 3.000000, 1.000000, 48.000000],
[4.000000, 3.000000, 1.500000, 1.000000, 2.000000, 50.000000],
[3.000000, 1.000000, 4.000000, 2.000000, 2.000000, 60.000000],
[4.400000, 2.000000, 2.400000, 2.800000, 3.200000, 11111111111.000000]])
**# 将一行的倍数加到另一行上**
[ins] In [11]: v[1, :] -= 4 * v[0, :]
[ins] In [12]: v[2, :] -= 3 * v[0, :]
[ins] In [13]: v
Out[13]:
array([[1.000000, 5.000000, 2.000000, 3.000000, 1.000000, 48.000000],
[0.000000, -17.000000, -6.500000, -11.000000, -2.000000, -142.000000],
[0.000000, -14.000000, -2.000000, -7.000000, -1.000000, -84.000000],
[4.400000, 2.000000, 2.400000, 2.800000, 3.200000, 11111111111.000000]])
**# 将一行的倍数加到另一行上**
[ins] In [11]: v[1, :] -= 4 * v[0, :]
[ins] In [12]: v[2, :] -= 3 * v[0, :]
[ins] In [13]: v
Out[13]:
array([[1.000000, 5.000000, 2.000000, 3.000000, 1.000000, 48.000000],
[0.000000, -17.000000, -6.500000, -11.000000, -2.000000, -142.000000],
[0.000000, -14.000000, -2.000000, -7.000000, -1.000000, -84.000000],
[4.400000, 2.000000, 2.400000, 2.800000, 3.200000, 11111111111.000000]])
[ins] In [14]: v[1, :] *= -14
[ins] In [15]: v[2, :] *= -17
[ins] In [16]: v[2, :] -= v[1, :]
[ins] In [17]: v[1, :] /= 238
[ins] In [18]: v[2, :] /= -57
[ins] In [19]: v
Out[19]:
array([[1.000000, 5.000000, 2.000000, 3.000000, 1.000000, 48.000000],
[-0.000000, 1.000000, 0.382353, 0.647059, 0.117647, 8.352941],
[-0.000000, -0.000000, 1.000000, 0.614035, 0.192982, 9.824561],
[4.400000, 2.000000, 2.400000, 2.800000, 3.200000, 11111111111.000000]])
SO:
- 能配出2000Kg的这种食品。解有无限多不唯一;A1,A2,A3 可作为主元,由A4,A5表示;
- 由1. 可将A4,A5作为自由变量表示主元A1,A2,A3 ,也就进一步可表示总成本 TotalCost=F(A1,A2,A3,A4,A5);
- 同理可将任何两种原料作为自由变量,表示其他的三个主元,以及总体成本。
自然就会想到用成本最低的两种原料,表示其他主元以及总成本;会不会是最优解?
按成本行的列降序排列,那么通过简化阶梯矩阵后,得到的就是用成本最低的两种原料表示;
需求已有,怎么实现?就需要交换两列;NumPy 作为数值计算基础库非常不错;
但人机交互,高层统计分析上就需要 Pandas 出场:
可以设置列名称,行索引,列索引,行列对齐,... , - Pandas 重算一遍:
[ins] In [20]: d=pd.DataFrame(v)
[ins] In [21]: d.columns = ["A1", "A2", "A3", "A4", "A5", "Target"]
[ins] In [22]: d.sort_values(by=[3], axis="columns", ascending=False)
Out[22]:
Target A1 A5 A4 A3 A2
0 4.800000e+01 1.0 1.000000 3.000000 2.000000 5.0
1 8.352941e+00 -0.0 0.117647 0.647059 0.382353 1.0
2 9.824561e+00 -0.0 0.192982 0.614035 1.000000 -0.0
3 1.111111e+10 4.4 3.200000 2.800000 2.400000 2.0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异