QQ登录

只需要一步,快速开始

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

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

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

1171

主题

4

听众

2781

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
" `7 V- m- k$ x1 V3 L1 r4 l, J
2 x7 u9 T- x& m- ^* Z. a! R, G/ [1.矩阵初始化:
, X( f) I/ S( t+ P) Q- k% ~
* U$ _' |& W; N; x4 A   a1=[2,-2,5;2,3,1;-1,4,1];
# k3 H2 d# A4 T6 f   b=[6,13,3]';1 r8 n$ S8 \  ^- [5 P6 t. n, L
   n=length(b); % 方程组大小为 n
1 P" e: e) }. J. A3 u4 G   a=zeros(n,n+1);
& v0 M( J6 p: p) z# _   a(:,1:n)=a1;
5 k2 A9 ^; m' l2 J9 r$ u5 b   a(1:n,n+1)=b; % 增广矩阵3 K9 h$ y' s3 }1 D
/ S9 S: [, Y  U* D2 N# X
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
' v7 A& q/ W( L
: j# q4 X4 w; U- K! _2.高斯消元过程:
* L) h$ P$ O$ K. q& B
6 S7 o) |* N/ j' J( b) e   for i=1:n-1
4 z2 O6 `- T0 J% d7 Q       % 确保主对角线元素不为0& _; J" C2 i! m1 t" g
       if(a(i:n,i)==0)
  X, f7 O6 u* ~% J) \! P% r" |9 L! W          error('方程组没有唯一解'); " G8 J. o- R* c) {
       end
5 x/ o+ ]  H% j. y# g8 j       % 选取主对角线元素不为0的行1 }& y+ P6 J0 D$ t( L. f( L$ g
       for p=i:n
! w0 N" P! R/ N: }$ I# J           if(a(p,i)~=0)+ f; e7 r' ?6 u5 N4 ~; f
               p;
# {! Z  I( ~# Z  `# J+ p               break;
( t/ i' q+ z, ]& i  ]           end
% M  e5 q# A+ F7 M       end / p- E& b5 |5 [4 d( e
       % 如果选取的行不是当前行,则交换两行/ V- R' O. s5 N7 j  j
       if(p~=i)7 J% o1 }7 d, `7 N4 @
         t=a(i,;
: [7 f5 T4 ]0 j1 V* |         a(i,=a(p,;
0 f4 h7 C) P! f4 |9 `- h         a(p,=t;
9 t' Q5 E- @, r4 Y& W9 x: U; d       end( |- N1 M3 p( |( C6 b9 V" `$ z" q
       % 高斯消元9 j% k) Y! c0 O6 T3 ~7 i; J3 Z
       for j=i+1:n1 u2 d& P, D/ L0 q: o
           a(j,i)=a(j,i)/a(i,i);
- p6 M' k/ @, h) g           a(j,=a(j,-a(j,i)*a(i,;; ?( j) q! g  A. ^/ \+ [9 P5 }5 `
       end
, i+ `1 m. s: G% ?8 Y+ x   end
$ e$ t; p5 N7 W2 [0 w9 q- e   % 检查方程组是否有唯一解
  `+ p6 o7 b4 n* \  M4 A& v   if (a(n,n)==0)
% k$ O$ {/ f- I6 ]. j' A3 }        error('方程组没有唯一解');
8 w/ `. J7 E6 q2 F! c   end
( U' i4 T% g4 }1 I  g2 z! w( k% P, g. {
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。: H8 \1 J. x; h; X4 \
) S7 w8 y/ Z, }8 T
3.回代过程:. U6 ?' e( }) {# ^1 z1 T
2 i  X' u( ^' N. `8 t% y
   % 回代
$ e3 {) \: G3 Z/ z4 P! z7 A9 j   x(n)=b(n)/a(n,n);
0 J$ ~0 W$ r; E( w: N+ Q- _' k   for i=n-1:-1:18 K3 [, ^5 M1 Z! [/ C8 ~
       sum=0;  \4 @$ r( ^$ Z2 J9 {9 U
       for j=i+1:n
! L0 K3 i0 L% B7 D& Y. m           sum=sum+a(i,j)*x(j);
# w/ c- t5 v& u) ?) Z- z8 {" R9 T       end# W; ^7 D' K* G  J# z
       x(i)=(b(i)-sum)/a(i,i);
, R. q& N! W. r* z   end0 M  V# O* d3 M$ O( B- t
& O! j7 p; m7 L
这个部分实现了回代过程,得到方程组的解向量 x。
+ ~/ Y- c: |6 h! ~, T$ i8 e
6 V: N3 h1 @8 V4.打印结果:! K( t2 F- i( t0 j% B) V# k
6 |: H5 [3 `2 w+ ?! w/ y
   jie=x'2 r+ d* W1 P1 p. n

# [% D/ q" m9 X4 X" S+ c最后,打印求解得到的解向量。' \2 F& ^( E- u& h1 f, \4 g' x
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
& r6 h0 s& R; D( D. S& L! {$ y
- }9 s% ~' u. x, ?5 u- [/ L
" ~& [! L9 w' l$ d5 a; m

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-25 01:16 , Processed in 0.488077 second(s), 54 queries .

回顶部