QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |正序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
5 o* x# m/ G# J, _( w( E* n- W' A8 y) a. E+ O0 V5 C- F
1.矩阵初始化:# g5 n4 r: `7 ]! N

/ |8 ~9 h" U! s* g0 C, L! I. N   a1=[2,-2,5;2,3,1;-1,4,1];
( \: A8 m9 L" n: A   b=[6,13,3]';: T7 O) k( b% ~: w8 H6 P2 Y9 k
   n=length(b); % 方程组大小为 n6 [7 G! [( C4 g! W. {. B. n4 |5 f; D. t' Q
   a=zeros(n,n+1);, Q- {5 F8 ?" Q, n$ a3 G, |6 X
   a(:,1:n)=a1;( o8 [" h, m1 R6 F0 A, Y+ D5 q
   a(1:n,n+1)=b; % 增广矩阵
6 M1 X$ l0 x- u1 o" m" u8 N  ?, k/ O
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
+ K, m5 N' ^  O$ X/ A2 ?- E. b- c1 ^+ y; Z% N4 R* T' h/ w0 `
2.高斯消元过程:' @! o9 r7 a" h& G/ E% @: Q8 I2 D
! ^1 r; j: E5 A# @: a& Y$ L
   for i=1:n-1. C9 K' m/ w$ I7 i! o: [
       % 确保主对角线元素不为0
* g7 L% _( j$ H% m' I       if(a(i:n,i)==0), H6 y( J& \& I, @
          error('方程组没有唯一解'); - w9 S' u$ d& f! u  T# [/ N4 z$ z
       end
5 S6 p& e1 \( W0 {) e8 v: d       % 选取主对角线元素不为0的行
- t' }0 U& D  k2 Z& ?+ J! a- B0 N       for p=i:n
. ^" o; F& W* M) D: H! T6 U/ }; d           if(a(p,i)~=0)
7 o1 v! p' Y: k  X( u               p;+ Z. E- K  v7 z# @2 `. m7 ~
               break;
; Z" M: c# s5 u! b+ Y3 J5 W           end
- D& N: x* {( D$ t! U$ P- V+ W       end
5 O- v/ G1 G1 R7 h$ S       % 如果选取的行不是当前行,则交换两行+ C  f: g& _1 }7 h, L# m; x; r3 a% L
       if(p~=i)
  |  }5 Z4 ]/ B" h: e' @         t=a(i,;
8 [' E& O0 M: t* x( Z) j. m         a(i,=a(p,;
: i) M$ u( w& Z         a(p,=t;* o$ o# ~/ \$ @* Y  [. B$ R- c
       end, U6 g1 n7 a9 ^2 |: u/ Y( S
       % 高斯消元; B# Q1 O  ?. C3 S' A
       for j=i+1:n
- f4 C  m5 c; Y1 u/ c5 A9 Y           a(j,i)=a(j,i)/a(i,i);7 q) J- D% Q, m! n4 R
           a(j,=a(j,-a(j,i)*a(i,;# }, w+ \' s  y2 t/ v6 O# L
       end
) a3 [( a6 \& }# g. y& L% Q   end
" E1 M3 Q# Y3 J2 S$ b# V   % 检查方程组是否有唯一解2 W# u" ?# r; u6 @
   if (a(n,n)==0)/ D1 {$ z. R6 }  j; e' |/ W
        error('方程组没有唯一解');
1 y3 h$ e% H) b  {8 \2 }   end3 _% {0 U& p6 p$ y
9 r" m4 W7 C0 o1 K8 |( H8 O7 R
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
6 k+ l# p% _: K% t) a2 G3 H1 n3 a1 |  G- W" X/ P& V' H
3.回代过程:
9 d/ G7 L2 |, \$ |% p
! S, y. s( [5 v   % 回代
% M  ?$ ^( H* I7 g' g& Q2 J   x(n)=b(n)/a(n,n);
7 O( E' D& @" `   for i=n-1:-1:1- i& _8 ]. ~+ A  o3 @- e" ^' E! [, \
       sum=0;
  Q- X) {. n: v9 Y6 m& k       for j=i+1:n
) l# o! U4 W& O# C8 }           sum=sum+a(i,j)*x(j);" q- k% o% r( `* ^& q
       end9 Z" M5 ]7 @0 @5 Y  r
       x(i)=(b(i)-sum)/a(i,i);/ Y$ B" v6 |3 a
   end8 v+ A& @8 |  _

7 z  i4 ^) i" d3 j5 C# ^这个部分实现了回代过程,得到方程组的解向量 x。
4 M/ Y5 Q% o- l$ U% `5 D; W* `+ X: @) j( D
4.打印结果:
$ M4 l/ r  k3 P& i/ K
) z: _8 H, z) [1 B  W( d9 k  c   jie=x'  ]7 x7 {5 a2 D' z
7 P3 A. z4 B0 |
最后,打印求解得到的解向量。$ L2 s* K- K3 f, s
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。0 b5 }/ \: l; x5 J; I
7 t7 ^" T+ k: R5 e
) c! p8 R+ d: e6 p# v- t1 z

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-6-14 10:08 , Processed in 0.656572 second(s), 55 queries .

回顶部