QQ登录

只需要一步,快速开始

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

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

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

1188

主题

4

听众

2931

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
6 j* _; O  i, V3 c9 E7 C" p  k( J3 ^0 w" f8 c' v; ?4 |
1.矩阵初始化:' ~( s' V7 R/ Z+ Y; b& D
. O/ Q- v% G( W  Q
   a1=[2,-2,5;2,3,1;-1,4,1];
/ Q. S3 ?3 k. m: e   b=[6,13,3]';5 \- t8 ?" N# m& k3 |( t- Y
   n=length(b); % 方程组大小为 n
5 p9 p" r+ E/ A5 _! A& z   a=zeros(n,n+1);
+ e6 X2 c6 K- C: m, w2 Y   a(:,1:n)=a1;
  o/ r) a7 |( r   a(1:n,n+1)=b; % 增广矩阵
1 W. D8 E! Q( e/ b" N9 r* ?/ d  j4 p  j
1 B/ Z5 O8 m1 p0 R这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。; \- y" N& t0 s/ t& D3 X- v8 ~3 ]

+ ]/ D0 a0 C1 G4 C/ U0 i7 E4 s2.高斯消元过程:
+ {5 `& }0 B# e" v$ q- Z
. S8 ?( O: ], y3 z3 e* l   for i=1:n-1
6 p6 L. r1 Y4 L! O       % 确保主对角线元素不为0
& @4 k# a% g# n' R/ L4 a% `3 T4 g       if(a(i:n,i)==0)
: t; a& q% s1 `$ m          error('方程组没有唯一解');
# H$ Z- T7 ?3 t       end
& ^* \7 J2 v+ G$ _2 M( s6 E( z       % 选取主对角线元素不为0的行
, P# E" x7 N$ d2 B       for p=i:n/ G* X' g1 _) J  F1 W* L
           if(a(p,i)~=0)
% q; G1 l6 |' D               p;0 p! [' K5 H7 S7 E5 v& o$ H
               break;
8 d; q7 L8 a8 A+ o+ k           end" e; m2 d8 X) P4 [4 ^6 u
       end
6 j* p( y7 d5 w8 c. Q, i, L       % 如果选取的行不是当前行,则交换两行( B9 F3 o0 S: ^% Y
       if(p~=i); n+ }! g$ B$ C6 C. ]
         t=a(i,;
0 F: w& v. c" ]1 m8 ?         a(i,=a(p,;& O+ a, f2 E: z) m: q) i1 B1 [
         a(p,=t;
3 ]1 G' v6 G: q, v1 m9 X  Z) I( a7 E       end% S& g! u( M* D# V* @
       % 高斯消元. m8 s: C: W) u" }1 z( A  b! N
       for j=i+1:n
& y/ i' t5 h& }* V  j. R; q: \           a(j,i)=a(j,i)/a(i,i);
  |2 X+ J3 U4 C           a(j,=a(j,-a(j,i)*a(i,;* s/ p% u2 G8 u: o! u5 X% Q4 K
       end( _7 b" h( g8 A9 A9 o- Y
   end+ ^4 P) q# H! l1 q" r
   % 检查方程组是否有唯一解
( E# t- f3 O" z) ^/ ^) q   if (a(n,n)==0)
+ \" M# G3 A' k! M* [/ h        error('方程组没有唯一解');
8 W3 @. j% _& c6 z   end
! @) K& R" X$ W# j' }4 \( [- F9 z/ D6 E1 d7 D
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。2 I" p$ V1 s# Z; w! ?- ]
2 S3 ~6 L6 S) O8 y- }
3.回代过程:5 z. X8 r- W. f' e3 `

7 l  b/ N# ?! ]1 S   % 回代
- V' w8 T9 \1 f9 e   x(n)=b(n)/a(n,n);6 j: L: X- p# \2 t
   for i=n-1:-1:17 s. j3 B/ n" n5 N
       sum=0;
! N# @5 p0 {( a5 i       for j=i+1:n
4 L% `1 m# e4 k$ {% A           sum=sum+a(i,j)*x(j);
( M, \! d$ ?2 i! \; a       end6 |& [+ i7 ]% j( u, F& A& i9 r
       x(i)=(b(i)-sum)/a(i,i);
) t1 D0 F' c* z8 y% N   end, |5 X% _+ Z/ d! e6 b
! ^+ s8 X7 S' S+ m  x1 I
这个部分实现了回代过程,得到方程组的解向量 x。7 U6 ~9 p: I- d6 [

3 T2 K, v$ R4 C; G4 }' }0 q% x9 i4.打印结果:
+ h6 l* Y/ q! |% l( j% p' J1 @: u* h2 s# P2 R$ ~
   jie=x'
: `6 H$ J/ {; \- g6 E' c' b
. e$ Q& k% W; V# a. F+ p; l+ ?  R最后,打印求解得到的解向量。4 n5 b8 v* |( E3 s" m  f& b
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。. _' q, h% J0 J) v, [7 {9 M; W
$ C3 l$ B1 i/ p4 _" r

* L5 O* P2 W/ p6 J. H

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-5-26 00:26 , Processed in 0.358526 second(s), 54 queries .

回顶部