QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |正序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
) v  u. i( [8 w) A3 x$ Q* y1 J2 e. ^
1.矩阵初始化:$ f& n. z! }, n3 F  M9 Q

( J) Q+ ~! H! N1 \   a1=[2,-2,5;2,3,1;-1,4,1];, J; q6 o4 e) i* G. R
   b=[6,13,3]';2 s; [! b; z- X+ `
   n=length(b); % 方程组大小为 n
" g+ [$ a3 p% d! U/ p; D' N2 Y   a=zeros(n,n+1);. ^' ?; ^6 i7 e/ L) u% l9 a
   a(:,1:n)=a1;
- |; x2 r1 N% C0 p. X9 r$ a/ S# v   a(1:n,n+1)=b; % 增广矩阵
$ Q1 J& y0 \, e$ _$ r/ T/ K( b- Y- ]8 I. i
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
# n( d1 N3 \8 b+ m# O/ }$ ^8 w7 j' N: r1 U
2.高斯消元过程:8 s3 |3 \1 z8 r, Y

% O, M8 Z0 W0 R: B" f& M   for i=1:n-1& y) {( P- J5 C8 F0 j5 J8 v1 o
       % 确保主对角线元素不为0
# j/ M& K( _8 M1 J0 R7 D" L       if(a(i:n,i)==0)
1 M- m' n6 s/ H  t+ F          error('方程组没有唯一解');
/ a0 H' d- B4 N$ G3 P       end
, l9 M6 l- j  l: _" k% P       % 选取主对角线元素不为0的行, _$ Z5 q3 K/ |  _4 \( I
       for p=i:n  l& T$ p' f9 ]* y5 W6 {" V
           if(a(p,i)~=0)5 D( Q. {: W: Z# h. h4 i: d5 M
               p;( N- `( E7 M/ G4 _1 G* r
               break;2 e+ A( m+ M1 v# O/ q( D( l( V1 s
           end
& n0 l8 `# [9 H$ q# F       end 0 ~" H$ ]" \4 Q* l5 N2 x
       % 如果选取的行不是当前行,则交换两行
- H: M& ^) Z/ V: r: m/ b       if(p~=i)' _% X! D' }# a+ J  }' B0 ]9 T
         t=a(i,;
5 a3 c- r2 \! o3 {& l. g         a(i,=a(p,;
0 J4 v9 t. \. G         a(p,=t;
6 ^( V  j: c6 q6 f       end5 O5 M/ W5 t0 v' |8 d
       % 高斯消元
9 u% D3 c0 h& n, }* s8 Z$ i2 c       for j=i+1:n
6 R* n& i, S: f4 x7 p5 j           a(j,i)=a(j,i)/a(i,i);
" w0 K" Z$ u+ q* ~           a(j,=a(j,-a(j,i)*a(i,;  \6 K" K6 {' c4 ]& U/ Y. D$ l
       end
% ~- D1 j: \% W+ D1 P. D, I   end5 n  e; ?; {7 U0 _  j
   % 检查方程组是否有唯一解
& B3 V$ X7 r* s; p, @8 f9 Q   if (a(n,n)==0)
3 s- ~) x  }% Z9 S+ P1 t- A        error('方程组没有唯一解');
. T* ^3 f8 o% }* l: X8 `   end7 v+ b3 Y0 g/ u! R

0 q" u& o5 d: D9 X/ m: e6 U这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
; K( |. E/ s: [& _
' q9 r% s5 A+ }3.回代过程:, n2 S6 p& `! ]! j
/ G! K6 O  u; @& z
   % 回代
+ V7 X2 t. y8 q$ V' c   x(n)=b(n)/a(n,n);1 C) R, ~/ t! d) \. \
   for i=n-1:-1:1
$ _5 V; r# N" x7 O" {       sum=0;
0 b6 ?& k( E- D% }. v  Y# m, [: Y/ q       for j=i+1:n
" n3 ^6 n% s+ g           sum=sum+a(i,j)*x(j);
! c, b% g& i5 w8 y/ l$ r+ M. w       end) n3 z. q# F( _% [* k' \5 F
       x(i)=(b(i)-sum)/a(i,i);
. M# k( H6 ]7 ~: i3 `+ }8 M   end5 n' b- g: _$ @) u4 ]2 H' i
7 d  G0 H( s/ e$ \
这个部分实现了回代过程,得到方程组的解向量 x。
4 ]* [1 V; W# G+ @5 v1 ]; L$ P0 Z& X' t: p" Z2 j
4.打印结果:
: V+ F0 c% s; ^6 t0 |% j# P0 U* y& Q: C3 `1 u# v
   jie=x'
+ V( ]; ^" ?7 B: ?
6 O+ o: _9 H/ z最后,打印求解得到的解向量。; {- d. `* M6 c$ `) [$ F6 w( N
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。* s; p' X* v& G) C: V: [+ W
7 D) C) Z" T- T

! h9 j7 A7 d  U( W! X' [( ~9 ]4 `

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-31 14:36 , Processed in 0.512900 second(s), 55 queries .

回顶部