QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:) _& V" V1 A, Y' x
6 _' C- ]' y" P& h- b. o$ t* }
1.矩阵初始化:
; ]- \9 m! J; ?, A; E; r1 R) p
# Q. r, I5 J$ k& C  @2 i   a1=[2,-2,5;2,3,1;-1,4,1];& I: _% _* t) C, V
   b=[6,13,3]';+ m5 [! Y% X% e: e; u
   n=length(b); % 方程组大小为 n8 Y1 s- ?( U/ |4 |$ A  M
   a=zeros(n,n+1);
# @' D. h2 ~9 ]9 S; i9 f   a(:,1:n)=a1;
1 ]5 E; \% n6 A4 e& c# }   a(1:n,n+1)=b; % 增广矩阵
$ U- K5 U6 k; Z4 J+ U8 i
- G1 t% j* ^# G: F7 P3 c这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
/ x' K! l3 _9 s( z% _& @1 I: ]% U& Y, u! A4 @
2.高斯消元过程:2 m( m/ V8 {6 M1 P% j' P8 I* g

" S9 m- c9 e7 u. m4 B# p   for i=1:n-1
9 `2 k. M  h( F  |       % 确保主对角线元素不为01 r1 a/ L. {3 U: y8 T3 {  a; r$ T
       if(a(i:n,i)==0)1 F; G- V& _% |& z5 N+ i+ ]
          error('方程组没有唯一解');
, w9 I& J- H: W' I: D       end
" H6 J& M5 ^. i) F( _$ C       % 选取主对角线元素不为0的行
# o7 D" @% w! U9 K% U) K8 C  \       for p=i:n
+ q" z5 e$ T  \# j           if(a(p,i)~=0)8 l  s! j/ C" E% A9 v8 y" T6 \! G3 U; ]
               p;* |- K; y# z( e: B! i4 @# ?
               break;
. h" A; Y! j- s# }9 X% b# Y           end
& m: u' v0 M. v; W% o8 H       end ' Q+ z2 D: I, m; p( }7 H4 ]( H# f6 v
       % 如果选取的行不是当前行,则交换两行2 x0 W2 |) f) H' \* n
       if(p~=i)$ G" I  R0 S/ f5 _9 U1 J
         t=a(i,;; N: ?& W+ I" E1 M, n
         a(i,=a(p,;* B  D' F. I& q# A
         a(p,=t;
: \* S. J% [3 v       end& _3 v# ?/ B& Q% d
       % 高斯消元
! M2 z4 h2 V! h: [# Y       for j=i+1:n) q/ a: @; P' l6 b* K" C! D/ }
           a(j,i)=a(j,i)/a(i,i);
& w4 y5 w  i9 k1 |) U& d! T           a(j,=a(j,-a(j,i)*a(i,;
/ J- E7 ^2 r9 K( [3 [8 V       end# t! Z% I" @: j4 h- a% t5 @
   end& N# S/ f( x( Z. r3 h* p
   % 检查方程组是否有唯一解
, l! ~2 P4 F7 y0 O$ ]9 v& m3 e* I0 V   if (a(n,n)==0)& `, y1 R# e: E# s9 d
        error('方程组没有唯一解');/ I* ?: }5 g# ~, Q& X7 B0 X
   end" @& ^2 ]7 G1 L  {( B* ~

: @" V, t( f% _8 r, j( f# I6 p这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
# ]3 e6 P2 J3 b" d, D8 |' O. O1 Y
, ~2 D1 ?/ r5 z  C3.回代过程:8 I  `6 d# m. o6 P
! Y0 R. o1 [- O( }! }& _1 @" o
   % 回代5 `# X- Z+ u- J8 ?
   x(n)=b(n)/a(n,n);
+ B! D& I' P8 e8 ?! |1 M2 z   for i=n-1:-1:1
: s! ^' Q, D, _# W+ Q       sum=0;
7 q7 B9 F% t3 ]/ n/ m       for j=i+1:n9 O; l" c5 _$ m% [% d3 w3 t7 ?
           sum=sum+a(i,j)*x(j);
' H0 x9 N  L% d0 j# {, g) T' y3 v       end
; [* d# G, L# e: g/ j       x(i)=(b(i)-sum)/a(i,i);. W1 d  H7 b7 m
   end5 r+ j/ {( T2 p  O1 ~9 `/ D% m$ O
0 L. l3 @+ E* y: H
这个部分实现了回代过程,得到方程组的解向量 x。
5 a; w$ g$ P$ V1 V% ~3 I3 t
" T- ]' u* i, Q  m# T  P" r  [4.打印结果:
) C7 [  y7 O$ U3 T9 f: ?0 s4 |( R* U5 H4 A' ]" N
   jie=x'
1 W" }+ o2 ~* B( O. h; T1 U' k: `
  S' S2 D4 m  X) l" g最后,打印求解得到的解向量。$ M# B6 L  S2 D" n
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。/ q0 W1 {- S  f7 P: A6 |. l
/ E, a* Z/ u6 y4 Q& b
+ l  y; m8 A5 T/ B

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-6-14 14:50 , Processed in 0.472488 second(s), 54 queries .

回顶部