QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |正序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:, x% |  W: s3 O1 ~1 a, Y

, j2 l) u0 r5 V( K; E% U" `1.矩阵初始化:
" p4 M2 z' }: b  j2 P! I% _# j. i
2 c. g5 z+ }$ X' O   a1=[2,-2,5;2,3,1;-1,4,1];3 J/ ^0 ], L( u& u; x; L
   b=[6,13,3]';
! L7 m% z  K8 D' c- @' ~   n=length(b); % 方程组大小为 n
2 g  P! a$ u* H+ X8 f   a=zeros(n,n+1);
7 z3 x# C/ P4 C$ C" K   a(:,1:n)=a1;5 O  R6 W9 I; X- S3 e# M3 L
   a(1:n,n+1)=b; % 增广矩阵
7 g, W- L7 J+ H" A: h
+ S, J- r& Q+ C3 W! {这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。$ `; I# X, F# D# @: i: x+ N* p

3 m* [5 o; v+ ~& @! M# N2.高斯消元过程:
' l2 F; G3 ]# P+ R3 D7 n  R" h% X. m2 i/ q4 ]6 |/ y" m
   for i=1:n-19 i+ a+ f% i- `8 j' u
       % 确保主对角线元素不为03 p5 E4 @, E6 {8 A5 b3 `
       if(a(i:n,i)==0), I; I6 @/ ?0 e
          error('方程组没有唯一解');
9 m- K0 G! ^) w+ u( Z       end! v4 e7 Z/ Y, N7 @2 @
       % 选取主对角线元素不为0的行
$ m2 k+ t0 U/ D9 s9 O       for p=i:n
6 y, N6 a* k7 X0 `4 q1 t: i2 |8 |           if(a(p,i)~=0)
+ ^" [+ M/ R3 ?" J               p;
# q9 y4 R: A6 [0 N6 ?               break;- L: `7 I/ s, Z' j
           end
# `2 q( m% f3 k$ X4 l; x: B; Q       end ; I$ o! d+ ]( ?; {
       % 如果选取的行不是当前行,则交换两行" r  v9 z! ?' ^9 N
       if(p~=i)" y6 d+ D  D( {3 ~+ j: V3 _
         t=a(i,;
$ {8 a4 v9 L* F/ U         a(i,=a(p,;
2 x' M% X4 ^8 b6 R         a(p,=t;! A7 a# n7 `0 f3 v& x- [
       end
* Q' C# J7 k( \. b/ r+ g       % 高斯消元
1 L/ j1 W, P2 m' Y# J" D       for j=i+1:n
, b% Q9 D. c! Z6 I7 _" p           a(j,i)=a(j,i)/a(i,i);" J0 T) A. _. R9 Z
           a(j,=a(j,-a(j,i)*a(i,;
; H- B( ?# }% X/ \       end
9 \% O' X& Z5 H; H   end
7 `) e; d5 w) w! r$ g   % 检查方程组是否有唯一解( {8 ?9 y  }5 ?, a$ }* R" {
   if (a(n,n)==0)9 E& u; f6 Q  F
        error('方程组没有唯一解');
$ i/ Z5 Y# ]; b5 Z, D0 n   end  i/ ^' d  K# P) ]
. R1 s# a9 [+ Z
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。, L" Y7 S) u/ g% b' |
. e7 G8 ]& F: t
3.回代过程:8 k' l$ q( `2 p6 c/ f5 D
- |* m7 T0 k& z  [* p7 X7 [
   % 回代
; g2 N# W; J' ]   x(n)=b(n)/a(n,n);
  u. h6 ^) M! w; k   for i=n-1:-1:1* T$ b. g+ x! @
       sum=0;
4 f4 B% f6 Y. x# l& ]- x8 S+ o       for j=i+1:n
' v7 N/ v/ L5 K6 T* B9 ]$ |2 a           sum=sum+a(i,j)*x(j);0 w- k2 B5 K4 E- A4 ?0 f7 J) ]
       end3 g4 W- H3 m) F. [9 T
       x(i)=(b(i)-sum)/a(i,i);5 I( Z. @% D+ _" D, @, ~
   end. |# ?) G, }0 {. x

' U* c* }0 @: D2 m6 i$ C; V这个部分实现了回代过程,得到方程组的解向量 x。+ S  H# }- c, \$ j2 i: ^& j

  n* @& {% t9 f$ i4 s* b$ F" i' f  P4.打印结果:
+ j% u  K3 `2 G- g& O" G. c% M+ \- ?2 C/ |3 P* P) K* H. G  @
   jie=x'% X" X  x( n- }" {

% j3 J. I' p8 m2 J# o: ?最后,打印求解得到的解向量。
+ F& F. q% ?! D/ p在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。- z6 n: y% Q  E  f4 P, s! e3 Z
: O  l% X8 D" L7 N& r* Z4 T

4 d6 \. g  s0 l

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

回顶部