数学建模社区-数学中国

标题: 采用高斯消元法解线性方程组 [打印本页]

作者: 2744557306    时间: 2023-12-31 16:27
标题: 采用高斯消元法解线性方程组
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:: n( g3 i4 W7 h  y  c+ _+ u, v

+ R7 C: N  v' c9 ^" F# O1.矩阵初始化:/ M5 i0 Q: W, v, g+ K" Y* d+ v

, {+ ?# C% K6 s' a1 P4 d7 A   a1=[2,-2,5;2,3,1;-1,4,1];  T, E6 j9 B+ E; }( A% K2 B5 ^
   b=[6,13,3]';, Y3 k( @" H- Z' m! x! @
   n=length(b); % 方程组大小为 n& c5 v( q0 p; e
   a=zeros(n,n+1);" h* x' w1 y# U  e8 {! C
   a(:,1:n)=a1;9 Q& {0 c: K+ W( |$ z/ R6 Y1 \
   a(1:n,n+1)=b; % 增广矩阵. Y) B' r7 ~; e  D

' }8 k5 f- S: |. m* V: E, J3 r+ g这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。9 x) [. B: Q/ Z
& z1 C& L$ M% O, R: j6 g) ]
2.高斯消元过程:
5 G6 Q$ |: x2 }" V
$ J: b8 i, b2 W' [* K  Y   for i=1:n-16 Q- o& j: o1 m$ o
       % 确保主对角线元素不为0
$ v# ~; Q8 Y2 \% |: }9 C) l       if(a(i:n,i)==0)
% }, B+ W$ Y. n. U9 n1 h/ x          error('方程组没有唯一解'); $ Y6 O. T& Y: u- K9 q
       end
6 N' r7 j- Z( E' F: ~1 V# \/ ~* G       % 选取主对角线元素不为0的行
) m& n( A8 ^% d7 R       for p=i:n
: w1 M  s1 W* o# j& V- H# ?5 \           if(a(p,i)~=0)
7 o4 A( C. Z; O* z: t2 F* D5 b               p;( v$ j4 O, j/ }* Q' \
               break;6 Z, c9 m/ Y$ O" b8 r# u
           end
9 j/ _: a0 z- z, |$ e+ A) q* e" W       end - i, t8 G! B% Y- _5 E1 t  K
       % 如果选取的行不是当前行,则交换两行
2 s3 T& J* r# ^5 C       if(p~=i)9 s  x" i5 U) k
         t=a(i,;$ V. h2 Y' D9 z0 f# G, c6 r. C. H
         a(i,=a(p,;
! X/ _1 {4 M3 A6 r0 G% C) C         a(p,=t;- l  h# ?+ s# ^$ r( m- z/ ]
       end
" M/ y$ n. u% G$ z3 V, b       % 高斯消元
3 y- y- `7 v( {       for j=i+1:n
/ {" `, u- y- k4 q           a(j,i)=a(j,i)/a(i,i);7 _8 h: e. P9 V" X( Y1 G
           a(j,=a(j,-a(j,i)*a(i,;) y: R+ V7 d, L) N7 s' A
       end
/ y. |( G3 K9 W" i4 q3 b7 N   end9 _4 f8 ^) N$ l& Q
   % 检查方程组是否有唯一解& f# E. {7 \' _4 s
   if (a(n,n)==0)
  Y  a8 q' z9 h" ]& Z. C) t" `        error('方程组没有唯一解');. b8 s7 I& I! G( q  F  H
   end; A9 ?" k9 K# M* e! T* C) }

1 s9 R2 U  ?/ [% j$ y: {2 ]这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
5 j2 l2 y. _' f' M8 S7 Z+ f- K, `) t; T" ~) i$ w' t
3.回代过程:. K* k; O+ v$ ~: v1 d8 M
. r0 W: e5 }$ W3 p* E
   % 回代& {( X2 O- E: f# A' L" o0 v
   x(n)=b(n)/a(n,n);* Q8 N' F2 P) P/ L
   for i=n-1:-1:1
" A! r$ S/ l8 S# z       sum=0;
5 K& _6 i7 l; W5 w! H! `       for j=i+1:n  }$ m& p$ i. D
           sum=sum+a(i,j)*x(j);% w# N2 d( x; k3 u2 P' n( j5 D
       end6 z9 D1 l4 p0 _( ]4 e+ ^
       x(i)=(b(i)-sum)/a(i,i);; L8 X" D( z9 _9 ^/ k* b% n
   end  Z  i9 ]: P% \, }9 b8 P
& g6 S( R" T( E% U% r. y8 w
这个部分实现了回代过程,得到方程组的解向量 x。
; a1 ~; |+ Y5 |' {2 V$ S1 }0 U2 I0 O1 p2 |& D
4.打印结果:9 d# _; Q% s: e# P! o

( j8 [$ C  O/ Y8 k   jie=x'
2 J! W4 ^5 N* N" ]5 p7 H3 j  o' p, V+ r# `" v, u5 a
最后,打印求解得到的解向量。
; d" U; z0 v& |4 B7 u* I+ Q' d在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
9 T$ I% G) O5 e, j$ f1 `
7 Y6 ^, }( A- F8 F% [
$ b) h% U4 f' i( K3 e9 c

gauss.m

1.07 KB, 下载次数: 0, 下载积分: 体力 -2 点

售价: 1 点体力  [记录]  [购买]






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5