高等代数/线性代数-矩阵法求解齐次方程组

  • 摘要
  • 背景
  • 基本方法
  • 矩阵方法
  • python代码实现
    • $\color{red}前方高能!这三个函数是这篇文章的核心!$
    • 高能结束,接下来就是一步一步运行了
      • 注意:归一化函数normolization的输出有多个,所以可以使用列表多重输出。

摘要

大家都知道,矩阵法求解方程组时需要对矩阵做行变换或者列变换(就是化成对角是1,下三角全是0的样子),这一步其实是比较头疼的。可能是我学识尚浅,没有找到python、R和Matlab对于这个小步骤的编程方法或者包(调包侠是我没错了(doge))。因此写下这一篇博客记录一下。

背景

在小学四年级左右,我们就已经开始学习如何解方程。先是学一元一次方程,再是二元一次,后面多元一次。再后来,初中就学习一元二次方程,接触一元多次方程。今天给大家聊聊多元一次方程的解法。此外,我们还接触了齐次方程和非齐次方程。直到上大学,学习了高等代数,知道有矩阵、行列式这种好东西之后,才对方程组有了更加深入的了解。

今天跟大家分享一段基于python实现矩阵法求解齐次方程组的代码。

基本方法

假设现在要解一个方程组:
{x1−x2+x3=0x2+x3−x4=04x1+x2−x3−x4=0x1−2x2+x4=0(1)\begin{cases} x_1-x_2+x_3=0\\ x_2+x_3-x_4=0\\ 4x_1+x_2-x_3-x_4=0\\ x_1-2x_2+x_4=0\\ \end{cases} \tag{1} ⎩⎪⎪⎪⎨⎪⎪⎪⎧​x1​−x2​+x3​=0x2​+x3​−x4​=04x1​+x2​−x3​−x4​=0x1​−2x2​+x4​=0​(1)
我们一般会想到未知量相互转换代入的方法来算,这样的计算思想和方法比较简单,但是未知量数量越多,计算量会越大。我算了一下,答案是:
{x1=15ax2=13ax3=12ax4=a(2)\begin{cases} x_1=\frac{1}5a\\ x_2=\frac{1}3a\\ x_3=\frac{1}2a\\ x_4=a \end{cases} \tag{2} ⎩⎪⎪⎪⎨⎪⎪⎪⎧​x1​=51​ax2​=31​ax3​=21​ax4​=a​(2)
此时再取 x4=a=1x_4=a=1x4​=a=1 ,就能求出:
{x1=0.2x2=0.6x3=0.4x4=1(3)\begin{cases} x_1=0.2\\ x_2=0.6\\ x_3=0.4\\ x_4=1 \end{cases} \tag{3} ⎩⎪⎪⎪⎨⎪⎪⎪⎧​x1​=0.2x2​=0.6x3​=0.4x4​=1​(3)
由此可见,解法还是比较简单的,接下来试试高级解法。

矩阵方法

学过高代或者线代的小伙伴就知道,可以将(1)中的方程组转换如下形式:
[1−110011−141−1−11−201]×[x1x2x3x4]=[0000]\left[ \begin{array}{lcr} 1&-1&1&0\\ 0&1&1&-1\\ 4&1&-1&-1\\ 1&-2&0&1 \end{array} \right] \times\left[ \begin{array}{lcr} x_1 \\ x_2 \\ x_3 \\ x_4 \end{array}\right] =\left[ \begin{array}{lcr} 0 \\ 0 \\ 0 \\ 0 \end{array}\right] ⎣⎢⎢⎡​1041​−111−2​11−10​0−1−11​⎦⎥⎥⎤​×⎣⎢⎢⎡​x1​x2​x3​x4​​⎦⎥⎥⎤​=⎣⎢⎢⎡​0000​⎦⎥⎥⎤​
简化下,就得到:
AX⃗=0⃗A \vec X = \vec 0 AX=0
这时候就需要对矩阵AAA进行行变换或者列变换(两种变换方法只能选一种),变换成对角是1,下三角全是0的样子:
注意:∗\color{red}*∗ 这个位置其实是0,因为等于别的数字其实没有实际意义。
A=[100a1010a2001a3000∗]A=\left[ \begin{array}{lcr} 1&0&0&a_1 \\ 0&1&0&a_2 \\ 0&0&1&a_3 \\ 0&0&0&\color{red}* \end{array}\right] A=⎣⎢⎢⎡​1000​0100​0010​a1​a2​a3​∗​⎦⎥⎥⎤​

python代码实现

对于这种操作,我使用的编译器是Jupyter Notebook。代码可分段还有单独弹窗功能真的对这类编程问题很友好!安装很简单,这里不多说。

开始吟唱:

# 加这段代码是为了能多次输出,不用一直print(),减少麻烦
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
# 调库,基本操守
import numpy as np
A = np.mat([[1, -1, 1, 0], [0, 1, 1, -1], [4, 1, -1, -1], [1, -2, 0, 1]])
print('原矩阵为A = \n{0}'.format(A))
# 获取行列
row, col = A.shape[0], A.shape[1]
# 输出
原矩阵为A =
[[ 1 -1  1  0][ 0  1  1 -1][ 4  1 -1 -1][ 1 -2  0  1]]

前方高能!这三个函数是这篇文章的核心!\color{red}前方高能!这三个函数是这篇文章的核心!前方高能!这三个函数是这篇文章的核心!

# normalization(li, first_non_0, A):将矩阵归一化
def normalization(li, first_non_0, A):# 初始化一个列表来存储每一行不为零的位置li = []# 初始化一个数组来存储每行中不为零的第一个数first_non_0 = np.zeros((row, 1))for i in range(row):position = np.nonzero(A[i, ])[1]li.append(position)print('\n li: 每一行不为 0 的位置\n{0}'.format(li))inp = int(input('若出现空值,请输入0;若还没有出现空值,请输入任意数字'))if inp == 0:for i in range(row-1):first_non_0[i] = A[i, li[i][0]]first_non_0[row-1] = 1print('\n first_non_0: 每一行不为 0 的第一个数\n{0}'.format(first_non_0))else:for i in range(row):first_non_0[i] = A[i, li[i][0]]print('\n first_non_0: 每一行不为 0 的第一个数\n{0}'.format(first_non_0))# 归一化A = A / first_non_0return li, first_non_0, A# diagonalization_left(A, k):将左下角对角成 0
# k: 就是目前第几列需要减去第一列。例如,目前是第一列,所以需要给k赋值 0def diagonalization_left(A, k):for l in range(k+1, col):if A[l, k] == 1:A[l, ] = A[l, ] - A[k, ]return A# 前两个函数及其步骤已经将对左下区域变成了 0
# 现在需要对右上的小三角形变成 0def diagonalization_right(A):for j in range(1, col-1):rate = []for i in range(j):rate.append(A[i, j]/A[j, j])if A[i, j] != 0:A[i, ] = A[i, ] - rate[i]*A[j, ]return A

高能结束,接下来就是一步一步运行了

注意:归一化函数normolization的输出有多个,所以可以使用列表多重输出。

接下来就直接放图片吧,很容易懂的。
(顺带多嘴一句,有没有朋友知道可以实现长截图的软件?除了QQ,求告知求告知)\color{red}(顺带多嘴一句,有没有朋友知道可以实现长截图的软件?除了QQ,求告知求告知)(顺带多嘴一句,有没有朋友知道可以实现长截图的软件?除了QQ,求告知求告知)
(顺带多嘴一句,有没有朋友知道可以实现长截图的软件?除了QQ,求告知求告知)\color{red}(顺带多嘴一句,有没有朋友知道可以实现长截图的软件?除了QQ,求告知求告知)(顺带多嘴一句,有没有朋友知道可以实现长截图的软件?除了QQ,求告知求告知)
(顺带多嘴一句,有没有朋友知道可以实现长截图的软件?除了QQ,求告知求告知)\color{red}(顺带多嘴一句,有没有朋友知道可以实现长截图的软件?除了QQ,求告知求告知)(顺带多嘴一句,有没有朋友知道可以实现长截图的软件?除了QQ,求告知求告知)
咳咳…,继续吟唱:

完成!

最后捞一把哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈(卑微)

顺带多嘴一句,有没有朋友知道可以实现长截图的软件?除了QQ,求告知求告知\color{red}顺带多嘴一句,有没有朋友知道可以实现长截图的软件?除了QQ,求告知求告知顺带多嘴一句,有没有朋友知道可以实现长截图的软件?除了QQ,求告知求告知

(很容易懂,你把代码复制粘贴即可解决问题)高等代数/线性代数-基于python实现矩阵法求解齐次方程组相关推荐

  1. 麻雀搜索算法SSA(有matlab代码,复制粘贴即可)

    上代码,少废话.本人亲测,无误.现在我贴出来. clear all; close all; clc;%% 参数设置 N=30; %麻雀个数 dim=2; %评估函数维度 N_discoverer=0. ...

  2. 前端表白纪念日用js+html+css实现的页面代码复制粘贴就能用

    前端表白纪念日用js+html+css实现的页面代码复制粘贴就能用页面如下: 代码: <!DOCTYPE html> <html><head><script ...

  3. 亲测全套支付可用(微信支付宝)复制粘贴即可跑

    亲测全套支付可用(微信支付宝包括退款)复制粘贴即可跑 /*** @Auther: tjr* @Date: 2020/9/30 15:11* @Description: 支付宝后台接口*/ @Slf4j ...

  4. 百度知道的代码复制粘贴到VB没有换行怎么办

    在如下所示的网页中,复制 粘贴到word文档,换行还是有的 再复制到VB6.0中还是可用的 转载于:https://www.cnblogs.com/acetaohai123/p/6605519.htm ...

  5. python不能复制粘贴_你知道怎么使用python实现复制粘贴的功能吗?

    楔子 pandas里面有这么一个方法:pd.read_clipboard,可以根据你复制的内容生成DataFrame.是的,就是我们平时选中,然后复制.或者Ctrl+C时拷贝的内容,所以比较神奇,那么 ...

  6. 简单粗暴复制粘贴即可的2种赚钱方式

    很多赚钱的方式就在眼前,没有人注意而已,真正懂得人少之又少,真正操作的大佬都在闷声发财. 这两种玩法,都是通过复制粘贴就可以完成的赚钱项目,每个月赚钱都非常稳定,至今还没有人拿出来详细分享其中项目操作 ...

  7. 想学AI开发很简单:只要你会复制粘贴

    摘要:本次实践基于 mobilenetV2 实现猫狗图像分类,贯穿了数据集获取及处理.预训练模型微调及迁移.端侧部署及推理等环节和知识点,体会到了 MindSpore 简单的开发体验和全场景快速部署的 ...

  8. 微信小程序 - 手持弹幕 | 全屏炫酷滚屏神器源代码模板,超详细代码和注释复制粘贴即可使用(全屏文字滚动,支持调节滚动速度、字体大小、字体颜色)文字内容横屏滚动,手机变身 LED 屏

    前言 网上大部分代码都很乱,而且都有 BUG,本文提供注释详细且干净整洁的源代码. 您可以直接复制源代码,几分钟轻松移植到您的项目中, 您可以 根据自己的需求进行样式.逻辑的变更,代码注释非常详细, ...

  9. html音乐播放器 利用css和js知识来创建一个音乐播放器(虽然简陋,但是逻辑很容易懂,适合初学者)

    作为初学者,制作一个网页播放器来提高我们编写代码水平很有用 这是css部分,很简单,随便信息样式就行 .musicDiv{width: 250px;height: 70px;background-co ...

  10. 用js限制网页只在微信浏览器中打开,复制粘贴即可使用

    经常需要做一些表单验证和投票,为了防止恶意刷票,使页面不能在微信以外的浏览器中打开 这是js的代码: <script type="text/javascript">fu ...

最新文章

  1. 【目标检测】(8) ASPP改进加强特征提取模块,附Tensorflow完整代码
  2. linux putty xshell vi 小键盘无法使用的解决方法
  3. 对数线性模型之一(逻辑回归), 广义线性模型学习总结
  4. 2021-03-20 数据挖掘算法—SVM算法 python
  5. 团队阅读——怎样学习软件工程
  6. C语言经典算法100例-002-数轴的使用
  7. c语言程序优化设计,C程序设计语言的教学策略优化设计
  8. php中的break语句格式,PHP中break语句的应用
  9. Oracle 11g系统自动收集统计信息的一些知识
  10. CSS word-wrap强制换行截断长字符串
  11. 【渝粤题库】陕西师范大学800005 人文地理学
  12. 南昌二中高考2021成绩查询,南昌二中2019高考成绩喜报、一本二本上线人数情况...
  13. 作用域和作用域链 精解
  14. LeetCode部分刷题笔记!!!JavaScript!!!
  15. 为什么移动端跨平台开发不靠谱?
  16. k8s 安装 elasticsearch(ECK)
  17. 华为nova2s用哪个型号服务器,华为Nova2s和Nova2买哪个好/区别大吗?华为Nova2s与Nova2的区别对比详解...
  18. 钉钉调用新版待办任务
  19. 十种免费网站访问分析工具
  20. CVPR2022-图像恢复重建Restormer论文解读

热门文章

  1. 桌面上计算机图标怎么改成中文,电脑默认输入法是英文的怎么改成中文啊
  2. mmpi明尼苏达多项人格测验量表解读
  3. caj转word是怎么进行转换的
  4. 程序猿生存指南-57 故友来京
  5. 你需要权限来执行此操作 你需要来自Administrators的权限才能对此文件夹进行更改
  6. NLP中的全局注意力机制(Global Attention)
  7. 2021年山东省安全员C证试题及解析及山东省安全员C证模拟考试
  8. windows电脑提醒功能,定时打卡
  9. 【笑话】程序员和青蛙公主
  10. macmini做文件服务器,macmini改造云服务器