QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:/ Y7 i1 x0 F* h# h+ n$ q0 J7 O

6 L6 f3 y7 c/ X' A" l9 F1.矩阵初始化:( Y! R9 H! v+ P; }' M8 x7 y' a
3 d; A) B" K% M7 W
   a1=[2,-2,5;2,3,1;-1,4,1];6 K. H0 J( R9 Y
   b=[6,13,3]';6 a+ W3 d* v" a% ^
   n=length(b); % 方程组大小为 n* D. f/ a5 G4 ~6 N9 {9 o! W. i1 f' s
   a=zeros(n,n+1);
! r3 L7 l$ x$ k0 ~# d( S  J9 C5 p   a(:,1:n)=a1;; I6 m! R! Z' b' n
   a(1:n,n+1)=b; % 增广矩阵- M; W$ m) ~6 e# r9 Y
; F  e) H# G9 m8 B
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
3 N( h: n# A8 S- q8 ?  {( {' N- T" Q1 t2 Y  _0 c
2.高斯消元过程:
' w; n3 T6 j2 q+ F- u( a
8 n5 V+ y: c5 Y1 u   for i=1:n-1
. b/ d7 g4 j5 m1 A/ o3 p& r- y       % 确保主对角线元素不为0/ \& I9 R: ?; L3 Q2 Y" W
       if(a(i:n,i)==0)+ O2 _2 `3 `0 i" M+ L4 k# D- q; y
          error('方程组没有唯一解'); 8 E3 G9 b' b/ T+ k! q2 [3 L
       end
2 _# d4 b' {# d* g! e4 b) R5 r- n. O       % 选取主对角线元素不为0的行2 o4 c, t! ^$ \% C2 e9 z. j
       for p=i:n  R& j+ Y1 G% U' w, q/ G
           if(a(p,i)~=0)
: N9 o$ K0 S; w6 l* J$ x               p;' x5 B, T8 q6 {( C
               break;
$ j+ C/ K' I3 X5 x           end
+ y3 U5 q& F  y/ ^3 P0 Y       end ! ?) i1 m/ U, |7 x: E2 t: H
       % 如果选取的行不是当前行,则交换两行) r6 o( z+ G2 r2 N$ J
       if(p~=i)8 R2 b5 j9 v# A$ j; O6 {8 d
         t=a(i,;& P! \. [9 w% v+ S3 K/ ?9 v
         a(i,=a(p,;# j" ?# A: O2 D5 }, M
         a(p,=t;* G& f3 y/ z/ u% T8 g; E9 i
       end
7 m2 B) G6 a# _' R; Z       % 高斯消元
6 r3 H' S( g, B% q  w& w: J       for j=i+1:n5 T. h, e# j( P7 O/ {) I
           a(j,i)=a(j,i)/a(i,i);
& {% I5 c8 B' \4 p# D4 S           a(j,=a(j,-a(j,i)*a(i,;
9 d# _) o  B2 R% B" d% p$ s       end
( M( u# d" G: H" D; X: u/ ~   end
- ^" C% M9 M' M( q) n   % 检查方程组是否有唯一解
2 Y4 I7 z, J% M/ \   if (a(n,n)==0)- B! J0 Z7 @& v" u
        error('方程组没有唯一解');
2 ?" G" p( p- Z' d% w   end$ s5 g" i2 ^' `" V9 s0 T, g- M. k
. P/ c; I* J9 Z. K1 r5 Z6 ~% l  W
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。2 U: N' Z8 J) v2 [4 ]7 T

; P5 o  i& S$ l/ \# ]3.回代过程:) ~, c. \% t: y: E! X# D

/ T% z1 P9 p4 ~# w( `* Y( A   % 回代
! {7 `! N7 Y$ E" I/ h& V7 b   x(n)=b(n)/a(n,n);
' C3 [; l" r) A1 q   for i=n-1:-1:1
  @! G; [( G6 _; {! o4 J5 t       sum=0;
! X' O$ g- l# u$ O       for j=i+1:n# a8 c4 Z. \6 W3 y- i( b
           sum=sum+a(i,j)*x(j);2 l# Z$ H) c* Y6 ]6 f
       end' S$ ]" Y0 r/ W- }. T
       x(i)=(b(i)-sum)/a(i,i);' b7 \3 l# Y! C. s5 B0 c# R& _; O) ?
   end  E1 m- V4 s& Q) `
3 M  p% R) A. D2 N! z" E+ `, b- {& O
这个部分实现了回代过程,得到方程组的解向量 x。
6 Q& Z4 \! }; |& v' }
$ w' _8 W' x) Z  ?2 a4.打印结果:
7 r1 b- m1 o( B1 M/ `# u$ n9 c7 C' X# m" l+ `4 o
   jie=x': `1 ^1 }; y. n7 Z

4 Q' \5 t8 Y) g* `/ O最后,打印求解得到的解向量。+ \1 D# s& R7 u& [9 r$ j3 Y3 H
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。5 }7 l! ?" _1 s" X, D! U  q+ ?) ]

3 d8 r- S! Y* B, o( Z( B+ x  O3 D& X6 C8 H2 b3 e( W

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-31 18:54 , Processed in 0.495082 second(s), 54 queries .

回顶部