QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
0 X/ D4 O0 \, @) \; x6 L! j" b& v' f1 ^' f7 E: F* ?0 ]
1.矩阵初始化:4 Q: ]+ ~  a* g! A3 @

- z  R( y- n% h% Q1 _   a1=[2,-2,5;2,3,1;-1,4,1];8 w* F- E/ s* s7 H. W
   b=[6,13,3]';' |$ Z" I: N1 j, e
   n=length(b); % 方程组大小为 n
# f. S* x" W' }$ I; p% `2 y5 X   a=zeros(n,n+1);; ~3 O) ]0 N& R$ y
   a(:,1:n)=a1;
/ D6 u/ _$ y3 P   a(1:n,n+1)=b; % 增广矩阵
  c3 J. v3 V& c. l) C5 R( H) @" H/ m/ J: {) b% w! E
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。# v9 R& N0 Z; Y- P' B1 V
9 J* x! _& r" I, ^2 Y
2.高斯消元过程:
. Q: _. R) |; I9 n7 C$ p' k$ v2 K& _" J' _, r
   for i=1:n-1. V% ?/ K$ v2 J" Q* \! r
       % 确保主对角线元素不为0+ E  X1 Z, a5 ?) n9 |1 v7 _
       if(a(i:n,i)==0). L8 S" y1 L; O( {, a; }4 s
          error('方程组没有唯一解'); 8 v: ?4 P9 d. N
       end2 p: R4 p& E# B/ b, S# R7 u* q
       % 选取主对角线元素不为0的行- e; g7 P; x3 F$ @# O: z
       for p=i:n
: b$ O; [8 w6 K, E, T  \           if(a(p,i)~=0)
8 G9 d8 [3 [% d7 G3 A               p;
* d3 W, z: F* F0 R( V' o# p# }               break;
8 \1 F7 P( ~! ]  {+ k3 s           end6 X9 L, t2 b  i4 H; M2 r: M" w/ B
       end . e, l% Y/ K: ~. {$ u9 [; f/ o
       % 如果选取的行不是当前行,则交换两行  q- ~, ]0 _) {4 O" ~
       if(p~=i)0 @2 p/ J  Y, v8 P/ @3 y' F. T
         t=a(i,;$ t2 e6 w9 F* w1 O% i& a
         a(i,=a(p,;( k3 x0 Z1 I5 A+ [$ q. C
         a(p,=t;
! v: I1 ^0 J/ [+ \       end
7 y- |2 B5 ^; M2 B9 C0 N, S4 f       % 高斯消元; v$ J/ R2 Q( `$ [
       for j=i+1:n
7 i: p: r7 ^2 g8 P" c0 z3 e           a(j,i)=a(j,i)/a(i,i);
4 ^* W8 H6 r1 b% @2 s           a(j,=a(j,-a(j,i)*a(i,;; v7 {& H' M0 W9 g9 L2 E
       end+ ^. p9 X; \7 C0 d8 W( I% i% `7 `
   end
5 Q/ l5 u! g. U2 ~7 r. C$ u   % 检查方程组是否有唯一解/ s' V- q# U6 B  m6 `
   if (a(n,n)==0)" W  ?& _: Q) _" f* q) O* N
        error('方程组没有唯一解');
8 r0 X0 v+ R0 Q6 m   end  f& M2 Y/ J; N+ i' p( V  Q: L
, F3 ]/ o& U0 d' J! I' f. J: x
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。9 X! h) F9 w' P" d8 j
% L* H1 p' U" S! f1 i
3.回代过程:
* c- I* {* o  Q) X: ?  z
# w; x$ a3 e7 \5 P$ ?+ n   % 回代% i; [" f6 P, J- n1 h' V
   x(n)=b(n)/a(n,n);
! C+ D7 w* g: e% C% R   for i=n-1:-1:1
0 l6 \/ L" k9 G$ @3 K4 p       sum=0;
$ p9 b3 K- S% P4 o) J+ R+ L       for j=i+1:n4 M$ j0 g1 Y: {
           sum=sum+a(i,j)*x(j);
* j& a2 V5 j, a7 s* A) I       end( c6 ~5 h% ~4 y' H& B
       x(i)=(b(i)-sum)/a(i,i);
8 H) k9 [% `! [   end
, x: x2 P  e7 @6 ^7 _( G
  v" R# |+ d7 A2 u$ l这个部分实现了回代过程,得到方程组的解向量 x。+ B% M  Q8 R! O; m7 y4 `
) v+ k/ V5 l+ X0 i+ |/ K+ Z* N( o
4.打印结果:
* u5 G/ n+ m+ x  m" i) [% g! c$ B2 r6 S( ?# d
   jie=x'
; T. j& ~, H# s! k. ?! e9 L& u' D7 f% _' v2 J5 a8 c# g) l; c
最后,打印求解得到的解向量。
. @9 X2 o. y4 T* {在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
* x! {6 @( [- ?
2 w+ u: r, n: V# d
2 L) K( e2 B; q7 N0 W5 A

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-14 01:18 , Processed in 0.320150 second(s), 57 queries .

回顶部