数学建模社区-数学中国
标题:
高斯消元法解线性方程组
[打印本页]
作者:
2744557306
时间:
2023-12-31 17:28
标题:
高斯消元法解线性方程组
这段代码是用于解线性方程组的高斯消元法(Gaussian elimination)。以下是代码的主要步骤:
( ^& t q' R- Z6 u
8 p$ t0 K" v. r/ v1 U) D/ u
1.初始化: 定义系数矩阵 a 和常数向量 b,以及一个排列矩阵 L,用于记录行的交换顺序。
1 o# Z" ?* T% N1 d1 E5 X
# o8 H% q \' y
a=[1,-1,2,-1;2,-2,3,-3;1,1,1,0;1,-1,4,3]; % 系数矩阵 a
! d+ u* w$ r! \# f5 F6 H
b=[-8,-20,-2,4]'; % 常数向量 b
! o8 m! \+ L; X% J9 i
L=[1,2,3,4]; % 排列矩阵 L
% o$ |( g ]8 n2 T) w, v2 ~
n=length(b);
+ o N/ R v3 g% I
+ C9 X. v$ ~. K" A# M" Z3 Q, k
$ l/ X+ U+ V/ w. y
2.高斯消元: 通过一系列行变换将系数矩阵转化为上三角矩阵,并相应地更新常数向量。这里使用了列主元素法,即每次选取绝对值最大的元素所在的行与当前行进行交换。
; `. b, ^% q$ V1 q) c5 ~
" u& Z3 S9 w, b0 B6 s8 @& `
for k=1:n-1
( |- g: \$ o; z1 X
[p,q]=find(abs(a)==max(max(abs(a(k:n,k:n)))));
& \4 W0 J; A: S4 `( C
3 d6 G& z% T- S) U
if(p~=k | q~=k)
/ Q# ` ~9 T3 a% F z+ V4 @
t=a(k,
;
9 \; R: D7 w0 s; a. L
a(k,
=a(p,
;
, k% [6 ~& D% D( ]& J- T
a(p,
=t;
; t# n" ?3 @# t7 A. @) G
r=a(:,k);
0 [# d, q, p% d7 L$ [
a(:,k)=a(:,q);
4 Y+ g1 c7 w! u0 n+ n' z$ |, h
a(:,q)=r;
! F, `0 P' @5 m2 Z/ @: U
t=L(k);
4 g) h8 w8 d0 k" Q% c( M6 m
L(k)=L(q);
3 H. e! n r% J" ^+ Z( K
L(q)=t;
) ?1 ?6 A9 y o: w3 e& D
u=b(k);
3 _0 X- @5 N1 Z1 R# _ C2 V3 L, g
b(k)=b(p);
2 j& d0 @" t+ ?+ k* v1 ~+ q
b(p)=u;
5 x8 y9 i. d) ]' O0 r) C- \
end
. ~9 t* M, o. j% X$ c* f6 N
m(k+1:n,k)=a(k+1:n,k)./a(k,k);
( ^. q' ]0 x; O6 N% A
a(k+1:n,k:n)=a(k+1:n,k:n)-m(k+1:n,k)*a(k,k:n);
3 J V' }7 h" h
b(k+1:n)=b(k+1:n)-m(k+1:n,k)*b(k);
9 R' H; V/ L, R1 u1 f# F9 m
end
. G/ u H7 d) I" Y: z; J
- u' D3 M/ ^3 Y: u+ \* }' y5 f& J
( G; ^2 [. c0 C7 V. M
3.回代: 通过回代过程求解方程组。从最后一行开始,逐步计算未知数的值。
; r: Q, @' x" d- z3 C2 } \
6 ]8 P- W9 [' o" O/ x( ]1 W
y(n)=b(n)/a(n,n);
% E0 W v- ]: \2 q' w3 Y
for i=n-1:-1:1
/ v# R8 L3 _; P0 @" }9 q E
sum=0;
+ n* \! t! [) i B
for j=i+1:n
' G- v; \$ h2 c& Z4 _
sum=sum+a(i,j)*y(j);
8 X- V2 G8 e, ?
end
) q6 R. m, G" P, i& J7 }% Z
y(i)=(b(i)-sum)/a(i,i);
3 c) I% p3 g) b8 p
end
" r0 l% ]; O6 J% z! j; e
' H5 c* U+ ^9 B9 ]& \" T$ r
$ P5 R% |0 A: r
4.输出结果: 将解存储在 x 中,并输出结果。
( e* d% x, `' U; w
' `8 {; ^# c% s1 U9 R+ q
x(L(n))=y(n);
: K6 ^( D4 n! g- h+ s. c
x(L(1:n-1))=y(1:n-1);
7 C2 ^ U- O0 h% t+ ^. Y
jie=x'
" d( ]6 [% x4 J6 H" u
4 c j' o! p* M# a4 ~" [
最后,解向量 jie 包含了线性方程组的解。请注意,这段代码在求解之前进行了列主元素的行交换,以提高数值稳定性。
" O% Q) J D. L' O, X' }
9 ?& M2 b5 k) v4 v7 w
5 @( r E! E; A6 X
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5