QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
/ H3 R, [3 X) Y
# P. A, r* W& n% x( \7 ]1.矩阵初始化:/ A5 ?6 f# k1 j' p

- f3 ~1 g" h9 r$ f, b  Q! z4 g0 m   a1=[2,-2,5;2,3,1;-1,4,1];
+ j5 D- @+ l' C, F   b=[6,13,3]';7 b2 J% d1 y% E
   n=length(b); % 方程组大小为 n# T# C0 V- v5 }
   a=zeros(n,n+1);
4 z. M0 o9 s0 A9 w   a(:,1:n)=a1;
6 X/ k5 D  X# ~; w0 u  n- @   a(1:n,n+1)=b; % 增广矩阵* E) Y5 k# R/ P. h, `$ L% D

, U# m! M2 d. T2 U3 i+ V6 {$ {这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。. ?; x8 b* F5 E+ j$ j% [7 F, i
+ u7 s7 S1 m6 o) z
2.高斯消元过程:
! D1 e( M+ x, q0 U5 h) ^0 ~( k7 B5 e& B2 w) P0 T/ D% @" e
   for i=1:n-1
; N$ D5 r/ ]- c  k3 Z5 V7 Q; u; I       % 确保主对角线元素不为0
6 X0 E: X  n) j+ G/ v       if(a(i:n,i)==0)  `3 L- U+ o! {1 D- V0 ?6 [
          error('方程组没有唯一解'); " l4 i# h) ^  w0 x! d( s
       end
; c& W5 ]/ ~, f6 a& q       % 选取主对角线元素不为0的行- Q. Q  U8 _% l2 \5 |. b* ?
       for p=i:n& H8 u2 a2 u; H, u
           if(a(p,i)~=0)
) s1 M( M/ N* |* H* }9 Q3 j- s               p;
" H  b& f7 P* r) ^6 N; n               break;' L1 u6 P, ^. n% b9 L2 Z! V( s$ J
           end
" G% a; p1 V2 T/ K3 f       end ' z5 ?, P+ R  @& @! Z1 _9 h0 Q
       % 如果选取的行不是当前行,则交换两行
/ D% J; q2 a7 C4 p2 A9 f; a* N       if(p~=i)
9 G  n4 @( N3 N% Q* C         t=a(i,;9 A3 {7 |/ W8 R
         a(i,=a(p,;$ W0 e- A3 k2 o/ l: ~' g
         a(p,=t;& K7 d6 H0 {) k( t  x3 s" ?/ u
       end! s9 Q! k) G/ d. M; I3 }
       % 高斯消元
, n8 p( H7 k& d' S& ?. W7 N& S( z# Y       for j=i+1:n
0 C1 V$ y) f, M; M  s           a(j,i)=a(j,i)/a(i,i);
0 \  e. }# ^2 k9 k1 {+ k- w           a(j,=a(j,-a(j,i)*a(i,;
9 a* z  z' {8 [* |6 V( `# d       end& c( |: H- H% E7 E, D
   end
0 {4 A3 u8 G4 F4 A4 ?   % 检查方程组是否有唯一解$ i: b! H% H% \
   if (a(n,n)==0)
4 I" r, _' D, e) p8 x        error('方程组没有唯一解');! H8 _) W' m4 Z
   end8 G9 j$ C/ W$ S& ~3 b5 ?' z

+ s1 Z6 i# Q2 V& t( {9 V这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。8 G- J7 u4 `3 B  S
4 {2 C% w# T1 O. v' y5 h- A, w' D9 D
3.回代过程:
4 R. `, J+ D: d6 J& m
3 h0 r& j- p1 }3 b   % 回代
) v- G5 J0 @9 B& ]   x(n)=b(n)/a(n,n);
! J1 D  T9 _( e2 @( h1 a4 P   for i=n-1:-1:1
9 [0 x/ H2 l2 K" T) [       sum=0;
' w2 ~! s6 }5 ~3 F; A, `- Q4 w4 O       for j=i+1:n
& l9 t, ?1 u2 k6 H5 p+ l7 C           sum=sum+a(i,j)*x(j);
. x+ T# w1 C- O- |       end
* U# c& M/ J% n8 E7 a       x(i)=(b(i)-sum)/a(i,i);5 }! V( G/ q! }, T- T9 a+ I3 k0 A- h
   end
9 B( ^1 U" y7 a: E
4 W' g7 y4 W$ d, e. w1 {这个部分实现了回代过程,得到方程组的解向量 x。
# T6 E. O2 I) J! [8 L9 v" N
5 x% g" t* k0 a( b3 H7 J4.打印结果:
! S% D0 c2 P6 N* Y5 y9 o5 {  u3 ]8 @5 {8 ?! H
   jie=x'
* L% H3 F7 n4 Z+ ^' J; b
6 U& x& j9 @( g最后,打印求解得到的解向量。
3 K: v1 |* H3 j+ K) ]" U' @% y" K在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
& {$ K( c7 }' h2 V! ?9 k. D5 c
2 C2 C' C- j6 v: Z
. D& R. f: y" q. n0 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-7-10 08:03 , Processed in 0.758253 second(s), 54 queries .

回顶部