QQ登录

只需要一步,快速开始

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

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

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

1171

主题

4

听众

2781

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:2 b* H8 E( J3 D& Y

2 G1 Y2 _" d% y: p8 Q1 m. E1.矩阵初始化:4 T/ k6 o9 r( r5 g( M

% r; T: [, w! N, N  S; E& Q   a1=[2,-2,5;2,3,1;-1,4,1];
3 d$ Z: c* s7 g+ P7 |7 u1 b7 i   b=[6,13,3]';. ~' R* M* m; I$ J( d& v9 l- E
   n=length(b); % 方程组大小为 n2 B9 c4 Q1 q4 o. B
   a=zeros(n,n+1);! e0 A- H% H) W# e7 Y
   a(:,1:n)=a1;1 |" k, e. a0 Z& w7 f# T4 R' v
   a(1:n,n+1)=b; % 增广矩阵, d3 b. s/ `( a5 \

& J( L8 T, T0 w% o- k4 k" ~2 L这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
& E$ m1 F" d& ]: R9 C: @8 o3 k% W, H3 Z3 p3 R! L7 _
2.高斯消元过程:; d6 o. V# A/ o) J
$ A9 x/ i+ e4 K9 H
   for i=1:n-1
8 ~- b4 R4 ^" X8 `1 C       % 确保主对角线元素不为0
) @+ `$ N; C0 _! F3 F# B       if(a(i:n,i)==0)
, y2 X1 J/ i( o, Q1 |) z          error('方程组没有唯一解'); ( x" Z* v7 j1 l' I
       end
7 F" p- Z) Z$ L$ `/ Z       % 选取主对角线元素不为0的行. v" K) I4 f+ i: O: G$ {3 R8 q2 a
       for p=i:n2 b7 |  l$ x( A3 \( Q0 q2 q& W
           if(a(p,i)~=0)' y- w% g4 g% {" s! q- }
               p;
7 K8 g0 k1 ?' C               break;" Z0 x. _% ^9 C; R! s
           end
' g' H4 J1 s: S8 j% @       end 5 x+ G( \3 Q0 s  }! i! F2 G
       % 如果选取的行不是当前行,则交换两行
1 l( e! c+ @+ U) q7 p       if(p~=i): S$ Z( [$ n) d. @0 {5 n5 {" f
         t=a(i,;, O  u4 Y  a. x% B- W5 b
         a(i,=a(p,;
+ t& A7 K1 A- c( L4 F& H3 }( ~         a(p,=t;
) b* _! I3 z. g9 h$ T       end
; v2 O8 p1 X( K9 V$ w8 S       % 高斯消元
0 d$ A- z* J! m; `       for j=i+1:n
2 j# D. F3 Z/ d* e' O8 d. W- @           a(j,i)=a(j,i)/a(i,i);& I9 e8 ]' Q2 v5 R- h( q* k" b- C
           a(j,=a(j,-a(j,i)*a(i,;
! q2 N( w  }- P5 y+ l+ B/ ^0 `       end  H- z5 o5 h6 N
   end- O& s; C& n* A# t
   % 检查方程组是否有唯一解
% q9 C4 e7 i8 b0 H1 {' ^   if (a(n,n)==0)
1 Y. U/ j% c7 y& k2 G( u        error('方程组没有唯一解');7 g; L# E/ a6 T7 L
   end- I5 d% k7 C4 f0 H: f* h
1 Y/ [$ Z  x' }* T3 r0 i3 }9 _
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
; l0 K  l. Z4 ?$ [# X6 M4 _; c8 g- }! F; Y
3.回代过程:
6 e4 }3 ^. I# \8 a
1 r6 A! q; @: \2 g1 P   % 回代
3 M0 i7 v, L6 R. s7 W   x(n)=b(n)/a(n,n);
6 O  s" _3 C( v5 n9 u" W   for i=n-1:-1:1& P- x2 g( M' H3 j0 T
       sum=0;  n% W# T' P! H5 i+ ~; m
       for j=i+1:n7 p* E6 j6 {' Q
           sum=sum+a(i,j)*x(j);
) D- W6 W6 r2 o0 K6 d' ]       end
2 G0 D0 f4 n) R) k) {* e6 |5 T       x(i)=(b(i)-sum)/a(i,i);
. q9 l1 A4 T$ M* O. p3 a7 X) K   end, I. C+ {" U+ F
- G% y# A4 J; w7 X- X2 z1 r
这个部分实现了回代过程,得到方程组的解向量 x。
% A  m' C7 i8 _1 y4 s' F' H' T5 H  M  W6 t1 T  `0 y
4.打印结果:, K1 n+ o- d; e! l: o% s# U; ~4 D
% F" ?4 x) i( U. d9 C, w; g
   jie=x'
, P; m/ {5 Q5 A, z% i2 P- t1 b/ d0 |+ k
最后,打印求解得到的解向量。# z0 ^$ j; o, U' X' f% E3 ~( ^
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。$ O( v* W( {0 `0 K1 W0 f
- E) O- _7 r! u5 ]) f& r
1 T; ^$ H- W$ D" P6 r- g8 }9 i

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, 2025-6-26 13:09 , Processed in 2.373028 second(s), 54 queries .

回顶部