QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
: V; \. F+ R2 C1 S
- ~( L0 Q  n: c  M/ X6 Y# ~1.矩阵初始化:
9 n3 f9 v4 [1 v, V' L* S# U4 F/ n: r8 `6 h
   a1=[2,-2,5;2,3,1;-1,4,1];
' q6 f, ?. Y; y! ~# n$ U9 F   b=[6,13,3]';
, k' [$ E% `" h- d7 u8 `   n=length(b); % 方程组大小为 n$ b+ M, S, i* r- |: Q" f' m# ]
   a=zeros(n,n+1);
8 ~7 c/ E8 r( C$ ?  e. \   a(:,1:n)=a1;
& `) b! N7 |; ?1 Z   a(1:n,n+1)=b; % 增广矩阵$ D8 C; D4 s' S3 _, `6 z, M7 |
6 i$ C: B0 a& G1 k
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。3 \" O# d, A) K* r1 g0 A

$ k4 i- E5 S/ T+ T( Q2.高斯消元过程:
9 p3 O" X7 u0 |5 E8 ^  `! X
% A& @5 E" M5 m( M   for i=1:n-1; F1 U) Y$ W! ?3 U6 {
       % 确保主对角线元素不为0
: w6 E1 b9 U2 L+ ]3 L% O       if(a(i:n,i)==0)' d7 n3 ~5 X* K$ l* i0 }  Z* o5 z
          error('方程组没有唯一解');
0 g& h- `3 b! m0 L       end1 j6 b! S5 J" b& _- x4 k
       % 选取主对角线元素不为0的行9 g* m; ?- b- `* k9 m! U7 a2 g& u
       for p=i:n
8 I% l# R2 |+ [8 L" T0 y           if(a(p,i)~=0)5 ~4 E+ K1 k4 s, z- i- p8 l
               p;
9 M, `' _& ^" H4 s: |               break;- f7 q6 k- Z  }8 _1 t: M
           end: F. D% T/ C3 w# Q& M
       end ( z" s4 r0 U1 ]* E( O
       % 如果选取的行不是当前行,则交换两行
7 @, S+ _+ A% x6 r: z+ v       if(p~=i)
/ b; h% ~9 \" |+ j, ~  L) B8 v* J         t=a(i,;
3 ]+ X9 J1 E9 |" y; o& p         a(i,=a(p,;+ Q' |6 n% O+ q- k$ r
         a(p,=t;3 Z, ?& y# E5 R+ Q& g
       end
9 ]$ M2 v4 g+ I4 g       % 高斯消元
/ r! c9 A3 c$ a3 g       for j=i+1:n
! y5 c, S# E- m( P           a(j,i)=a(j,i)/a(i,i);( w" B5 X# a+ r# d! j5 }
           a(j,=a(j,-a(j,i)*a(i,;3 X7 p- V! r* a  h2 B* F& X( e
       end5 m6 E# V/ c+ r. k* S( {4 M
   end, Y. Y4 C3 `+ ]& V9 P5 k
   % 检查方程组是否有唯一解
4 O$ B+ H/ v: W" y6 A( f& M  S- N   if (a(n,n)==0)
% s: u5 {8 I0 d7 ?        error('方程组没有唯一解');4 n  Z7 x0 c" J# K  x
   end! \! k* ?1 ]: d) \

5 i8 l- `, p& R8 T# T这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
! I; W+ P+ C7 M
- R, Q6 L4 H! N8 v3.回代过程:4 P: k. D$ s% k3 M( T
, b6 X, a2 D6 U5 n* V( Z
   % 回代
1 ^: A& c8 @- s% M   x(n)=b(n)/a(n,n);( x% J! h1 t1 H* y  l( V
   for i=n-1:-1:18 v& v' a* F# N
       sum=0;
& b& a( b  `) X* ?9 o       for j=i+1:n
% ]3 i  h% M0 z5 {% ?2 a. J+ U! @           sum=sum+a(i,j)*x(j);* ~! C( a4 d4 {- k
       end
+ H! d6 \* G6 w' Y9 x$ F       x(i)=(b(i)-sum)/a(i,i);: K0 n3 H. O- l7 T" I! ?
   end: M9 t+ p! x2 c: |3 ?, c& b$ Q
  W) g& _+ P: j3 i! g, L* z
这个部分实现了回代过程,得到方程组的解向量 x。( @) f! J4 M+ t/ d0 ?

' J( u1 U( q, X' l' I+ u4.打印结果:: ^9 Y' B0 D2 l6 Y) j& W& m

# s' Y0 `& u4 m   jie=x'
2 [6 y# ?5 a8 q2 Z! O' v- e
" e  }* F: e+ {9 H最后,打印求解得到的解向量。5 I) E( `: }" ~8 t. y9 Z, V+ \9 e  e
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。; Q- s5 m  m" o2 D2 i& S  g: ~7 L
( A8 ]2 L  A+ U+ C

" Z7 o' a* j3 G9 Q& x

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-7-10 02:56 , Processed in 0.348382 second(s), 54 queries .

回顶部