QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
; K5 y  Y  l+ Y; b4 a3 v% R: l( Z9 K0 k
) k4 g0 P; A1 K4 V( E% d1.矩阵初始化:
* I  Z$ a. r' q5 i: b4 Y/ E% e1 @
   a1=[2,-2,5;2,3,1;-1,4,1];
' {) A! J1 d# \7 Z: e   b=[6,13,3]';
) n; m( o/ |+ @, t1 o' a6 M; j   n=length(b); % 方程组大小为 n
, _/ R  U0 Z/ p" {$ m9 z( v5 X0 Q   a=zeros(n,n+1);7 P3 r* q' S9 G: l: D
   a(:,1:n)=a1;7 @5 Z/ z0 U4 Q3 G3 G, c) `$ v/ f; e
   a(1:n,n+1)=b; % 增广矩阵9 \" ~& Q+ l# y, D

" E4 X3 q: Z) m这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
9 O7 R' |! {2 L- B7 g# T" B
- [# V8 l9 ]9 v2.高斯消元过程:
, \! `" S$ l. L/ v( h1 t3 _
, n% h8 o! d: ?7 \+ {8 R   for i=1:n-1
6 w. ]. G2 l. ~) v' n       % 确保主对角线元素不为0
3 P* W7 }& Q6 E$ S( o" A       if(a(i:n,i)==0)
  A" L: g0 t; Q8 y  d2 Y          error('方程组没有唯一解');
  u$ {$ _$ H' ?6 E! ^1 b: y       end) Y6 `/ Q& T/ E' [
       % 选取主对角线元素不为0的行' v+ H1 a6 }0 T3 K
       for p=i:n
4 o5 }5 C9 G; i" w4 W8 }           if(a(p,i)~=0)5 c9 w: H3 \. ~# S
               p;
% Y: I- F4 u# ?7 D9 ~' P9 Q               break;  h! z0 k& C) C# f( Y9 k% q
           end
1 ?4 C+ q3 t1 Y7 j% z       end
4 ~1 a  b1 ~( S5 j       % 如果选取的行不是当前行,则交换两行* [. |& q, C' ]* d$ Q9 Q6 ]1 d
       if(p~=i)
0 f3 a4 b( u( m6 |2 f- R: D) T( @( L         t=a(i,;6 z! D6 s) B2 j9 L; ^. j) r! H
         a(i,=a(p,;) `2 Y0 E4 K: q; h
         a(p,=t;
6 R  @& G' h3 b       end
' |2 p& D8 Z2 m) T, F7 S       % 高斯消元3 _# S7 M  U$ M* B: a
       for j=i+1:n
/ j* c; s1 G. P; G- }# T" h# h           a(j,i)=a(j,i)/a(i,i);
7 T4 |" g  G! J3 ?; j' k' ^           a(j,=a(j,-a(j,i)*a(i,;
4 {& {1 m0 f  \0 s+ P7 B) Z0 Y       end: B2 T* f+ n! c4 I) N  [9 c, `
   end
8 k. D8 F. ~% ~) p4 z) k" A8 }# d   % 检查方程组是否有唯一解
! a; }4 \# d7 O6 D* {. J" k  O% q   if (a(n,n)==0)
7 u$ j9 _4 v( E- g. I        error('方程组没有唯一解');
+ P# p8 x( E, h% R- k   end+ g+ g7 O! V- ^; y" ^' }
! c9 Y3 N. b) b8 z  {$ S
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
& F( W2 y  B! `1 o  E0 I* {! I* x  Y/ H. T' p( X
3.回代过程:* p5 A$ K5 Y$ t9 D9 {$ j

1 J- }% E; C, h* @( b2 u; ]* l  O   % 回代, _/ m; Q3 X* W& C  Z5 ]  ?* q- Q
   x(n)=b(n)/a(n,n);
( ]' G! u( }# j. a- A   for i=n-1:-1:12 O0 L5 _8 Z$ Z/ v. |8 `4 O2 X' Y
       sum=0;/ \5 J; V& p5 E( f# W" O& V& k
       for j=i+1:n& S! Q9 `6 O# G: r7 W# G2 m/ z
           sum=sum+a(i,j)*x(j);7 J8 O/ R" j" ]+ [2 D* a
       end8 P) Y  |7 q; E4 p
       x(i)=(b(i)-sum)/a(i,i);( o* I4 g5 z. C* [# m" F- ~/ W
   end
) w! |" A5 J  I/ P( x
% W; O9 D% H; S4 {; P" H这个部分实现了回代过程,得到方程组的解向量 x。
7 K' e+ {) f* t6 |9 X! U. {- a) L; D$ x) N# v9 _2 l8 n: a
4.打印结果:4 K8 d0 y. i* }8 S) e

+ o0 P9 }% f& b- k' {3 q' ~   jie=x'
$ B5 Y4 f- j3 U0 Z9 N" a) K
0 ]+ C! L( D& s3 Z0 t最后,打印求解得到的解向量。
8 ]1 Q( o4 F3 z& ?0 H: O! i在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。: r% M5 _) e& S: ]) p4 H1 w* a

5 D- }3 x$ E$ S9 E% S7 z- K: |  ?8 @! s2 ]3 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-4-17 05:02 , Processed in 0.394229 second(s), 54 queries .

回顶部