QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
- N2 j2 ^: u7 J! C$ C! ~7 W$ O" ~8 ~0 \; ?  n" f! B
1.矩阵初始化:: o7 ~3 T- u' d- b9 f

, }! e' V: }% d- o, o   a1=[2,-2,5;2,3,1;-1,4,1];) T/ [5 b7 G2 M2 ^
   b=[6,13,3]';2 b7 t# ?. k4 D2 T% {7 u3 U0 P
   n=length(b); % 方程组大小为 n  ^- h* ~0 f- N3 p4 E' Z
   a=zeros(n,n+1);
) \  I5 {2 m; \$ G   a(:,1:n)=a1;* f9 b& z& Y, ]3 k8 `6 X3 Z
   a(1:n,n+1)=b; % 增广矩阵
5 f3 i& i, q, n! k6 j; g8 W" P! T% x7 d; b, m7 e
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。' a$ L& P2 a* K+ a
. j% E' t: N, \. L9 T; ~8 S. C' l
2.高斯消元过程:
' B( v( p: G/ \! z9 t9 q3 L1 b0 f. [  h* e  Y3 Z
   for i=1:n-13 _# R0 Q$ l9 R* X2 {
       % 确保主对角线元素不为0
& S' G2 b6 ^. g! R8 m       if(a(i:n,i)==0)
2 G/ I3 }. d3 b, r. ^* Y" @2 L8 b/ A          error('方程组没有唯一解'); 0 P2 m/ M  ?9 ~+ H* t. T. c
       end
0 D0 m% [  v6 c$ k: W# l       % 选取主对角线元素不为0的行
( v, `( A' [( p7 O) _6 A       for p=i:n
0 X( {) K; f" f9 z9 R           if(a(p,i)~=0)
3 o. M, ]) A6 j5 f; C               p;
- e1 I" v+ [# s+ t0 o+ j+ K               break;
" x5 w' X7 @! ?/ k           end
+ }. e9 s4 h- |) |4 L% O       end
, J/ Z, i- a) |/ t* w9 B' R       % 如果选取的行不是当前行,则交换两行$ [( ?$ S- V3 t/ \
       if(p~=i), z- P: M6 ~6 z( l& j3 f! t4 m
         t=a(i,;( I. R- `1 x! K6 |
         a(i,=a(p,;7 c/ R; i# p- D
         a(p,=t;* p. H/ P0 v" T" t
       end
8 D; N; c- x0 p1 B0 ~! i       % 高斯消元1 o' u' d% i% J6 [. x& D
       for j=i+1:n
- d; q, r  l1 F( B; l$ \           a(j,i)=a(j,i)/a(i,i);5 @  F. S! Z3 h6 Z  E
           a(j,=a(j,-a(j,i)*a(i,;% r0 y8 r+ P3 G3 d  @5 R, l
       end
  {$ r2 O* v8 _3 q. h5 _& w$ O   end
5 ]0 R3 y* N( `& c" ?   % 检查方程组是否有唯一解4 [, @& J- H1 p1 f8 J: O
   if (a(n,n)==0)
5 C- ^2 Y' a1 m' b+ j& T% y' C, K: B        error('方程组没有唯一解');
+ r( Z2 z. r+ G* i  J; H   end
+ ^& I0 c' ^. X' C
  j! \9 ]" ?7 R这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
0 L( T5 q) m) S/ M5 w0 h1 N; g7 l3 t+ P% U
3.回代过程:) H& `( q0 b# R; X: O

& H. j! n  x4 O5 W' G   % 回代! E0 B" C% C  R" f4 Y8 C! ^, @
   x(n)=b(n)/a(n,n);
% u4 s1 I  y  \7 K) W& x* _   for i=n-1:-1:1
3 J& C8 y* f6 d; ?7 q5 M       sum=0;+ g; v$ \  T, s$ D& F
       for j=i+1:n0 F. E) B! R, X2 k% t/ c/ Y
           sum=sum+a(i,j)*x(j);
: ^% o! {; `: P9 a) v       end
! \6 U& w! |0 t% O# T       x(i)=(b(i)-sum)/a(i,i);  H! o7 z- F$ g* p# D3 v
   end
: a# ]4 i# Y. V, e( Y3 l4 f, f: g  Z5 a9 W& v  [$ @
这个部分实现了回代过程,得到方程组的解向量 x。
5 `- W4 X. Y3 G" ?" L- f# W
" E# V' x4 G+ e6 L4.打印结果:* h: K5 C- H. Q7 s, I) }( |/ \. q% |
( d$ p7 H) Q1 R" W& j# U- g: g# M2 m
   jie=x'$ k; }  j1 g% J& K. s6 H. ~" U1 W
8 D: l" `3 r' E) J3 t
最后,打印求解得到的解向量。( q0 V. ~( P! C
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。0 s$ z( J5 y! T7 h! |# y
" R9 `8 j  t/ k
3 e$ k6 v/ L9 w. i1 D

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-4-10 17:06 , Processed in 0.538673 second(s), 55 queries .

回顶部