QQ登录

只需要一步,快速开始

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

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

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

1171

主题

4

听众

2781

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
3 ~0 U( N4 m. o/ d( h2 y
0 Z" j1 v/ j5 K$ V1.矩阵初始化:
' P9 E: u9 U+ f3 k4 @' {5 X9 ?( `; y4 `9 E" n' o, f9 j
   a1=[2,-2,5;2,3,1;-1,4,1];
+ y# F  Q8 ^; h5 R5 h   b=[6,13,3]';8 _7 {+ i6 {# y& T7 T% I
   n=length(b); % 方程组大小为 n
6 m2 k9 s: P3 e+ S3 E2 X! y3 ?   a=zeros(n,n+1);3 `* i- D& _- I4 n
   a(:,1:n)=a1;
. u( H3 V3 U4 B, n. E: W   a(1:n,n+1)=b; % 增广矩阵
9 v9 ]4 H1 c5 P3 }& h' Z5 H) W: J1 Y" H- p8 J% j; v
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。6 R) D7 V* |$ s1 F) Y' s: ~

3 K: y2 V+ E6 E  p: i' ]2.高斯消元过程:
6 B0 w, q5 N+ j3 O& h: E, y  N8 u2 C
   for i=1:n-1; e) _* b+ ]: j$ I4 l. Z, r7 Q
       % 确保主对角线元素不为0
" j% x2 D( |' q4 G, _8 c& U       if(a(i:n,i)==0)5 y, U  i; K# P. h: F
          error('方程组没有唯一解');
5 h; k/ q" H- m8 S0 @* F5 L       end# C8 ?' l0 e! Y' ]+ t
       % 选取主对角线元素不为0的行& l6 _! j  H* \1 b
       for p=i:n  l4 j1 e, q. d- F2 c
           if(a(p,i)~=0); p7 ]: h# o$ S6 J5 e1 I% h
               p;
4 q  j) l: i1 Q4 ]               break;
! e2 C7 A# h6 S8 k! ^           end
; l$ o# h7 c6 k       end ( T2 t, b$ s# }# r& ~- H
       % 如果选取的行不是当前行,则交换两行- ]8 ~6 Q9 Y$ E9 W' z0 r5 T
       if(p~=i)
( i+ j& g; n8 U0 f0 `         t=a(i,;2 j+ h8 g: _( ?
         a(i,=a(p,;# ?! K' s+ C! K- ^% j
         a(p,=t;% v3 f; K2 _% ?# W" w
       end( _+ z( j' x, g& |) J
       % 高斯消元
3 Q$ A' `3 a% B0 m8 Q       for j=i+1:n  e) m9 {/ a+ x7 L
           a(j,i)=a(j,i)/a(i,i);
6 H" R# h7 _. A           a(j,=a(j,-a(j,i)*a(i,;0 Z5 d7 w% f( Z; h( \3 C
       end3 n, N6 N. S- e1 S% m8 [
   end
4 q1 Y7 R/ [, Q+ v8 o' T/ O8 o0 Z   % 检查方程组是否有唯一解  a3 a. R! b+ f1 d" Q
   if (a(n,n)==0)3 d. V1 W+ M/ F2 \" @& y; R
        error('方程组没有唯一解');
; \% v; F1 L' Y0 N   end
& p" K  r$ C: e* Z. |9 j& ?- S/ t4 V2 z% R
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
% S' A- m* g6 ]3 h# [6 g( {1 X& ^+ C  _3 K
3.回代过程:" \6 f9 a6 v- B1 B1 I+ ~

5 |0 _- y. J. L2 F3 t9 z9 ?   % 回代
2 T( t4 y: n! A2 C% L   x(n)=b(n)/a(n,n);
6 G/ H! j- n* D5 _2 C) `- l   for i=n-1:-1:1
  p& M% Y$ h! }( `0 {       sum=0;1 n  D7 n  D( `7 E
       for j=i+1:n
  y  c4 S: T9 F6 {) z           sum=sum+a(i,j)*x(j);8 t; ]) W* Q4 a: ~# G* \
       end: t4 Q7 {$ R3 q; r* T& c, p
       x(i)=(b(i)-sum)/a(i,i);# O/ W" W* \$ O$ r. n  d
   end
( x% L" q& R& z+ d8 v$ \# k) Y; Z9 H( L" i6 o* I
这个部分实现了回代过程,得到方程组的解向量 x。- T; ?) o0 Z5 j
  Q' d" I, `/ `) C4 ^$ ^
4.打印结果:4 ~; b% t) H. b0 L. N. a
) t$ A* i) k$ _# U% W  ^: l
   jie=x'2 _& W( p% E3 O" L
8 `- j0 I1 B' Y! J/ i& ~0 @
最后,打印求解得到的解向量。
$ B) c# I" Q/ P在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
; E/ Z8 d7 o$ Y2 h# X8 g; |
5 M7 i# Y6 E+ x( p% v$ G
# F+ q9 A4 U9 ^' [

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-24 20:30 , Processed in 0.474456 second(s), 54 queries .

回顶部