QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
- h# @" R  h) Y1 O" B& d2 [& t6 Q4 U& N9 F" L1 h& S' \
1.矩阵初始化:0 Y6 k! L9 t% R7 d# H. N7 ?

% D" j) z6 @; _   a1=[2,-2,5;2,3,1;-1,4,1];
0 |' J" }0 K6 @- P9 S   b=[6,13,3]';
3 B9 D- v  A# b: n  U' O   n=length(b); % 方程组大小为 n
8 o' m( c) h* @6 v; p   a=zeros(n,n+1);
+ I- @  O0 [( _   a(:,1:n)=a1;
/ g; |' a) \5 q8 ~: L8 s3 A4 A   a(1:n,n+1)=b; % 增广矩阵9 G1 J( {+ O1 f, u* C2 z1 o9 |
6 Y: \. b  t3 p- M# ]6 o
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
3 V9 P+ e  R0 O$ ~/ `' A: f
* J: l9 R" z/ S2.高斯消元过程:  B# ?- z  `  b4 d, G
5 S$ S  _* {1 _) z. k
   for i=1:n-1
+ O' L1 K% Z$ D4 i& g       % 确保主对角线元素不为0
$ b3 G3 N3 \* S! ^/ w9 M; [       if(a(i:n,i)==0)
: K2 V, P, Z4 C: p& A) R6 G          error('方程组没有唯一解'); 9 X6 O) M" h0 ~7 A
       end
" r* s2 o# ]; X' E       % 选取主对角线元素不为0的行" s# s0 x% S8 Z; j2 G( w* |4 U+ @
       for p=i:n( w6 j% _1 N) q& r2 f3 S6 U
           if(a(p,i)~=0)! V/ B8 @- a1 w/ Q3 ^+ W8 k* A
               p;
) y8 {; D+ t, [5 e% v* p& |2 O               break;% O1 u2 V, ^) D3 \$ @3 s; ^3 f0 M3 e
           end
9 N* u) A. q! S3 W       end
: m. X+ ~$ E$ s) T* D( l# h       % 如果选取的行不是当前行,则交换两行' b" L5 A( g7 ?" R# S0 I2 G* u
       if(p~=i)
3 ^: {: d+ ^: {: w5 q         t=a(i,;
5 M& n8 s! p. S4 E2 x) o: Q2 i         a(i,=a(p,;5 G, @' j$ k. d8 B
         a(p,=t;
6 v) g* L; l/ F& R6 K7 p       end) w+ U3 W: P2 f' i5 o+ f& w6 A
       % 高斯消元
) a2 i; u) \5 z% l3 Y* v       for j=i+1:n  V1 |- `8 z9 L" B* Y
           a(j,i)=a(j,i)/a(i,i);/ @" k5 O2 Q" g2 b. v- V
           a(j,=a(j,-a(j,i)*a(i,;
) V/ X$ k! z& q$ g% X       end
! r0 P4 z& k* Y* C+ w3 `   end7 P4 @9 z5 F2 x" C) \, a( Y3 z; J
   % 检查方程组是否有唯一解
8 @+ t7 @: {$ O% |& I   if (a(n,n)==0)! g6 ~5 w. |8 B* m) W
        error('方程组没有唯一解');; F. K* W. N# y$ a5 a
   end- ?5 Y/ W. {8 E% e, N; i
! d' X& }1 W- @/ R% D
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。8 \9 h+ `! f; ?: Q
0 _$ c; \( i( F+ G8 D& y
3.回代过程:
9 F1 _3 _4 ~: P3 e. a( H
" v& L" [' ?1 W/ B' W# Z8 W   % 回代
4 Q$ b7 j. @  H/ v+ H" n* L1 R" f   x(n)=b(n)/a(n,n);
6 I3 d' T$ _" I+ b. |/ j4 ]   for i=n-1:-1:1
) p/ K! b# R' [0 G" h# D       sum=0;
- h, J! x7 {, N       for j=i+1:n
. G9 r! ], e/ c' I. f. ~5 u& p7 w           sum=sum+a(i,j)*x(j);
; p- d( ^: N/ @) B       end
9 J% G$ p) O; f9 m       x(i)=(b(i)-sum)/a(i,i);' ~6 Q. y( V% |$ O- Y
   end
; a2 W: d. p* \5 T/ n+ R) ?0 p1 x$ o3 p2 e* ?
这个部分实现了回代过程,得到方程组的解向量 x。9 D/ Q( z4 e: Y" S! h* P0 g
- [+ s5 ~: y) h- C# @* ^- o% X
4.打印结果:
8 {9 A2 J5 \" u* S( a6 o
5 o4 ?# C8 }+ @) S   jie=x'
: r( v  n4 Q  k: k8 ~9 f# R7 D1 l+ a0 R0 g. Z
最后,打印求解得到的解向量。
& w; T, s' _" _; j6 q- Y7 d在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。  J( S! _- N2 G4 o
: J8 Y1 e3 X# S: f

+ e3 ?! x6 B( S5 ~7 Z, T' A2 Z

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-6-14 03:25 , Processed in 0.444463 second(s), 55 queries .

回顶部