B站台湾大学郭彦甫|MATLAB 学习笔记|12 线性方程式和线性系统 Linear equations

MATLAB学习笔记(12 线性方程式和线性系统 Linear equations)

1. 线性方程 (Linear Equation)

1.1 提出问题

题目:

对于一个电路网络:

给出电压 V1V2 、电阻 R1...R5,求解电流 i1...i5.

解:

根据基尔霍夫电压电流定律(KCL/KVL),可得到:

[基尔霍夫定律内容](基尔霍夫定律(电学定律)_百度百科 (baidu.com))

V1=R1i1+R4i4R4i4=R2i2+R5i5R5i5=R3i3+V2i1=i2+i4i2=i3+i5

转换为矩阵形式:

[R100R400R20R4R500R30R51101001101]A[i1i2i3i4i5]x=[V10V200]b

得到的矩阵方程中,Ab 已知,x 未知,需要求解 x.

1.2 求解线性方程组

可以使用的方法:

  1. 消元法 (Successive elimination (通过因式分解))

    包括高斯消去法LU分解

  2. 克莱默法则 (Cramer’s method)

1.3 高斯消去法 (Gaussian Elimination)

1.3.1 数学解释:

将增广矩阵进行 行与行之间的化简,尽可能使增广矩阵的左下方数字为 0

example:

给定方程组:

{x+2y+z=22x+6y+z=7x+y+4z=3

求解过程:

      {x+2y+z=22x+6y+z=7x+y+4z=3[121226171143](写成增广矩阵的形式)[121202130131](行与行相减)[12120213005/25/2]

​ 通过最后的矩阵列方程组求出解 x=[x1,x2,x3]

1.3.2 MTALAB 方法:rref()

A = [1 2 1;2 6 1;1 1 4];
b = [2; 7; 3];
R = rref([A b])	%使用 rref 以简化行阶梯形矩阵表示该方程组。

>> Class12

R =

     1     0     0    -3
     0     1     0     2
     0     0     1     1

1.4 LU分解 (LU Factorization)

  • 假设我们要求解: Ax=b, 其中 ARm×m

  • A 分解为2个三角矩阵: A=L1U

  • 则问题转化为:Ax=bL1Uxy=b

  • 策略方法:

  1. 求解 L1y=b 得到 y
  2. 求解 Ux=y

1.4.1 上/下三角矩阵定义

  • 下三角矩阵 L=[10001]Rm×m(对角线为1)

  • 上三角矩阵 U=[000]Rm×m

1.4.2 如何获得 LU ?

​ 使用一系列的左乘:LmL2L1LA=U

1.4.2 LU 分解举例

对于一个矩阵:A=[111235468]

解:

​ 先左乘一个矩阵 L1,其中 L1 是在单元矩阵 E=|100010001| 的基础上补充得到,L1A 相乘使得矩阵 A 中的元素 x21=2x31=4 化简为 0

L1A=[100210401][111235468]=[111013024]

​ 同理,左乘一个矩阵 L2L2(L1A) 使得矩阵 L1A 中的元素 x32=2 化简为 0

L2(L1A)=[100010021][111013024]=[111013002]=U

由此求解出 L=L2L1U.

1.4.3 MATLAB 方法: lu()

  • matlab 中的 lu() 函数在输入一个矩阵 A 之后,可以得到 L, U, P,其语法为 [L,U,P]=lu(A) ,数学关系满足:PA=LU
  • 计算 Ax=b, 由 PA=LU 可得到: P1LUx=b,  令 y=L1Pb, 有 Ux=y

example:

给出:

A=[111235468]b=[273]

A = [1 1 1;2 3 5;4 6 8];
[L, U, P] = lu(A);
  • 方法一:(matlab 中的数学计算方法)

​ 得到 L,P,b 可利用 y=L1Pby,可利用 Ux=yb 关系式求解 x

  • 方法二:(老师的方法)

{L1y=bUx=y

1.4.4 矩阵的逆的快速表示:\

对于方程组:

{x+2y+z=22x+6y+z=7x+y+4z=3

A = [1 2 1;2 6 1;1 1 4];
b = [2; 7; 3];
x = A\b

exercise (P14)(有疑惑)

题目:

 Write a function to solve i1i5 for given V1,V2, and R1R5

V1=R1i1+R4i4R4i4=R2i2+R5i5R5i5=R3i3+V2i1=i2+i4i2=i3+i5

解:

% LU分解
clear
clc
syms R1 R2 R3 R4 R5 i1 i2 i3 i4 i5 V1 V2 V3 V4 V5
%根据方程组列出矩阵方程Ax=b,其中x与电流i有关
A=[R1 0 0 R4 0;...
    0 R2 0 -R4 R5;...
    0 0 -R3 0 R5;...
    -1 1 0 1 0;...
    0 -1 1 0 1];

x=[i1; i2; i3; i4; i5];
b=[V1; V2; V3; V4; V5];
[L,U,P]=lu(A);

% matlab的数学计算方法
x1 = x;
y1 = L\(P*b);
x1 = U\y1;


% 老师的方法
x2 = x;
y2 = L*b;
x2 = U\y2;

(解出来的 x1x2 不一致,比较疑惑)

1.5 克莱默法则(Cramer’s (Inverse) Method)

内容:

  • 问题如下:

[3214]Axy]x=[511]b

  • 假设存在 A1 使得 AA1=A1A=E
  • 则变量 x 为:x=A1b

1.5.1 逆矩阵(Inverse Matrix)

  • 对于矩阵 A,其逆矩阵定义如下:

A1=[abcd]1=1det(A)adj(A)=1det(A)[dbca]

​ 其中 det(A) 表示 A 的行列式:det(A)=|adbc|

  • 性质:A=(A1)1,(kA)1=k1A1

example:(使用克莱姆法则求解方程组)

题目:

{x+2y+z=22x+6y+z=7x+y+4z=3[121261114]x=[273]

解:

x=A1b

A = [1 2 1;2 6 1;1 1 4];
b = [2; 7; 3];
x = inv(A)*b

exercise (P19)

题目:

  • 在三维空间画该平面 {x+y+z=0xy+z=0x+3z=0

解:

clear
clc
clf
x = 0:40;
y = 0:40;
[X1,Y1]=meshgrid(x,y);	%画三维图之前绘制网格,可以参考高阶绘图部分讲义
[X2,Y2]=meshgrid(x,y);
[X3,Y3]=meshgrid(x,y);

Z1 = -X1-Y1;
Z2 = -X2+Y2;
Z3 = -1/3*X3;

hold on
surf(Y1,X1,Z1);
surf(Y2,X2,Z2);
surf(Y3,X3,Z3);
axis square;
hold off

%如果需要改变Y轴的方向和z轴的取值范围,可以在 Figure-查看-属性检查器 中更改

1.6 检查矩阵状况的函数:cond()

如果矩阵 A 出现下图中第二和第三种情况,则 A 的行列式为零(det(A)=0,Singular):

黑色文字不用理,是截图问题

在 MATLAB 中可以使用 cond() 函数观察矩阵的“健康状况”,得到的值越小,矩阵对求逆运算越不敏感。

2. 线性系统 (Linear System)

2.1 提出问题

线性方程式是 Ax=b 的形式,线性系统是 Ab=y 的形式

  • 给出方程组:{22124=x1254=y

  • 矩阵表达形式:

2.2 特征值和特征向量 (Eigenvalues and Eigenvectors)

2.2.1 数学方法:

  • 对于一个系统 ARm×m,如果矩阵相乘 y=Ab 比较复杂,可以找到一个向量 v,使得 Avi=λivi ,并且 λi 为常数(把 vi 称为特征向量,λi 称为特征值)

  • 然后分解 b=αivi,αi

  • 矩阵相乘变为:

Ab=αiAvi=αiλivi

2.2.2 特征值和特征向量的解释

对于矩阵 A 的特征值和特征向量:

{Av1=λ1v1Av2=λ2v2

​ 当输入为 v1 时, 如果 λ1>1, 称系统对输入进行放大;如果输入不是 v1, 可以对输入进行分解, 输入 =(α1v1+α2v2)

example:

  • 给出 Ab=[21215][24] (假如不想计算矩阵乘法,用求特征值的方法)

  • 利用 MATLAB 的 eig() 函数可以得到下面结果:(2.2.3部分有解释)

λ1v1=[0.970.24],λ2v2=2[0.950.32]

  • b 拆解 b=α1v1+α2v2=41.2v1+44.3v2

  • 计算 Ab

Ab=A(α1v1+α2v2)=α1Av1+α2A(α1=v1+α2v1v1+α2λ2v2=(41.2)(1)[0.970.24]+(44.3)(2)[0.950.32]

2.2.3 算特征值和特征向量用 eig() 函数

求特征值和特征向量:

A=[21215]

[v,d] = eig([2 -12;1 -5])

2.3 矩阵指数:expm()

posted @   一抹微瀾  阅读(208)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示