QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
' u  O# g- s2 C  V  `0 `3 k" ~5 S; m$ r) J1 Y! k
1.矩阵初始化:
/ K' |2 B' n! K: B4 s' ^/ t2 A. C
   a1=[2,-2,5;2,3,1;-1,4,1];
# V- N- v0 C0 P$ B) E0 s1 H" S   b=[6,13,3]';  `/ @$ O+ e: V" J6 ~
   n=length(b); % 方程组大小为 n; G: \/ R5 z6 j
   a=zeros(n,n+1);
) J3 A6 L) N' ~# x+ {! f   a(:,1:n)=a1;8 N& _% l2 q) b) O3 A( T
   a(1:n,n+1)=b; % 增广矩阵
& o7 C# [8 c7 X6 u: a  @  [; Q) c! Y" S6 P
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
' U" S+ ~: n! m+ u+ x5 d/ p$ [6 D! N2 x% c3 D
2.高斯消元过程:" l6 w  o7 U) e& ^

; X/ ]% j) q& ]0 J0 w7 E! U- o$ t   for i=1:n-1# }) o# v2 A- t4 x- c. ]( N
       % 确保主对角线元素不为0
' d, `3 Q' o$ {: \, G       if(a(i:n,i)==0)
( `4 N; w4 Y! [+ x. I          error('方程组没有唯一解'); 7 b4 j1 i, X' P; @" d  z# p
       end
1 }" q% D& I( u* |' c6 o       % 选取主对角线元素不为0的行+ B# S/ u) R7 B
       for p=i:n9 [& V9 c2 _" Y( F
           if(a(p,i)~=0)" a, @' R. }( f6 S! H0 h
               p;. c% c+ m  d& ^: \0 o0 o/ n* r
               break;
  U6 X# [$ t2 J1 k           end7 {8 g4 m+ E+ d5 S* w3 c5 g  i
       end 0 _4 c( m/ y$ [; W
       % 如果选取的行不是当前行,则交换两行
/ F& Y* y) ~6 R2 J: s; p       if(p~=i)
/ ]$ J6 t2 r% b! r         t=a(i,;& t9 e0 X6 [7 m! r8 P; J' j
         a(i,=a(p,;3 T+ b3 W* Q, @, T9 j
         a(p,=t;. M1 Q. f$ k* B1 M$ x1 U2 a
       end' ]. \8 o9 y; t
       % 高斯消元
& {+ ~$ e/ E4 y1 x% t$ X       for j=i+1:n
- z7 |- p9 H" h- R9 ]2 |           a(j,i)=a(j,i)/a(i,i);
- h+ o) p' m- ?8 J$ Q! E           a(j,=a(j,-a(j,i)*a(i,;
$ u7 I5 r( ]$ f0 j+ a       end' j6 Y+ \5 e5 P2 s* i7 ]' G
   end
! K$ T5 V1 q; I   % 检查方程组是否有唯一解, _0 I8 |" }' e
   if (a(n,n)==0)( H9 X/ m% h% q7 i1 m0 D! g
        error('方程组没有唯一解');
( G5 V$ l6 K0 o4 t, C# I0 a   end
6 O2 h  R1 h, G0 B3 }# Y2 B
5 K, N! h; \8 A3 Q这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
; q7 s. {6 j$ g
# D/ X7 a  ?; n7 |3.回代过程:
* ?; e4 i0 ]3 N8 i
2 C! z3 q  N2 x2 O9 R! T. d# u7 V3 t   % 回代
6 M6 ]( x4 x* u; V! n4 T   x(n)=b(n)/a(n,n);1 L0 [. d$ U" O  g2 t
   for i=n-1:-1:1
2 S' e" F2 o; z2 h2 O       sum=0;0 c9 E/ O2 \8 s2 m% S
       for j=i+1:n5 z' q0 x, X% H. M6 y
           sum=sum+a(i,j)*x(j);# e  l! I$ J' w; X2 E# E
       end/ X) t  N0 w6 t8 m8 r6 \3 m
       x(i)=(b(i)-sum)/a(i,i);0 U( k# Y; c, B/ Y0 V
   end$ B/ t- B5 l' P8 G* L) N
) ?; E( n& B2 B
这个部分实现了回代过程,得到方程组的解向量 x。$ K9 _" P+ K- v2 Y  ~
5 t* V' x7 Q! C
4.打印结果:  b( ]6 h5 x1 z0 V# x
2 s# W* E9 s: Z6 W. a
   jie=x'
0 r9 e# [+ q2 v. ~( |
6 L6 X- E1 {5 b; r最后,打印求解得到的解向量。: x( l' O( @$ i$ V* b. R0 @  J2 x8 ?
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
2 Y! X8 L" S! B
. v7 @7 Q0 t& g
9 J( q/ E7 j# Z6 n9 g

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 05:23 , Processed in 0.326660 second(s), 54 queries .

回顶部