QQ登录

只需要一步,快速开始

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

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

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

1176

主题

4

听众

2884

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
4 t5 x: \6 J$ s" F2 t' J
8 C2 }% ^& @' Y! ]! Z5 U& x1.矩阵初始化:
$ k4 I# }3 _# j7 f/ b. i4 o1 C, h2 U' Z3 U* A
   a1=[2,-2,5;2,3,1;-1,4,1];; H- j% R' p+ R. Y; C. T+ M
   b=[6,13,3]';2 o1 N. U. m1 o6 o1 u' o6 N9 q7 F; b
   n=length(b); % 方程组大小为 n2 l; x6 K$ R* I2 d/ g* _8 }9 j% j
   a=zeros(n,n+1);# ]2 g1 M) o  b- c) h2 H9 e- l. r
   a(:,1:n)=a1;7 O# `2 a$ @3 i, a  @: o% m
   a(1:n,n+1)=b; % 增广矩阵7 r. I0 D  O4 O1 ]/ L* ?# V
( @1 R% U4 ~$ j& \8 P) K
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。3 ]6 n/ U" H& u7 H: R7 u0 i2 M

% S0 ]3 B& H' d& p2 h6 G: B2.高斯消元过程:
. ?3 |/ O& v( z' t* y' ]
  }% W( k! b. y# O   for i=1:n-1
" b' ?! M9 s9 |) G5 Q! D7 s9 }       % 确保主对角线元素不为0
& r: a2 l  ~. I$ i' J* n       if(a(i:n,i)==0)
3 E6 a9 z" U6 D5 A" F          error('方程组没有唯一解');
# U4 M+ C# r; y       end
" R( I6 K& `5 ]2 |       % 选取主对角线元素不为0的行
7 t" D% W# T; |/ q       for p=i:n9 J, r( I9 c: R0 h6 `/ [- W" a# a
           if(a(p,i)~=0)
0 h6 U% h& R: O, _$ T+ `  K               p;
! r1 s+ c" T1 a$ s9 w8 y5 \               break;0 `1 |5 |- y7 L) B  s/ U# Z  n1 n
           end
9 Y, j2 W: H5 b+ q5 T       end
$ A, t. x' \5 p2 g, m+ I3 b       % 如果选取的行不是当前行,则交换两行* L" M; D- n1 h4 t5 u& ~0 V
       if(p~=i)8 X( H* X0 _0 g$ ^
         t=a(i,;$ L$ I6 M' }% P7 A
         a(i,=a(p,;
- l/ z& @- {- z1 u* g         a(p,=t;+ W# V& T( L+ i
       end
/ j  S4 ]+ Q! t( P       % 高斯消元
6 G3 W  k1 ?3 f. t/ b7 V& X/ l7 D       for j=i+1:n6 S4 p: F+ T$ Q* P( x: x
           a(j,i)=a(j,i)/a(i,i);
  @; E0 A2 q8 n" ~( u' r5 r           a(j,=a(j,-a(j,i)*a(i,;
& V; X- [1 z/ f. p$ }       end
; R, M# w" j! b7 f   end
8 A$ d% F+ Y: D9 T) q4 O& w$ r   % 检查方程组是否有唯一解( g% ]9 @1 t( A2 P$ y* ]1 A
   if (a(n,n)==0)) y% B% a7 m6 o8 D0 q  f# H: _
        error('方程组没有唯一解');/ @6 H: o9 Y3 J/ {; n
   end: e4 W: @8 }7 b4 l7 T% O
, R7 f1 o6 I  N6 `# ?" W4 J& g
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
. C2 [1 K- Y; a$ i* Z  t! }
2 }; O3 }% X9 G6 F4 t5 ~' U3.回代过程:! Y( a: X  Z: \1 U
$ _  w9 N$ b: j5 {: N
   % 回代
) ^2 S/ j2 p8 G# N& r   x(n)=b(n)/a(n,n);9 P8 P6 e- S4 U) V, Q+ C
   for i=n-1:-1:1
+ F2 P" T% S. _3 n5 \       sum=0;
! z4 B, `' W- l0 u       for j=i+1:n1 `& d, x8 M* l2 L9 D& q
           sum=sum+a(i,j)*x(j);
2 O- Q1 y: q2 `* y       end6 k% l7 z6 s8 R8 s
       x(i)=(b(i)-sum)/a(i,i);! A3 v% k7 L/ t3 `) G
   end
6 n  N: ^0 ~5 `( Z* U9 S" N' g  Y3 C* M
这个部分实现了回代过程,得到方程组的解向量 x。; O& W0 Q& [$ ]# Y! T

3 `, Y% N; }4 P) T! B) S* C8 a4.打印结果:
8 F+ K- O2 K- u8 S2 S) ^+ P# r+ y8 L7 {. x8 i9 i3 c
   jie=x'
2 x" f' p9 h. ]0 u- E0 F: p1 ^" H
+ E  L; m4 k: Z! y+ A9 f) u9 u最后,打印求解得到的解向量。% Y4 o4 p6 ^8 `# @3 C9 m- q
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
/ `4 S$ ?" ^3 p; D8 ], B- [
; u- r5 r, j5 J+ R) Q4 Z0 k* K
3 O9 D  R9 n8 j. |

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, 2025-9-21 05:10 , Processed in 0.674029 second(s), 54 queries .

回顶部