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], :] - 用一非零️数乘任一行;
N[r0, :] *= k, k为非️乘数
实例(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()
**# 用一非️数乘任一行**
[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
Advanced Algebra高等代数 - 多元建模有多个方程(多元线性)组成 - 使用 NumPy 实现 矩阵的初等行变换:的更多相关文章
- Reviewing notes 1.1 of Advanced algebra
♦Linear map Definition Linear map A linear map from vector space V to W over a field F is a function ...
- 《Linear Algebra and Its Applications》-chaper1-向量方程、矩阵方程和线性方程组
向量: 向量的基本运算:向量的运算最基本的一件事情,就是基于它n个分量上进行,即对于两个分量的向量a = <a1,a2>,b = <b1,b2>,有a + b = <a1 ...
- 【数学建模】day05-微分方程建模
很多问题,归结起来是微分方程(组)求解的问题.比如:为什么使用三级火箭发射卫星.阻滞增长人口模型的建立…… MATLAB提供了良好的微分方程求解方案. 一.MATLAB求微分方程的符号解 matlab ...
- 读Linear Algebra -- Gilbert Strang
转眼间我的学士学位修读生涯已经快要到期了,重读线性代数,一是为了重新理解Algebra的的重要概念以祭奠大一刷过的计算题,二是为了将来的学术工作先打下一点点(薄弱的)基础.数学毫无疑问是指导着的科研方 ...
- PYTHON替代MATLAB在线性代数学习中的应用(使用Python辅助MIT 18.06 Linear Algebra学习)
前言 MATLAB一向是理工科学生的必备神器,但随着中美贸易冲突的一再升级,禁售与禁用的阴云也持续笼罩在高等学院的头顶.也许我们都应当考虑更多的途径,来辅助我们的学习和研究工作. 虽然PYTHON和众 ...
- Linear Algebra From Data
Linear Algebra Learning From Data 1.1 Multiplication Ax Using Columns of A 有关于矩阵乘法的理解深入 矩阵乘法理解为左侧有是一 ...
- Python小白的数学建模课-07 选址问题
选址问题是要选择设施位置使目标达到最优,是数模竞赛中的常见题型. 小白不一定要掌握所有的选址问题,但要能判断是哪一类问题,用哪个模型. 进一步学习 PuLP工具包中处理复杂问题的字典格式快捷建模方法. ...
- Python小白的数学建模课-09 微分方程模型
小白往往听到微分方程就觉得害怕,其实数学建模中的微分方程模型不仅没那么复杂,而且很容易写出高水平的数模论文. 本文介绍微分方程模型的建模与求解,通过常微分方程.常微分方程组.高阶常微分方程 3个案例手 ...
- Maple拥有优秀的符号计算和数值计算能力
https://www.maplesoft.com/products/maple/ Maple高级应用和经典实例: https://wenku.baidu.com/view/f246962107221 ...
- hihoCoder 1430 : A Boring Problem(一琐繁题)
hihoCoder #1430 : A Boring Problem(一琐繁题) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - 题目描述 As a ...
随机推荐
- Linux系统的一些基本文件和目录管理命令
pwd:查看当前目录所在位置. ls:查看当前目录下的文件和目录.例如我们查看根目录下的文件和目录: (注:蓝字的是目录,白字的是文件,绿字的是可执行的文件或装有可执行文件的目录,红字是压缩包) 如果 ...
- springBoot简要复习总结
Spring Boot Spring Boot 的特点 1. 独立运行的 Spring 项目 Spring Boot 可以以 jar 包的形式独立运行,Spring Boot 项目只需通过命令&quo ...
- [java与https]第一篇、证书杂谈
一.算法.密钥(对).证书.证书库 令狐冲是个马场老板,这天,他接到店里伙计电话,说有人已经签了租马合同,准备到马场提马,,他二话不说,突突突就去了,到了之后,发现不认识租客. 令狐冲说,你把你租马合 ...
- 鸿蒙NEXT实践(一):华为账号一键登录实现
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- (Pytorch第二天)CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
我在cmd里执行conda active,是没有问题的,但是在powershell里会报标题的错 按照各种提示以及查的资料,都说执行conda init 或者conda init cmd.exe等诸如 ...
- .NET外挂系列:5. harmony 中补丁参数的有趣玩法(下)
一:背景 1. 讲故事 开局一张表,故事全靠编,为了能够承上启下,先把参数列表放出来. 参数名 说明 __instance 访问非静态方法的实例(类似 this). __result 获取/修改返回值 ...
- 简单介绍下 Vue 2.x 中的几种生命周期钩子(Lifecycle Hooks)
〇.前言 在使用 Element UI 框架(基于 Vue 2.x)开发应用时,理解 Vue 的生命周期钩子(Lifecycle Hooks)是非常重要的. 这些钩子函数可以在组件的不同阶段执行特定的 ...
- .NET 10 进展之 CoreCLR Interpreter
我们从前一阵子 Maui 几个被离职的Mono 工具链相关的微软员工来说起,通过现象看本质,这意味着.NET 10 将完成对Mono的完全替代..NET 10 特性中有一个 @dotnet/runti ...
- 【中文】【吴恩达课后编程作业】Course 4 - 卷积神经网络 - 第三周作业
[中文][吴恩达课后编程作业]Course 4 - 卷积神经网络 - 第三周作业 - 车辆识别 上一篇:[课程4 - 第三周测验]※※※※※ [回到目录]※※※※※下一篇:[课程4 - 第四周测验] ...
- JVM 类加载过程与字节码执行深度解析
在 Java 高级程序员面试中,类加载机制与字节码执行原理是 JVM 模块的核心考察点.本文从类加载生命周期.类加载器协作机制.字节码执行引擎及面试高频问题四个维度,结合 JVM 规范与 HotSpo ...