这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释: : V; \. F+ R2 C1 S - ~( L0 Q n: c M/ X6 Y# ~1.矩阵初始化: 9 n3 f9 v4 [1 v, V' L* S# U4 F/ n: r8 `6 h
a1=[2,-2,5;2,3,1;-1,4,1]; ' q6 f, ?. Y; y! ~# n$ U9 F b=[6,13,3]'; , k' [$ E% `" h- d7 u8 ` n=length(b); % 方程组大小为 n$ b+ M, S, i* r- |: Q" f' m# ]
a=zeros(n,n+1); 8 ~7 c/ E8 r( C$ ? e. \ a(:,1:n)=a1; & `) b! N7 |; ?1 Z a(1:n,n+1)=b; % 增广矩阵$ D8 C; D4 s' S3 _, `6 z, M7 |
6 i$ C: B0 a& G1 k
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。3 \" O# d, A) K* r1 g0 A
$ k4 i- E5 S/ T+ T( Q2.高斯消元过程: 9 p3 O" X7 u0 |5 E8 ^ `! X % A& @5 E" M5 m( M for i=1:n-1; F1 U) Y$ W! ?3 U6 {
% 确保主对角线元素不为0 : w6 E1 b9 U2 L+ ]3 L% O if(a(i:n,i)==0)' d7 n3 ~5 X* K$ l* i0 } Z* o5 z
error('方程组没有唯一解'); 0 g& h- `3 b! m0 L end1 j6 b! S5 J" b& _- x4 k
% 选取主对角线元素不为0的行9 g* m; ?- b- `* k9 m! U7 a2 g& u
for p=i:n 8 I% l# R2 |+ [8 L" T0 y if(a(p,i)~=0)5 ~4 E+ K1 k4 s, z- i- p8 l
p; 9 M, `' _& ^" H4 s: | break;- f7 q6 k- Z }8 _1 t: M
end: F. D% T/ C3 w# Q& M
end ( z" s4 r0 U1 ]* E( O
% 如果选取的行不是当前行,则交换两行 7 @, S+ _+ A% x6 r: z+ v if(p~=i) / b; h% ~9 \" |+ j, ~ L) B8 v* J t=a(i,; 3 ]+ X9 J1 E9 |" y; o& p a(i,=a(p,;+ Q' |6 n% O+ q- k$ r
a(p,=t;3 Z, ?& y# E5 R+ Q& g
end 9 ]$ M2 v4 g+ I4 g % 高斯消元 / r! c9 A3 c$ a3 g for j=i+1:n ! y5 c, S# E- m( P a(j,i)=a(j,i)/a(i,i);( w" B5 X# a+ r# d! j5 }
a(j,=a(j,-a(j,i)*a(i,;3 X7 p- V! r* a h2 B* F& X( e
end5 m6 E# V/ c+ r. k* S( {4 M
end, Y. Y4 C3 `+ ]& V9 P5 k
% 检查方程组是否有唯一解 4 O$ B+ H/ v: W" y6 A( f& M S- N if (a(n,n)==0) % s: u5 {8 I0 d7 ? error('方程组没有唯一解');4 n Z7 x0 c" J# K x
end! \! k* ?1 ]: d) \
5 i8 l- `, p& R8 T# T这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。 ! I; W+ P+ C7 M - R, Q6 L4 H! N8 v3.回代过程:4 P: k. D$ s% k3 M( T
, b6 X, a2 D6 U5 n* V( Z
% 回代 1 ^: A& c8 @- s% M x(n)=b(n)/a(n,n);( x% J! h1 t1 H* y l( V
for i=n-1:-1:18 v& v' a* F# N
sum=0; & b& a( b `) X* ?9 o for j=i+1:n % ]3 i h% M0 z5 {% ?2 a. J+ U! @ sum=sum+a(i,j)*x(j);* ~! C( a4 d4 {- k
end + H! d6 \* G6 w' Y9 x$ F x(i)=(b(i)-sum)/a(i,i);: K0 n3 H. O- l7 T" I! ?
end: M9 t+ p! x2 c: |3 ?, c& b$ Q
W) g& _+ P: j3 i! g, L* z
这个部分实现了回代过程,得到方程组的解向量 x。( @) f! J4 M+ t/ d0 ?
' J( u1 U( q, X' l' I+ u4.打印结果:: ^9 Y' B0 D2 l6 Y) j& W& m
# s' Y0 `& u4 m jie=x' 2 [6 y# ?5 a8 q2 Z! O' v- e " e }* F: e+ {9 H最后,打印求解得到的解向量。5 I) E( `: }" ~8 t. y9 Z, V+ \9 e e
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。; Q- s5 m m" o2 D2 i& S g: ~7 L
( A8 ]2 L A+ U+ C