第2课 矩阵消元

本篇博客介绍了线性代数中的矩阵消元法,详细阐述了如何通过消元法求解线性方程组,并讨论了增广矩阵、置换矩阵和逆矩阵的概念。此外,还探讨了矩阵乘法的性质,如结合律和交换律。
部署运行你感兴趣的模型镜像

第2课 矩阵消元

Elimination 消元法。

x+2y+z=23x+8y+z=124y+z=2

A=130284111

消元法从第一行的第一个元素开始,称之为第一个主元(Pivot)。

Row2 = Row2- Row1*3。消元后(2,1)这个位置变为了0

A100224121

然后检查(3,1)已经是0了。

然后以(2,2)为主元,消除(3,2)位置
Row3 = Row3 - 2*Row2

U=100220125

有几个约定:

1、Pivot不能是0

2、当Pivot为0时,可以通过交换行来替换主元。

如果我们把主元位置的数稍作调整,这个方程就无解了。
比如 (2,2) = 6 (3,3)=-4
这时主元将会是0。

增广矩阵 Augment Matrix

A的增广矩阵就是把b也加上去

1302841112122

U的增广矩阵同样经过 Row2 = Row2- Row1*3
和 Row3 = Row3 - 2*Row2
1002201252610

将消元后的增广矩阵回代

x+2y+z=22y2z=65z=10

可得解

x=2y=1z=2

Matrices

在上一节中我们把矩阵和一个列向量的乘法,看成是列向量中每一个元素对矩阵中每一列的线性组合。

..................345=3column14column25column3

而对于行向量乘以矩阵

[127]..................=[1row12row27row3]

那么问题来了,我们需要一个什么样的矩阵能使A->A`呢?
答案是下面这个矩阵

130010001130284111=100224121

我们将新引入的矩阵称为E21,因为他是为了消去(2,1)这个元素引入的

紧接着我们再来将第3列的(3,2)也消去。同样这次引入的矩阵称为E32

100012001100224121=100220125

那么上述两个步骤可以用数学语言简单的描述为

E32(E21A)=U

矩阵乘法的一些性质

结合律(Associative law)

E32(E21A)=(E32E21)A
交换律

矩阵相乘并不符合

ABBA

Permutation 置换矩阵

Exchange rows 1 and 2(交换第一行和第2行)

[0110][acbd]=[cadb]

Exchange rows 1 and 2(交换第一行和第2行)

[acbd][0110]=[bdac]

Invese 逆矩阵

想像一下[100 310 001]这个矩阵,经过什么变换可以变成100010001呢?

第1行和第3行不变。第2行加上Row1*3就可以了啊。相当于乘以130010001

130010001130010001=100010001

我们称

130010001E1(逆矩阵)。

[100 310 001]为E(初等矩阵)。

[100 010 001]为I(单位矩阵)。

您可能感兴趣的与本文相关的镜像

Langchain-Chatchat

Langchain-Chatchat

AI应用
Langchain

Langchain-Chatchat 是一个基于 ChatGLM 等大语言模型和 Langchain 应用框架实现的开源项目,旨在构建一个可以离线部署的本地知识库问答系统。它通过检索增强生成 (RAG) 的方法,让用户能够以自然语言与本地文件、数据库或搜索引擎进行交互,并支持多种大模型和向量数据库的集成,以及提供 WebUI 和 API 服务

### C语言实现增广矩阵形成上三角矩阵 在C语言中,可以通过高斯消元法增广矩阵转换为上三角矩阵。以下是一个完整的代码示例,展示如何通过用户输入的增广矩阵进行操作,最终得到上三角矩阵[^3]。 ```c #include <stdio.h> #define N 3 // 假设是3个未知数的方程组 double A[N][N + 1]; // 增广矩阵 // 输入增广矩阵 void inputMatrix() { for (int i = 0; i < N; ++i) { for (int j = 0; j <= N; ++j) { printf("请输入第%d行第%d列的素:", i + 1, j + 1); scanf("%lf", &A[i][j]); } } } // 高斯形成上三角矩阵 void gaussEliminationToUppperTriangular() { for (int k = 0; k < N - 1; ++k) { // 外层循环选择主行 if (A[k][k] == 0) { printf("主为零,无法继续计算。\n"); return; } for (int i = k + 1; i < N; ++i) { // 内层循环去下三角部分 double factor = A[i][k] / A[k][k]; for (int j = k; j <= N; ++j) { A[i][j] -= factor * A[k][j]; } } } } // 打印矩阵 void printMatrix() { for (int i = 0; i < N; ++i) { for (int j = 0; j <= N; ++j) { printf("%.2lf ", A[i][j]); } printf("\n"); } } int main() { printf("请输入增广矩阵的值:\n"); inputMatrix(); // 输入增广矩阵 gaussEliminationToUppperTriangular(); // 高斯形成上三角矩阵 printf("\n形成的上三角矩阵为:\n"); printMatrix(); // 打印结果矩阵 return 0; } ``` 上述代码实现了从用户输入增广矩阵开始,到通过高斯消元法矩阵转换为上三角矩阵的过程[^3]。代码中的`gaussEliminationToUppperTriangular`函数负责执行操作,确保每次迭代后,当前列下方的所有素都被去。 ### 注意事项 - 如果主(即对角线上的素)为零,则需要进行行交换以避免除以零的操作[^4]。 - 矩阵的大小可以通过修改`#define N`的值来调整,但需注意内存限制。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值