QQ登录

只需要一步,快速开始

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

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

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

1188

主题

4

听众

2931

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:5 z% M' y. M, k$ f0 ]; q! \

! T9 Q) C: _) W- n+ g1.矩阵初始化:
: K# I0 f7 ~( d; a$ I, ?* \1 Q. C% Q( t5 k' E+ a
   a1=[2,-2,5;2,3,1;-1,4,1];
; n$ a( T  ?; d0 `& {   b=[6,13,3]';+ {/ r7 Q, n; u5 [
   n=length(b); % 方程组大小为 n
* W- C  @' ~. \+ u   a=zeros(n,n+1);
4 S" V3 D4 R" v) q8 N5 |   a(:,1:n)=a1;
% E9 v9 P; l/ y/ A7 _! e) i: r   a(1:n,n+1)=b; % 增广矩阵
; W8 j7 C8 y! ]4 ?4 Q9 ]8 K) d9 U6 T. \
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
+ H! F* [8 k& @5 d& ~9 t/ j
1 G- r& W$ _  z" |$ [2.高斯消元过程:
) s& o; b% J2 ?& x4 u" q& T! ~2 _% l5 Q6 `, Z# G
   for i=1:n-1- O* m9 C: v% r9 j4 r# N) E9 L/ e
       % 确保主对角线元素不为03 P( \/ l6 I7 Y
       if(a(i:n,i)==0)
& u2 ~" Y2 k7 B$ m! f% X) l' c          error('方程组没有唯一解');
. g3 X  M" M6 V( w" `% Z       end5 W9 x) [( U1 I0 Y& s
       % 选取主对角线元素不为0的行
6 `% _* x; O1 S$ H6 s       for p=i:n! S3 I) S! a1 K% A1 O
           if(a(p,i)~=0)
( Y8 t/ R) A5 P$ z               p;
# L) n3 Q  ]; M4 `2 J               break;
0 M4 \- B0 Z$ A' I  ~           end& R% O+ L) l1 N1 q+ p2 P0 I# x
       end
( Q5 i2 M' J9 \       % 如果选取的行不是当前行,则交换两行; q; \- v3 _9 Y, \# z
       if(p~=i)
) d3 n4 y. R1 l' Z- O! g         t=a(i,;
; L: W' C1 M' j4 E. Q         a(i,=a(p,;
( }% @, Y" Q5 k4 D0 e         a(p,=t;0 t( \$ ^' Z8 f4 G5 |% x
       end& U. h6 r' G; V
       % 高斯消元
; c" Q5 b0 i8 o) a& i       for j=i+1:n
0 [9 G( _  R! F0 u) a           a(j,i)=a(j,i)/a(i,i);# P  w" t& `1 t) G" p3 b
           a(j,=a(j,-a(j,i)*a(i,;
! J: u/ B9 M- }& f# s: ^  [       end
- y+ b. }3 a, O   end
7 f, m0 `+ c' {   % 检查方程组是否有唯一解5 ^6 P) n$ k% @( T5 w
   if (a(n,n)==0)% t9 I1 l; l1 E: d, M* J' `
        error('方程组没有唯一解');4 m4 ?5 V# a7 ?% d0 {  Q
   end2 y: N1 Y& Y8 {( B( J6 z

* A* k+ B2 A3 f) s# B0 G7 w, }这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
2 l/ F/ U  X! Q) Q1 H, f! [. j
( y0 L* ^2 y7 I" j$ a3.回代过程:
. k: S0 B5 x- c* }9 V) A4 r4 Y. J0 P0 r" m
8 A# @& o9 w6 i" \4 \   % 回代
7 L4 ?# {& k6 V+ c$ \1 K* o   x(n)=b(n)/a(n,n);1 m1 P0 c) z" h
   for i=n-1:-1:1/ ^0 p$ X; m: l; {5 }3 H
       sum=0;
2 k& b6 G: O- y6 H9 C       for j=i+1:n
" q& Y2 C8 ]% a" Z1 N% ], ?5 I           sum=sum+a(i,j)*x(j);
' C+ w% q4 v7 T       end2 F- b9 a; G/ r. h7 i3 g
       x(i)=(b(i)-sum)/a(i,i);) p8 i: w! {1 ]8 o( `) C; ?
   end# \" b0 v3 u3 s5 z  P: I; b: |
( ^$ w1 _* [! A3 a: S% h9 K
这个部分实现了回代过程,得到方程组的解向量 x。/ W8 O5 d$ s+ u- Z  f/ r; B) t

6 ?4 k; u* A3 o. ]) a4.打印结果:* g% H+ V* M  J

0 D4 a& k3 A9 G3 V+ q   jie=x'/ Y% p$ z) K0 T. A$ N8 @
  M* i$ K$ I; a4 T  U+ V
最后,打印求解得到的解向量。+ C7 j. x0 ?  ^2 }& q# {! c
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。' [- e' B# O- u% K( B' g$ ]

3 ~( y6 a6 }# @! }, O
, v( R1 X1 w5 |- j$ A- w

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

回顶部