QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:# _4 ~4 y' d4 V" D4 Z

! F. b* M% q  H6 R9 d1.矩阵初始化:1 r" o) w( q: u
# T( P3 @  f' w. ^2 p
   a1=[2,-2,5;2,3,1;-1,4,1];
- _% c4 h2 Q' r) l   b=[6,13,3]';5 v4 ]' k8 R8 y2 v0 O+ i9 X/ F" R, m% D
   n=length(b); % 方程组大小为 n
' @2 d( O8 O# Z$ }# L4 R   a=zeros(n,n+1);" t  {% b* ]+ J  ^/ ]
   a(:,1:n)=a1;! L; T( P' j" C/ Y
   a(1:n,n+1)=b; % 增广矩阵
% g( i7 W1 X% W; ~5 ~8 J  t$ f
8 N, h" w/ O; G/ `# u4 Z5 T6 A这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
( @/ \( N# D1 m6 a, A+ z' L9 m( g: c2 D3 ~7 U% \) X; [+ B
2.高斯消元过程:, M" x  i- I% U) X3 E# p* k
- V, j# Z) c: N7 Q
   for i=1:n-1
4 a2 a3 O5 ]1 b  U4 L       % 确保主对角线元素不为0
& c1 o( q% W3 `: V* ]5 A1 i' Y       if(a(i:n,i)==0)
% F& r$ ]. t& J% f. s4 p4 D          error('方程组没有唯一解');
/ A) O  H5 g4 b* X4 i- c1 G/ Z       end
2 j+ X6 E% R+ [2 Z% C( q, m7 B       % 选取主对角线元素不为0的行+ {. H! o% {4 F& T$ \- L
       for p=i:n6 s% |8 n3 {+ V( V2 z2 B  f+ u
           if(a(p,i)~=0)
3 C* w: j' W5 E! R3 S               p;
; L- o3 @0 o! a% ^% x! k               break;
& ]1 r" W  ^) E' {           end
& s3 y! f. A( S) a+ s0 v       end
( u) F6 r" i5 R5 N# q/ D6 t3 ^3 \5 c* F       % 如果选取的行不是当前行,则交换两行
; o5 i: P7 X0 p  U7 \, v       if(p~=i)# D, F+ M: d; U, u( }5 l
         t=a(i,;
; F+ u* p3 W" O' K' j) y         a(i,=a(p,;4 @$ }& J) l0 @* \
         a(p,=t;
& `, b" e+ j5 \4 p       end
: F3 \! G( a- S' Q; w       % 高斯消元% N' o: U# M( [% L
       for j=i+1:n
' H2 [% d! t" K           a(j,i)=a(j,i)/a(i,i);4 W5 c8 f, H4 K9 S/ X% }
           a(j,=a(j,-a(j,i)*a(i,;
/ p% h+ B4 t0 [) r! ]       end
7 J! B9 V& z# E* {2 D1 C   end
# d3 c4 U9 @% T. {4 i   % 检查方程组是否有唯一解
1 v) \$ B9 W/ P3 J  W   if (a(n,n)==0)6 M8 f- U& P6 x" N& Z
        error('方程组没有唯一解');
: Y2 X4 {* c6 o( M: h6 K+ ]   end) Q5 x4 T$ Y9 q+ @
5 q4 ?6 Z6 G/ {0 x! l7 d
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。9 ]1 |6 p! S! `6 V

; ]6 N0 E+ e4 U% b3.回代过程:
8 M4 |3 a' K* o) v) J4 H! _
' ^& e/ R; N' k; P5 @* H3 f4 X  C: p   % 回代6 B! `4 Q/ |1 a" Q% _
   x(n)=b(n)/a(n,n);1 m9 P6 L' T1 }( r6 Q2 Q1 g( Y
   for i=n-1:-1:1! C7 p" [6 F9 j
       sum=0;! {' D; d  M" A  s2 I
       for j=i+1:n+ P$ a' R! H% f% e' T7 O8 e
           sum=sum+a(i,j)*x(j);
8 s4 k/ r( |* ^% i       end
: ^- f, K, ~( ?, L$ B! f       x(i)=(b(i)-sum)/a(i,i);
7 i1 f: u# {, i- C! i   end
( R: }9 d- j( w& i
- o2 B  a! M! K$ C# }这个部分实现了回代过程,得到方程组的解向量 x。
7 l( }7 x6 s9 }8 r7 M, A9 G) }
" b# H7 U; }4 J* @' s4.打印结果:
9 o; ~7 D1 N) c# s1 D, U* r4 ^8 l; L8 f" b6 ?* R: Y
   jie=x'
5 q: M# l* l! g1 u
* J! f2 ^& ^4 d; N/ U最后,打印求解得到的解向量。9 Z8 B0 @5 G1 {
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
% p1 R, H: s1 R) K* V) t7 J
7 [7 X+ h( l! x6 t" o3 D$ [. [: w! z5 c5 y6 t9 B3 `

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:49 , Processed in 0.613552 second(s), 55 queries .

回顶部