QQ登录

只需要一步,快速开始

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

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

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
% q2 t  A' w. d
! }, B7 Y4 G+ V1.矩阵初始化:
, j- a6 v; V  |9 i' \* g
, M- s4 q- S  t6 |   a1=[2,-2,5;2,3,1;-1,4,1];
' u3 @4 \+ X5 R$ F   b=[6,13,3]';. `$ ]' O1 H) P) h' ?4 w2 E
   n=length(b); % 方程组大小为 n
% }0 ]: j, Q+ O& f   a=zeros(n,n+1);# _; M) x* _) f- \9 h5 j
   a(:,1:n)=a1;) O6 r: N( q2 }8 M' \# L
   a(1:n,n+1)=b; % 增广矩阵" i& q! ]0 t7 X+ w# t2 k
/ V5 X: N/ e  ?$ f9 X  u! h
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
& |6 n" P3 A: x  @2 d$ e5 w
/ D2 n9 ?5 u' a2 r3 J2.高斯消元过程:$ D5 A5 R7 {& E! V4 n, P; T5 D

# w1 U% o! |2 ~! o+ G) F: ^   for i=1:n-1
* f+ a6 [; ^8 w' y% W       % 确保主对角线元素不为0
# A% f" Q$ l, |8 j       if(a(i:n,i)==0): E" d+ o% H+ X0 U: a
          error('方程组没有唯一解'); , e% s, [4 u9 f: M
       end6 I8 M1 z3 V9 m) t- x4 s" u5 X
       % 选取主对角线元素不为0的行3 J+ [0 i/ H; Z+ @; N; C
       for p=i:n
3 n, D9 X9 y  j* B           if(a(p,i)~=0)
! n& l* R' H5 T8 F  m               p;
& g% w: X$ T7 T  [! R6 s               break;
5 S: m$ [% y4 p0 i8 Z+ C           end" i' v% c5 Q2 C3 x, o+ i+ m/ Z
       end
! n$ Z, [5 |9 K* F: }( _# S       % 如果选取的行不是当前行,则交换两行
  ?) `8 X) ^  E& D( K1 \4 k" C) k6 v       if(p~=i)8 r9 |. s7 W' p+ d( W, O; G% m
         t=a(i,;
' ^5 [% Y" u# M2 P, i2 h         a(i,=a(p,;
$ \! c& v9 Q6 N         a(p,=t;
" e5 |; r  p% o       end
) Y4 G' v9 w  Y" ~       % 高斯消元; D! V. R# a7 P
       for j=i+1:n% v/ T$ J" E+ o
           a(j,i)=a(j,i)/a(i,i);
5 l8 C) b, ?* H/ |           a(j,=a(j,-a(j,i)*a(i,;
% q! |/ _7 @% L: e       end4 P+ E* q* W; ~) X# r- Q
   end
; o* x1 G, T' t! I5 P, a! ~) @   % 检查方程组是否有唯一解
& _0 m0 L- q8 V6 G' M   if (a(n,n)==0)7 p% P8 n3 a/ m1 k6 V
        error('方程组没有唯一解');
* I2 C- z3 x7 Y. s. l6 k: K   end& Z& c. P8 B0 [1 k3 V

* c2 ?# J. o2 E9 I+ @2 |$ O这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。, [: F0 Q/ H/ z; j( M5 G* Q
. N; d3 {7 W. A9 u; O/ x2 `
3.回代过程:
. ]/ ?/ t; m$ n, i) \( @3 ]( g* Z$ `4 g' l' B5 T- D8 s
   % 回代% u3 w4 u2 C; `2 k# e
   x(n)=b(n)/a(n,n);- q* [3 j7 C: x, V) @
   for i=n-1:-1:1" F% Z# E/ O9 `5 e% O- L* }
       sum=0;$ S! n3 |4 A( g* j6 A
       for j=i+1:n
5 x: c) U5 C/ y( d# S3 u           sum=sum+a(i,j)*x(j);
. y3 G# F* z$ v8 l       end
0 x* U2 b' `9 @3 L; b6 k: N       x(i)=(b(i)-sum)/a(i,i);! C# h6 |4 u( x( t/ O
   end
# a/ r5 L# Q( M. [" d& G
7 n9 `. B1 Z& p( M2 I4 I这个部分实现了回代过程,得到方程组的解向量 x。
2 f3 D3 `% v) W: s/ `" ?) j- n( d5 _9 r
4.打印结果:" K' v6 s, Y, O: M4 }& J
2 x* W6 J3 Y: h
   jie=x'* H8 B( M  H, Q2 ?& }: C7 j3 s$ P
6 W4 F$ l: i- q! X
最后,打印求解得到的解向量。; ]. s  y5 Z4 @# D
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
% e9 n+ u  G3 d2 ~( D- Y4 V
2 V1 m) J, I7 r6 B
& F, p- r* h: o0 ^

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-8-25 22:06 , Processed in 0.563135 second(s), 55 queries .

回顶部