数学建模社区-数学中国
标题:
采用高斯消元法解线性方程组
[打印本页]
作者:
2744557306
时间:
2023-12-31 16:27
标题:
采用高斯消元法解线性方程组
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
6 B* J% w2 n E* l" h8 G$ P
3 E! V4 F( ~ B: O" {- v- g
1.矩阵初始化:
/ d, W" ]6 [1 o8 |
+ c( K% d( ]& [
a1=[2,-2,5;2,3,1;-1,4,1];
* T4 b$ v( R* d3 A$ v, C( c. e. A7 Z
b=[6,13,3]';
0 \* W$ c$ x% ~6 L+ w
n=length(b); % 方程组大小为 n
6 @- N% `* L% t5 W9 e: q8 ?6 b
a=zeros(n,n+1);
( r9 L% t0 \7 w7 k
a(:,1:n)=a1;
* Z) k+ @: T* Z9 G
a(1:n,n+1)=b; % 增广矩阵
. i, [- Z& n+ a9 m) M
5 \' S9 k F% p. P: t: E+ V6 E; E
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
- G9 r" A$ E& q J
8 V8 ?2 ]1 r& O! T' g
2.高斯消元过程:
( G, G, A! y; v. b! w- O2 T
% z* c/ c& c8 V+ R$ }
for i=1:n-1
+ n/ a, E- E9 a1 v' Z9 Q' R
% 确保主对角线元素不为0
/ \9 B/ P& W1 E! i! }
if(a(i:n,i)==0)
; h6 t5 c( i/ c$ N
error('方程组没有唯一解');
, D" j" O! n) M$ F
end
3 f6 W! X) x) g) l, v& f
% 选取主对角线元素不为0的行
+ h8 q4 x$ }8 d5 ^+ O5 V$ p
for p=i:n
( { s% g/ E" I2 f, s& L
if(a(p,i)~=0)
- w2 G% T6 F* z! w" M# o8 r9 [
p;
1 V# f- `2 F! O" \) N
break;
" k! c% k& Q- b
end
% v3 w+ C) K" B
end
% N( q [) M1 M+ Q! P) z
% 如果选取的行不是当前行,则交换两行
+ `* m3 s6 b6 m7 J' o& z& |
if(p~=i)
5 |% L" E1 t" h6 W+ m9 |
t=a(i,
;
3 q) x1 K$ }! q% j1 O' f
a(i,
=a(p,
;
: D' v- E" [% k
a(p,
=t;
$ G4 G. _0 ^$ y# \# U! O6 d$ j
end
$ y+ y4 \0 Q7 t) j' i
% 高斯消元
) z" k! I& m/ R, X" v
for j=i+1:n
6 X% m- \: i4 I: a9 l' C
a(j,i)=a(j,i)/a(i,i);
+ E! W7 Q9 e% H1 `5 } d
a(j,
=a(j,
-a(j,i)*a(i,
;
/ G) Q; l; }5 s9 l- G% `
end
. L# U1 l _- e0 ^* [. ]
end
2 K$ n' K( }7 b8 x/ Y# `$ {1 x
% 检查方程组是否有唯一解
& a4 g# U5 |/ ~2 O' M
if (a(n,n)==0)
; n& s0 z. c9 f3 Z$ [: N' Z0 c
error('方程组没有唯一解');
; }3 `/ j- E3 M3 I9 O
end
( B( ]$ ~, a# q
6 f9 W, N% s" ?) a2 I" l0 f) G: a
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
5 H7 Y8 j2 W! {8 ?- E
/ G& Y( c- [1 s8 f9 H% ~9 C9 e
3.回代过程:
. ?5 Y0 B+ W! `
2 r) i: O% `: p @- R
% 回代
, x: x0 r3 _* {+ T+ g; }
x(n)=b(n)/a(n,n);
' v2 S; y. \9 ~8 T' \' w3 v8 d
for i=n-1:-1:1
* ?$ X# X( s5 v7 n7 X3 x
sum=0;
7 {. Y0 q# ?3 v
for j=i+1:n
* S) @/ M4 X0 V# a* l9 ?
sum=sum+a(i,j)*x(j);
: j" S( ^% s. ^" \8 [* H! E& ~
end
8 E, n' @1 _$ f- J: U5 x
x(i)=(b(i)-sum)/a(i,i);
! V5 Y( \, F* Z: v! I/ k3 h0 i
end
5 V& v% u& `6 U) u* _8 n; }) {
5 F1 @9 E! Q) H e1 j6 Y
这个部分实现了回代过程,得到方程组的解向量 x。
7 M) q0 ], @: M
! S; i* ^: T! J# q2 ~
4.打印结果:
x% C9 ?- }8 Y. J4 d. F
$ U" L+ T) W8 ]4 R0 f3 X( k
jie=x'
( `0 x8 O) b. D) ?7 V
2 a8 D9 ?1 o' A# o* b, P
最后,打印求解得到的解向量。
6 G: `5 u M$ f% Q
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
- G; a; a4 g0 `/ M6 A
. e: t. `: l- G7 T1 P
1 @0 U c! s# ~0 d. V4 e9 }
gauss.m
2023-12-31 16:26 上传
点击文件名下载附件
下载积分: 体力 -2 点
1.07 KB, 下载次数: 0, 下载积分: 体力 -2 点
售价:
1 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5