QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2923

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:) E1 t2 K3 x5 P0 k

( V+ x3 \9 [1 j( J. ]8 n1 Y1.矩阵初始化:
5 l2 E7 k1 G# Q
3 q* G. d9 B4 v8 }) d1 I4 q& x   a1=[2,-2,5;2,3,1;-1,4,1];
! w5 p$ Y$ _( X! r& s9 p   b=[6,13,3]';( [3 {- F# t7 O
   n=length(b); % 方程组大小为 n
2 b6 @+ ~- z  C3 {   a=zeros(n,n+1);
7 W  P' _$ h2 S5 y   a(:,1:n)=a1;  ^- a" e( G& g9 B* Y; Y' K  p
   a(1:n,n+1)=b; % 增广矩阵; ~. w9 d9 p4 M0 U8 b% u$ l
4 Z* w  h4 o& _1 s: v8 W- b( ]2 s
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
  t9 Z& Z& g0 {
* n4 I8 I% k1 F; f: A) P* n2.高斯消元过程:8 C9 S6 Y$ O9 N4 h

+ ?: }: ?: a; x1 V: \( R3 M: P: Y   for i=1:n-1* a* K. H& n7 ]$ G9 ~
       % 确保主对角线元素不为0
) N- Y# V8 t0 d. h" A1 S       if(a(i:n,i)==0)
7 g  b$ ^- D# U          error('方程组没有唯一解'); , [$ ~4 Z/ ^+ J, G% h
       end9 C  L: x% @9 I9 M% _' a0 ?
       % 选取主对角线元素不为0的行
* o4 f! j8 l" b, U! c) H6 R       for p=i:n
" f# r6 A9 D3 ~1 k. f           if(a(p,i)~=0)
4 A* l4 d7 r: k8 i               p;
. X; `4 l. @+ [+ }% k               break;
4 s/ F. z0 K- O  Y& e           end& @: c6 H% a0 s6 q5 I9 n1 c$ F7 K
       end ! t: Z( O  f! v- \
       % 如果选取的行不是当前行,则交换两行  ^6 n# `& P* ?
       if(p~=i)6 k" A- r/ O/ ?, l8 p, E
         t=a(i,;7 k5 U* Z/ R2 J4 j) W0 W
         a(i,=a(p,;
: `7 a* e7 ^( _  m         a(p,=t;& Q4 c; W) t) s6 `$ \8 c/ K$ A3 d
       end6 n/ E9 Z$ p) c) }5 S
       % 高斯消元
# y2 j" r) |; P" U9 Q! }. H/ P# t. A       for j=i+1:n
' h( Z$ \) Y, |' o+ T           a(j,i)=a(j,i)/a(i,i);$ D" B$ o: E5 J  c; Z
           a(j,=a(j,-a(j,i)*a(i,;
4 ~4 Y- Q2 o5 q       end
, a* |1 p) N& I7 `) k% g$ L7 H+ H   end% n7 h- x) D4 h+ u# H, ^$ H
   % 检查方程组是否有唯一解% o3 N* t# z8 x
   if (a(n,n)==0)+ `  x& B& ~  F' }) V9 y/ M
        error('方程组没有唯一解');
9 Z& V) Z7 C2 d" F3 u2 M1 q* o' M, h   end4 E0 B$ F* `. _) q6 {/ {2 V

6 d  g9 U2 ^/ {0 @1 y  e这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。0 N$ ]6 ]0 K: F& v* ^
$ Z7 n9 Q+ w& q6 q2 j0 w
3.回代过程:
1 k  z4 p2 S" H! ]$ F
. I3 b" C6 }& ~" l   % 回代
1 j9 b3 E; r# i   x(n)=b(n)/a(n,n);
) n1 b! ]6 |* Q/ \0 @& B  l   for i=n-1:-1:1! r* q$ ?9 N( @& x9 [2 ]6 O
       sum=0;
7 M3 t. P; i& e) {, \- q       for j=i+1:n/ {% r0 O+ d4 z
           sum=sum+a(i,j)*x(j);
4 p# p' C, V& I7 k) ]& x- k       end; f( V; @! S/ }1 ?
       x(i)=(b(i)-sum)/a(i,i);6 {4 f/ K; I4 h4 p
   end6 O0 i1 H4 z. |- u3 G; C

5 H5 n/ Z( n9 @  Z7 n# j* D; G# l这个部分实现了回代过程,得到方程组的解向量 x。% F0 }  W. c* q: _7 f3 Z4 d
* t9 ~+ C- N7 }+ \
4.打印结果:( _3 @, e5 B. T% T9 y! t( \
) ^9 R; K% P( Y# o5 _8 }* O
   jie=x'& f5 Y; W* h9 i9 R# E

3 r# Z' O$ Z9 n% |最后,打印求解得到的解向量。8 W. p, h; o  {, c% @/ `, L
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。* {1 G' Y5 \# q! T$ N2 k

* n4 m5 j# j9 [8 i; y4 ?0 Q1 B. b4 |) x% H! j" G6 N

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-21 08:06 , Processed in 0.452235 second(s), 55 queries .

回顶部