数学建模社区-数学中国
标题:
采用高斯消元法解线性方程组
[打印本页]
作者:
2744557306
时间:
2023-12-31 16:27
标题:
采用高斯消元法解线性方程组
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
. M: v) F2 f) Q1 V" G9 x
: H7 [4 y/ j6 \0 D
1.矩阵初始化:
# I, M. m) v V4 C* N
! W( S5 }( O0 D- ~
a1=[2,-2,5;2,3,1;-1,4,1];
. |" a( M! x* Y# e1 L, |% o+ \
b=[6,13,3]';
8 i" ]$ r: O# P1 q4 ]+ |2 U: |
n=length(b); % 方程组大小为 n
* f0 Q9 P1 A' a/ W8 n _& ?" x
a=zeros(n,n+1);
8 |+ x8 e* t- d1 _7 `: S' @) t
a(:,1:n)=a1;
& M0 b& b- q: i* O5 A1 Q! G
a(1:n,n+1)=b; % 增广矩阵
r4 W2 A- X, Z" U
4 h$ c. B+ Q. Y1 V
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
7 s, M4 G; X, i3 P0 {0 [
) q h0 G9 |; H h3 w3 W) I. h
2.高斯消元过程:
' |/ W2 |: p9 _+ @* k, c
$ l; j3 q" m/ D& j- W3 y
for i=1:n-1
$ V* I9 ^ y+ v$ o# P* [
% 确保主对角线元素不为0
, {; C+ s' }/ G' d# ~
if(a(i:n,i)==0)
. t" W' N0 a, J2 Z1 c7 j
error('方程组没有唯一解');
2 t' L; _2 ~8 |) L" T
end
y4 E0 n# s: r( |* t3 |/ s. h
% 选取主对角线元素不为0的行
3 Z j/ W B( b9 p3 C# e4 F
for p=i:n
% q, t/ r k$ `+ C9 O4 Y! C* U" j
if(a(p,i)~=0)
9 n2 a, ~/ G- h: A, l! Y, j" s
p;
9 s& s" J1 Z5 a
break;
; F* _5 b) D1 t2 z6 L m* \5 j
end
E3 S% C( L& D3 o; I
end
, M0 w: z, j+ g/ |0 U4 z. j
% 如果选取的行不是当前行,则交换两行
1 V: b6 m3 e8 q
if(p~=i)
4 {" s' _0 D( ]+ C; O
t=a(i,
;
/ J* n( ]7 W4 m) b
a(i,
=a(p,
;
* w# R" ] g( M: ]) T9 e) X5 o9 D
a(p,
=t;
3 {9 M% J/ Z* [( T( G( y
end
+ G8 D4 {0 R+ E, N$ Y. c
% 高斯消元
! b% M. F! i" A& G0 `' R% ^- ^
for j=i+1:n
6 N4 d9 s& J: U- {" L" Q8 H% s
a(j,i)=a(j,i)/a(i,i);
' ^4 Q9 [; N) B# t+ l
a(j,
=a(j,
-a(j,i)*a(i,
;
0 F7 H5 w+ o: I: G+ G. Q( g
end
4 ]6 `0 K7 N9 a5 Q6 T
end
7 y" `* |" L! _
% 检查方程组是否有唯一解
|4 T, E7 O9 W) f
if (a(n,n)==0)
9 G% z9 l/ v, e, a1 c
error('方程组没有唯一解');
0 y. Y" x W0 d/ |8 M/ r
end
# O5 I# b) R9 \: T8 y
# Z! V% f( l R
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
- `7 I5 Y ?3 s' L0 N# f
3 Q3 r" ^, @6 J% \: u# V# W+ ~
3.回代过程:
( P- L% X0 ]- @% ]: D" L
5 N* ?$ ?5 t- i1 }. D
% 回代
: c$ B7 p9 o% A$ ]; ~$ i
x(n)=b(n)/a(n,n);
& g& P9 A# K5 E
for i=n-1:-1:1
# d5 G U) r2 z' N- c
sum=0;
8 _8 b7 f0 ]; ]
for j=i+1:n
; ^6 M# G0 R0 O5 s) Q9 I! h1 `0 V
sum=sum+a(i,j)*x(j);
2 v* L' q4 A7 E1 k5 R$ B
end
2 n' a g7 a6 g* r
x(i)=(b(i)-sum)/a(i,i);
: Z; [- p1 p6 I5 O
end
% `4 b; i: s r4 x
2 I/ ?% z- E+ o* G* j- K
这个部分实现了回代过程,得到方程组的解向量 x。
/ b% u& M; r& x
6 P) L1 M* x5 O8 y, X( g
4.打印结果:
, H1 ? O) G* u7 |$ w0 ~& K
: b' R; `; u. j' y: t
jie=x'
' i. ~: g/ q, p7 v( H5 ?
2 R u) B& e# l8 S- X" _# [: {+ ~5 ]
最后,打印求解得到的解向量。
Y( {/ z6 {" a: @& ^- M. I
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
6 Z+ n( p% ?" Y( [
7 S8 I/ K5 ^& q& C7 Q
# q/ P2 b/ Y+ ^! v8 q6 E4 |
gauss.m
2023-12-31 16:26 上传
点击文件名下载附件
下载积分: 体力 -2 点
1.07 KB, 下载次数: 0, 下载积分: 体力 -2 点
售价:
1 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5