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. Nacos源码—1.Nacos服务注册发现分析一

    大纲 1.客户端如何发起服务注册 + 发送服务心跳 2.服务端如何处理客户端的服务注册请求 3.注册服务-如何实现高并发支撑上百万服务注册 4.内存注册表-如何处理注册表的高并发读写冲突 1.客户端如 ...

  2. 8.6K star!完全免费+本地运行+无需GPU,这款AI搜索聚合神器绝了!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 FreeAskInternet是一款革命性的开源项目,它完美结合了多引擎搜索和智能语言模型, ...

  3. FastAPI-响应处理和配置

    前篇学习了关于请求参数相关的约束验证, Request 包括 路径参数 , 查询参数, 枚举参数, 文件参数, 类型验证, 多参数嵌套验证, 请求体嵌套验证, Cookie 和 Header 等, 了 ...

  4. Python 深拷贝 vs 浅拷贝

    在一些业务场景中, 有时候我们需要复制一个对象, 但是又不想对原来的对象产生影响, 就想搞个 副本 来为所欲为地操作嘛. 但是呢, 在 Python中呢, 又不能通过 赋值 的方式达到效果, 为啥呢? ...

  5. 鸿蒙NEXT实践(二):公共事件通信实践-智能节电案例

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

  6. PB EB ZB YB

    1B字节=8bit位 1KB=2^10B 1MB=2^20B 1GB=2^30B 1TB=2^40B 1PB=2^50B(五个屁) 1EB=2^60B(六姨) 1ZB=2^70B(七个乌贼) 1YB= ...

  7. 实战:Dify智能体+Java=自动化运营工具!

    我们在运营某个圈子的时候,可能每天都要将这个圈子的"热门新闻"发送到朋友圈或聊天群里,但依靠传统的实现手段非常耗时耗力,我们通常要先收集热门新闻,再组装要新闻内容,再根据内容设计海 ...

  8. Windows平台调试器原理与编写01.调试框架

    调试器原理与编写01.调试框架-C/C++基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net 调试框架 调试器最基本功能: 断点,单步 断点分为三类 软件断点 硬件断点 内存断点 ...

  9. .NET周刊【5月第4期 2025-05-25】

    国内文章 .NET 的全新低延时高吞吐自适应 GC - Satori GC https://www.cnblogs.com/hez2010/p/18889954/the-new-satori-gc-f ...

  10. 解密prompt系列55.Agent Memory的工程实现 - Mem0 & LlamaIndex

    记忆存储是构建智能个性化.越用越懂你的Agent的核心挑战.上期我们探讨了模型方案实现长记忆存储,本期将聚焦工程实现层面. What:记忆内容(手动管理 vs 自动识别) How:记忆处理(压缩/抽取 ...