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系统搭建单机MySQL8.0.26版本

    概述 本文主要是写Ubuntu22.04搭建MySQL8.0.26版本 环境信息 IP 系统 规格 10.0.0.10 Ubuntu22.04 2c4g 数据库服务安装步骤 下载前置依赖 # 下载li ...

  2. HarmonyOS NEXT实战:高仿墨迹天气开发手记(附源码)

    老余说3月份的神秘产品是为纯血鸿蒙而生的一款全新形态的手机,别人想象不到的手机产品,这次的保密工作真是非常到位,让人十分期待. 闲言少叙,今天为大家分享新年的第一个实战项目,高仿墨迹天气 这个项目中有 ...

  3. 原生JS表格数据常用总结

    主要是在数据报表这块, 做了好几年发现, 其实用户最终想要看的并不是酷炫的BI大屏, 而是最基础也是最复杂的 中国式报表. 更多就是倾向于从表格中去获取数据信息, 最简单的就是最好的, 于是还是来总结 ...

  4. 双向 和 多重 RNN

    前面已经对 RNN (递归神经网络) 的变体 (主要为解决 梯度消失和梯度爆炸) 接触了两个比较流行的 LSTM 和 GRU, 其核心思想呢, 是通过其所谓 **"gate" ** ...

  5. VUE构建

    VUE 渐进式 JavaScript 框架 易学易用 基于标准 HTML.CSS 和 JavaScript 构建,提供容易上手的 API 和一流的文档. 性能出色 经过编译器优化.完全响应式的渲染系统 ...

  6. AD 权限维持-金票银票攻击

    本文通过 Google 翻译 Domain Persistence – Golden Ticket and Silver Ticket Attacks 这篇文章所产生,本人仅是对机器翻译中部分表达别扭 ...

  7. 洛谷 P6626 [省选联考 2020 B 卷] 消息传递

    洛谷 P6626 [省选联考 2020 B 卷] 消息传递 Problem 原题传送门 给一棵有\(n\)个节点的树.有\(m\)个询问,每次给出一对\(x,k\)表示查询到点\(x\)的距离为\(k ...

  8. golang中写个字符串遍历谁不会?且看我如何提升 50 倍

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 引子 VictoriaMetrics (Github: h ...

  9. Squid代理配置使用

    1.Squid简单说明 Squid Cache(简称为Squid)是HTTP代理服务器软件.Squid用途广泛,可以作为缓存服务器,可以过滤流量帮助网络安全,也可以作为代理服务器链中的一环,向上级代理 ...

  10. Go语言new和make的区别

    一.简单说明 方法 作用 作用对象 返回值 new 分配内存 值类型和用户定义的类型 初始化为零值,返回指针 make 分配内存 内置引用类型(map,slice,channel) 初始化为零值,返回 ...