QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
; R; F! @( p( G! M7 K8 Q( ~6 s
0 `- ~% P$ T' K9 n9 [8 V1.矩阵初始化:4 W0 R5 ~, T# U" V1 P
% h! H9 ]; [; p: T
   a1=[2,-2,5;2,3,1;-1,4,1];
6 O- P# q7 N/ d+ Z) }   b=[6,13,3]';# h' p: f" `4 Q. Y
   n=length(b); % 方程组大小为 n
  ^6 J0 F1 z  m/ t' c: {7 q   a=zeros(n,n+1);* T9 `; }6 ~/ @' X2 A; r
   a(:,1:n)=a1;. U' T' _* Q  Z: {: [
   a(1:n,n+1)=b; % 增广矩阵9 u# p- a0 d% P, k7 c
( Q) n8 E) a0 W  S5 i1 g( R
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
& j% ~3 q4 x0 a" t( F+ `7 v4 O5 c# [" x8 N9 G  X8 b/ [
2.高斯消元过程:6 u6 N* y9 K3 v" z! S+ U( l7 _) \7 F

  f/ i/ K. A* n  I) {0 z5 |   for i=1:n-1
0 ~( C- B! R  x9 W/ S       % 确保主对角线元素不为0
4 b  k" z/ q4 K9 v       if(a(i:n,i)==0), {* @- o% J& M) C
          error('方程组没有唯一解');
/ G4 Q$ @/ [" p! [, y       end) O; @4 N$ z3 s7 s2 O: M8 q0 ?
       % 选取主对角线元素不为0的行3 z" @# l7 s& M
       for p=i:n
% x6 e& O4 i) c# b( N1 R6 B           if(a(p,i)~=0), {' h' J, r; m3 {# q6 q6 e3 p. y
               p;' m1 n4 j* r- M# E- m
               break;
" \6 P8 ^7 G+ X! \1 @           end
# ~! H( d7 Y2 ^+ D) a3 e& G       end
8 V" t# o( c; E       % 如果选取的行不是当前行,则交换两行1 H+ R3 o2 J0 \: S$ k& z2 ^
       if(p~=i)7 _, a$ D) `5 U! x6 g
         t=a(i,;( c& S2 S- e8 ^3 d5 W; G9 [
         a(i,=a(p,;* s* c- p# I! X
         a(p,=t;; ~+ s' ?: Z6 D  [# b9 S/ B
       end
2 Y) L- s! W  v4 B# C! x! E       % 高斯消元
: _: @0 p& [/ Q# A' B' e0 j/ k4 d# s       for j=i+1:n( X% C8 E5 v" J; X2 M( i/ O
           a(j,i)=a(j,i)/a(i,i);% {2 N: {3 J* V, ?
           a(j,=a(j,-a(j,i)*a(i,;4 J0 [* V" S/ k- ~9 N
       end
4 B9 h! @. \% J% x, P% t- b/ R   end
5 v8 y% `4 g# e/ y' }6 R   % 检查方程组是否有唯一解) J; q  N1 `0 t: L  L
   if (a(n,n)==0)9 n# _1 k: W8 \5 Z% d
        error('方程组没有唯一解');
  g& s, U  P  d2 [' z- `$ b7 I: S   end
7 w. e0 |7 ]" q" E  N5 _# J. @# `$ {: G
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。  k0 M; k* p3 h+ N
! R  `! \2 \5 r: }" Z
3.回代过程:. h7 T6 v5 Z" r0 w

# Q0 J# w8 |1 [  B6 P; Y   % 回代
& c( x8 s# j( \  w/ U; U# z/ p   x(n)=b(n)/a(n,n);
8 s* v3 I2 n% _1 k5 i( F2 U   for i=n-1:-1:18 c" B7 Q0 ?+ O; {: N0 d2 U8 j
       sum=0;; B* ^8 k$ M; S9 m8 Z
       for j=i+1:n
/ h6 X3 a' [1 n+ {: |6 q           sum=sum+a(i,j)*x(j);
4 {. @0 O' a% J       end
! L0 ?+ K4 z. e9 y$ j) U% Q, s       x(i)=(b(i)-sum)/a(i,i);
/ \) y$ @9 H. o3 X   end
0 ^3 }8 e. j  g* ^( g
; T. N. m( _' n8 K: c, n  I3 J这个部分实现了回代过程,得到方程组的解向量 x。) g) G& ?* o1 r* y0 u
/ Z; ?7 r$ D; k  g! }  {4 u
4.打印结果:
" @$ Z2 y8 D% D; [
1 @% T  C0 o. t   jie=x'+ u. u! ?: `4 J; w. Y
- w  A9 i* ^, X/ F+ d- u
最后,打印求解得到的解向量。
8 D  ]2 }5 i, h) H- W在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。$ M# q: p3 k4 S) k9 M; t

5 G1 M. x  x% }8 D$ ^! `1 x" w7 D2 f! H: o+ M" 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-4-10 18:57 , Processed in 1.783645 second(s), 55 queries .

回顶部