1. 线性:指多元变量的每一元变量都是1次方(可以将高于1次方的元,以新一元变量代换,求解再做开方运算)

  2. 将应用问题转化为 多个多元线性方程,并成一组;

  3. 由多元线性方程组 抽出 增广矩阵,并以“消元法”的策略,步步判断求解;

  • 增广矩阵 的 多个 “方程” 应用“行消元法” 化简 成 阶梯矩阵;判断有无解;是否出现 0 = !0 的行(方程);
  • 阶梯矩阵 的 多个 “方程” 应用“列消元法” 化简 成 简化阶梯矩阵;判断:
    • 有1个解时(非全0行数 = 元总数), 解是将 系数矩阵 化简为 N x N 的单位方阵(对角线上全为1,其余全为0),常数列一一对应主元的解;
    • 有多解时(非全0行数 < 元总数),写出每个 主元 由 所有 自由变量 表达的一般表达式(通解);
  1. 初等行变换(假设增广矩阵为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:

  1. 能配出2000Kg的这种食品。解有无限多不唯一;A1,A2,A3 可作为主元,由A4,A5表示;
  2. 由1. 可将A4,A5作为自由变量表示主元A1,A2,A3 ,也就进一步可表示总成本 TotalCost=F(A1,A2,A3,A4,A5);
  3. 同理可将任何两种原料作为自由变量,表示其他的三个主元,以及总体成本。

    自然就会想到用成本最低的两种原料,表示其他主元以及总成本;会不会是最优解?

    按成本行的列降序排列,那么通过简化阶梯矩阵后,得到的就是用成本最低的两种原料表示;

    需求已有,怎么实现?就需要交换两列;NumPy 作为数值计算基础库非常不错;

    但人机交互,高层统计分析上就需要 Pandas 出场:

    可以设置列名称,行索引,列索引,行列对齐,... ,
  4. 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 实现 矩阵的初等行变换:的更多相关文章

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

  2. 《Linear Algebra and Its Applications》-chaper1-向量方程、矩阵方程和线性方程组

    向量: 向量的基本运算:向量的运算最基本的一件事情,就是基于它n个分量上进行,即对于两个分量的向量a = <a1,a2>,b = <b1,b2>,有a + b = <a1 ...

  3. 【数学建模】day05-微分方程建模

    很多问题,归结起来是微分方程(组)求解的问题.比如:为什么使用三级火箭发射卫星.阻滞增长人口模型的建立…… MATLAB提供了良好的微分方程求解方案. 一.MATLAB求微分方程的符号解 matlab ...

  4. 读Linear Algebra -- Gilbert Strang

    转眼间我的学士学位修读生涯已经快要到期了,重读线性代数,一是为了重新理解Algebra的的重要概念以祭奠大一刷过的计算题,二是为了将来的学术工作先打下一点点(薄弱的)基础.数学毫无疑问是指导着的科研方 ...

  5. PYTHON替代MATLAB在线性代数学习中的应用(使用Python辅助MIT 18.06 Linear Algebra学习)

    前言 MATLAB一向是理工科学生的必备神器,但随着中美贸易冲突的一再升级,禁售与禁用的阴云也持续笼罩在高等学院的头顶.也许我们都应当考虑更多的途径,来辅助我们的学习和研究工作. 虽然PYTHON和众 ...

  6. Linear Algebra From Data

    Linear Algebra Learning From Data 1.1 Multiplication Ax Using Columns of A 有关于矩阵乘法的理解深入 矩阵乘法理解为左侧有是一 ...

  7. Python小白的数学建模课-07 选址问题

    选址问题是要选择设施位置使目标达到最优,是数模竞赛中的常见题型. 小白不一定要掌握所有的选址问题,但要能判断是哪一类问题,用哪个模型. 进一步学习 PuLP工具包中处理复杂问题的字典格式快捷建模方法. ...

  8. Python小白的数学建模课-09 微分方程模型

    小白往往听到微分方程就觉得害怕,其实数学建模中的微分方程模型不仅没那么复杂,而且很容易写出高水平的数模论文. 本文介绍微分方程模型的建模与求解,通过常微分方程.常微分方程组.高阶常微分方程 3个案例手 ...

  9. Maple拥有优秀的符号计算和数值计算能力

    https://www.maplesoft.com/products/maple/ Maple高级应用和经典实例: https://wenku.baidu.com/view/f246962107221 ...

  10. hihoCoder 1430 : A Boring Problem(一琐繁题)

    hihoCoder #1430 : A Boring Problem(一琐繁题) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - 题目描述 As a ...

随机推荐

  1. Linux系统的一些基本文件和目录管理命令

    pwd:查看当前目录所在位置. ls:查看当前目录下的文件和目录.例如我们查看根目录下的文件和目录: (注:蓝字的是目录,白字的是文件,绿字的是可执行的文件或装有可执行文件的目录,红字是压缩包) 如果 ...

  2. springBoot简要复习总结

    Spring Boot Spring Boot 的特点 1. 独立运行的 Spring 项目 Spring Boot 可以以 jar 包的形式独立运行,Spring Boot 项目只需通过命令&quo ...

  3. [java与https]第一篇、证书杂谈

    一.算法.密钥(对).证书.证书库 令狐冲是个马场老板,这天,他接到店里伙计电话,说有人已经签了租马合同,准备到马场提马,,他二话不说,突突突就去了,到了之后,发现不认识租客. 令狐冲说,你把你租马合 ...

  4. 鸿蒙NEXT实践(一):华为账号一键登录实现

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  5. (Pytorch第二天)CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.

    我在cmd里执行conda active,是没有问题的,但是在powershell里会报标题的错 按照各种提示以及查的资料,都说执行conda init 或者conda init cmd.exe等诸如 ...

  6. .NET外挂系列:5. harmony 中补丁参数的有趣玩法(下)

    一:背景 1. 讲故事 开局一张表,故事全靠编,为了能够承上启下,先把参数列表放出来. 参数名 说明 __instance 访问非静态方法的实例(类似 this). __result 获取/修改返回值 ...

  7. 简单介绍下 Vue 2.x 中的几种生命周期钩子(Lifecycle Hooks)

    〇.前言 在使用 Element UI 框架(基于 Vue 2.x)开发应用时,理解 Vue 的生命周期钩子(Lifecycle Hooks)是非常重要的. 这些钩子函数可以在组件的不同阶段执行特定的 ...

  8. .NET 10 进展之 CoreCLR Interpreter

    我们从前一阵子 Maui 几个被离职的Mono 工具链相关的微软员工来说起,通过现象看本质,这意味着.NET 10 将完成对Mono的完全替代..NET 10 特性中有一个 @dotnet/runti ...

  9. 【中文】【吴恩达课后编程作业】Course 4 - 卷积神经网络 - 第三周作业

    [中文][吴恩达课后编程作业]Course 4 - 卷积神经网络 - 第三周作业 - 车辆识别 上一篇:[课程4 - 第三周测验]※※※※※ [回到目录]※※※※※下一篇:[课程4 - 第四周测验] ...

  10. JVM 类加载过程与字节码执行深度解析

    在 Java 高级程序员面试中,类加载机制与字节码执行原理是 JVM 模块的核心考察点.本文从类加载生命周期.类加载器协作机制.字节码执行引擎及面试高频问题四个维度,结合 JVM 规范与 HotSpo ...