数学建模社区-数学中国
标题:
采用高斯消元法解线性方程组
[打印本页]
作者:
2744557306
时间:
2023-12-31 16:27
标题:
采用高斯消元法解线性方程组
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
; Y) I# }$ E E8 N. c" H1 p- F
. J7 ?0 |) W( d( J4 Y
1.矩阵初始化:
, K- X+ S2 s x3 B6 J+ u6 S
% D9 L" W3 a1 ], Q
a1=[2,-2,5;2,3,1;-1,4,1];
: h& r. h; h _% r- X
b=[6,13,3]';
1 z& \- o b! \1 H
n=length(b); % 方程组大小为 n
7 G( d0 v5 N& X( A+ Q+ o n( `! v
a=zeros(n,n+1);
" F2 S1 e7 D% t6 A4 m, G8 Y4 p1 C7 A9 E
a(:,1:n)=a1;
# R# r: H0 k) I/ ]! W7 ?
a(1:n,n+1)=b; % 增广矩阵
' |( B! g# |3 [0 q6 R& q; X. B
0 v5 T# q- L; M- O
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
# p) D. a+ Y/ M5 k4 E) \8 a
; F s% p7 t3 r; f- c
2.高斯消元过程:
% e9 \( c+ |0 h# D' L S
5 W& d* k! P! x/ i* x" d) ~
for i=1:n-1
( S9 U* h7 ?( }0 r& U. G
% 确保主对角线元素不为0
3 R( [$ h4 {# }. l4 R8 N7 H! G# N
if(a(i:n,i)==0)
. L% u5 `5 I7 y' @3 \
error('方程组没有唯一解');
8 O8 o+ c6 D1 ?! x; X
end
* I q. E2 Y5 q7 @% b
% 选取主对角线元素不为0的行
% u B* M. i2 }
for p=i:n
4 x; p2 S+ c+ g8 V) n+ x. D! t
if(a(p,i)~=0)
. J1 R* ?# E3 A
p;
; |, Z4 I$ K% i5 l$ J# Y
break;
! A+ T* g, N% ]6 ^2 Q2 I1 H% e. {
end
" D$ s5 D' L/ I5 X" X; Y" e' s {
end
# b% A# y& m; Q& M- z
% 如果选取的行不是当前行,则交换两行
2 ^( ?+ n" \& w
if(p~=i)
9 p& Y$ K+ j+ y0 c. H
t=a(i,
;
) x; @( M( Y+ S8 X# Y/ b6 d
a(i,
=a(p,
;
" e+ @1 @$ [- ?6 Z. G
a(p,
=t;
3 P8 c3 D$ H& T x G
end
5 p; a# k4 t3 G% J
% 高斯消元
+ w8 l0 G7 H" A! t/ R
for j=i+1:n
- `$ x8 b+ {/ a: g
a(j,i)=a(j,i)/a(i,i);
3 ^8 v8 @! |& n# c
a(j,
=a(j,
-a(j,i)*a(i,
;
# w4 i% }1 D4 a6 ]
end
5 {6 G( j, l4 m3 X; O+ P) ]0 V
end
7 z; b* f8 t! w7 v2 y" w+ `
% 检查方程组是否有唯一解
# r+ M4 f9 t) @) ~0 V/ }
if (a(n,n)==0)
3 }- Y( [. z; v$ E
error('方程组没有唯一解');
) w; ?# n/ Q& B! ]* y
end
* A# e; P- f' k' n$ J4 U; ~
4 h' K! R6 b. ]1 }" P- p
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
$ d9 G. d- t2 \6 O
3 ]* k' | F% Q @7 _
3.回代过程:
7 G! I- U5 v" K! e2 t# }8 t
G6 j+ E; K6 Y8 U8 P
% 回代
) d2 x1 D& g/ S" E4 L; k% ~
x(n)=b(n)/a(n,n);
: W: ?& c4 f) C
for i=n-1:-1:1
+ b1 q* j: V' @
sum=0;
/ u( |/ _3 Y4 K8 r) Z q4 ~
for j=i+1:n
4 B: y: J/ \; t! i! j- r
sum=sum+a(i,j)*x(j);
0 c+ k. z: ?1 Y
end
! ~3 }# ^; Q, R2 b2 P3 |
x(i)=(b(i)-sum)/a(i,i);
5 ]! O z) j: U" Q- x9 o/ J% ~
end
. {( p2 {, E) H! z7 u! {6 a
/ } w; e' x) Y
这个部分实现了回代过程,得到方程组的解向量 x。
: _/ k2 J1 ~& V6 i! F U8 K6 |
, c- `% {1 l! \! M" Z
4.打印结果:
1 V6 V" B; u7 b3 C" f% g3 S
5 b# L# [0 ^* W- D* _- ^3 X
jie=x'
" V0 v0 o; [* h- L% d: X6 ?2 C
# K0 |2 e8 p0 q
最后,打印求解得到的解向量。
7 L; v! ?! A; t, S
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
# u c) b2 f0 O, D& j' M1 g7 B5 w
" D' n7 W7 W- w& Z, u
3 I8 s8 @9 ~% A; {( Y4 S2 @
gauss.m
2023-12-31 16:26 上传
点击文件名下载附件
下载积分: 体力 -2 点
1.07 KB, 下载次数: 0, 下载积分: 体力 -2 点
售价:
1 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5