QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2644|回复: 0
打印 上一主题 下一主题

采用高斯消元法解线性方程组

[复制链接]
字体大小: 正常 放大

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:1 ^. U! d5 ]$ z- C+ A* \9 G. C6 K- |

9 H. ?- S# D7 o+ E  K1.矩阵初始化:
$ o  y$ A8 ~6 S# Z4 f/ Z- w2 V
: f0 C1 X" B, l0 \5 {( I% K   a1=[2,-2,5;2,3,1;-1,4,1];
, N, F: T0 N4 u9 v' |7 V   b=[6,13,3]';$ t! c+ ]! I/ m! f* ]
   n=length(b); % 方程组大小为 n% O% {# Z+ A, I0 o4 I
   a=zeros(n,n+1);/ ^% d( r& Q  Y& u  O4 x/ B
   a(:,1:n)=a1;
3 @" b  K/ K8 Y   a(1:n,n+1)=b; % 增广矩阵$ ^" m% @7 l/ X, {  q0 z0 l6 `4 k

) D7 D! K0 F) Y7 X, i" P这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
- _8 W9 t! R2 P( g6 t' Q0 j$ ^! t
2.高斯消元过程:9 \! r% {( d& r3 A. I

9 F  w8 \5 [) M   for i=1:n-1
2 i0 D* \" S5 j8 K6 r       % 确保主对角线元素不为0
" J, a+ [8 O9 m       if(a(i:n,i)==0)5 y) [) e* M" v+ x
          error('方程组没有唯一解');
& G. b  w1 \/ k2 z       end4 @4 S# U7 l3 k  b; t5 ^+ R% o" y
       % 选取主对角线元素不为0的行
- n2 C  a2 k4 g6 H" M: d9 k0 S       for p=i:n: f) ]3 S9 ~) F) p2 u9 z
           if(a(p,i)~=0)
, I/ U2 b# q$ @$ [7 Y               p;8 P2 X0 K7 k0 T& v
               break;0 g: m' j$ G6 V2 {' X+ S
           end' O' f4 B- F6 |8 s& N! b
       end 7 T# i/ ?& x- Z2 A, k+ p
       % 如果选取的行不是当前行,则交换两行# C9 O8 O; f  }% T& X- Q% a* N. R
       if(p~=i)
' x! L) r- F6 l         t=a(i,;
% m) a2 J+ K9 k* V# c# l         a(i,=a(p,;9 ]  N( [: H& f) M: N9 c) y# R
         a(p,=t;! W  {& |4 H( A, I1 Y
       end% y- `1 @) K/ \8 L
       % 高斯消元) B; I% B$ u* R6 n( X! [: u
       for j=i+1:n" T. y' B5 J5 s3 ?/ ^4 S
           a(j,i)=a(j,i)/a(i,i);
, P+ m( s9 P4 w* J4 i           a(j,=a(j,-a(j,i)*a(i,;
( k- h3 d8 T- _. d% q- P       end2 k% n& v) R9 s! j1 t
   end1 T+ ?) A. _" a: e/ U/ g: D
   % 检查方程组是否有唯一解+ \9 i$ M/ z* |3 U
   if (a(n,n)==0)8 Z( z: L* M; U  C
        error('方程组没有唯一解');( h) V; {5 k$ e+ g
   end, m0 k3 j+ G  J* s  y" P

4 x8 N. T: w" X) i/ I/ j. e3 T这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
7 Q, t  v, q7 X) o) R, o1 J! ?$ M& ^  H' [3 t# d# L
3.回代过程:
0 F2 `5 ~' K( P) k4 I! Q. K/ X! Y
  J1 d! b$ `- |4 e3 R+ W   % 回代
9 K  L/ _4 b+ B% d$ W' [/ s( y( ?   x(n)=b(n)/a(n,n);; w1 z' q% w* [' ]: o+ X! M) B" j7 D
   for i=n-1:-1:1, c. B6 o0 c5 O/ y5 x
       sum=0;6 W- d! w1 n+ N; }
       for j=i+1:n- z0 B$ ?  {; n/ z' {# l: }
           sum=sum+a(i,j)*x(j);8 }$ n1 _# B: L# Y' \# {& Z9 A
       end1 @  G' X6 ~/ [4 q1 l- u& `0 D6 a
       x(i)=(b(i)-sum)/a(i,i);
- A# c8 _; z8 w" o& O* ^3 P) [   end" _, U# E5 v" P% Q+ D

$ B  n: M% \1 M' H8 J2 |这个部分实现了回代过程,得到方程组的解向量 x。
: g' u0 Q; R" x3 Y) k% P
& i& |# Q" n) s( a4.打印结果:, Y2 [% G3 K; {  L6 L0 m/ |& m
9 Y  ^; d- H  ]* O+ f" v
   jie=x'$ @$ q2 ]1 s/ R$ E. _. u3 n
& w+ I1 j$ u6 R; c% |/ L! l% y
最后,打印求解得到的解向量。
  G; c9 v9 H; L/ U+ t在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。( i7 P+ z. x# r+ {  X
) t" ~! b4 r7 C7 f' [- ]& P
& F# |# t" ~8 t* @

gauss.m

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

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

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-8-25 21:06 , Processed in 0.474083 second(s), 55 queries .

回顶部