QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:9 S( q! I, S/ h6 ~" S# G5 p& y

' n/ n8 R5 x( E6 A1.矩阵初始化:
" ^( Z/ e! C6 M% A7 W
; C! y; F2 G  S2 k0 b4 y   a1=[2,-2,5;2,3,1;-1,4,1];$ s% ]' T6 L5 E' ~/ B. t
   b=[6,13,3]';# H1 ~/ t' Z& E
   n=length(b); % 方程组大小为 n
% X: h6 i7 N7 \$ ^- O. q& r   a=zeros(n,n+1);) ^2 d0 K5 u' d* n
   a(:,1:n)=a1;4 B, X* a( Y5 d# x; O
   a(1:n,n+1)=b; % 增广矩阵4 S$ r& r* d/ L) Y

0 D2 f! a# G) c" Y3 j$ t这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。& U# y% Z! p/ H
# o0 Z, F/ G9 l) A  p- W0 q
2.高斯消元过程:
; B5 r/ F* I5 q& S1 O8 J! G, I5 z! x, W
   for i=1:n-18 A! q# s0 s* R. X6 C
       % 确保主对角线元素不为01 o, c9 t& f3 I/ D4 o9 l4 H& u
       if(a(i:n,i)==0)
) U. E+ y8 ~9 R' f0 d/ B' _" w          error('方程组没有唯一解'); 5 k* f# {7 G* j  E; w9 ~8 w1 |) L0 f
       end" A7 Q) o9 S; J1 d( m$ i/ z
       % 选取主对角线元素不为0的行# u4 ]% ^) h3 m4 c4 L" t. J- ]
       for p=i:n
3 R+ A6 ~: B7 a$ R           if(a(p,i)~=0)
9 s5 G. @4 B' l3 ^& z               p;3 L/ E0 y6 f: @/ E$ J" Q
               break;+ n" I& o  u  X" X3 h
           end. o3 U/ {% ~1 J8 _- i3 r3 J. `
       end
- |8 T) |2 A- W: R( h) i0 X, b       % 如果选取的行不是当前行,则交换两行
/ q2 v$ g. `+ Y0 L( A4 ]4 Z/ e' l$ J4 [& u       if(p~=i)
" p7 |3 e, L/ u/ J! k4 a         t=a(i,;
; d- D% `! c; b$ A# |+ b! @         a(i,=a(p,;
/ P1 X9 V# t; Z/ s& x9 z6 r         a(p,=t;4 p2 {1 R- B/ L5 [3 g9 N
       end
) m" a! V. E% q+ I9 L) F       % 高斯消元
" o" G1 i/ _1 }; d4 K. L" R; y+ @0 U       for j=i+1:n
" D, \+ U  ?0 u$ u: a, s! R           a(j,i)=a(j,i)/a(i,i);  Z7 t4 E; k/ S; ?. h" h+ u
           a(j,=a(j,-a(j,i)*a(i,;
0 _1 ~0 \& A$ ~6 g' \       end
& l$ o8 e( Y5 B8 F+ F$ a+ V( `   end4 q  r$ }8 t* W- m' {# {# U/ a
   % 检查方程组是否有唯一解4 O  y9 Z' Q( X! W  R+ P
   if (a(n,n)==0)
. r+ B: @" d. t, E        error('方程组没有唯一解');
$ i" k0 |* U+ k0 B   end
  r1 \+ G, B4 p! O+ ~( p& N; }& u+ O& p8 x7 T# X
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
* R( J; `) y- e& s4 w0 Z9 _8 [1 Y6 ]4 C% l" x3 P9 U: x% g- `; q: X
3.回代过程:
* H, Y6 T' j1 V4 o9 |
& }' l- X2 H" w- c  g9 ]4 Z   % 回代3 l& I. y$ I: F$ @6 ^7 ~5 `  S5 r$ n- Z
   x(n)=b(n)/a(n,n);% S! P2 a- M# ^7 G2 ]# V
   for i=n-1:-1:1
$ ]' k0 g. J# g& \       sum=0;& L" g7 g" h5 e2 [5 V8 y
       for j=i+1:n
$ @& b" z3 ^0 F! K/ F           sum=sum+a(i,j)*x(j);9 Q% f; w  h3 p1 [
       end
2 p! \4 c7 |- r! ]* w4 Y; a       x(i)=(b(i)-sum)/a(i,i);) D1 n7 C( @3 P  c6 B" v' }" ~
   end. E/ ~1 }/ Z' y3 T" I3 A1 p

' |" Y3 B! R& u# q) B5 ]这个部分实现了回代过程,得到方程组的解向量 x。3 M. [8 P$ s0 E# e: e

2 X6 [& ^% L% J8 T2 |( H4.打印结果:
' N7 ?/ L2 m' g6 q3 t  \1 t# S3 u- `9 q( K! h3 n
   jie=x'
/ i' T1 d$ F8 }! e$ y' i( b& C$ L1 U- D2 T2 L$ L2 e  ^
最后,打印求解得到的解向量。
, A$ [' t$ z" i# \在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
/ E9 p& ?: I2 e- [8 c4 Y4 H8 \# s9 f: F
* z" U9 e1 R0 J( V6 Z7 f6 c

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-7-10 07:17 , Processed in 0.443654 second(s), 55 queries .

回顶部