QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
/ d$ D& ?( N6 T# W" i0 [& h- r& j/ {2 x! ^1 f
1.矩阵初始化:
( \, F5 F1 e. j  {0 `2 m6 T- M$ m
   a1=[2,-2,5;2,3,1;-1,4,1];) Y7 V3 O. U5 q% N+ l. G3 a
   b=[6,13,3]';
4 E  ]9 b6 J4 i* _( L   n=length(b); % 方程组大小为 n6 ~- N2 E* R' P  Q2 G
   a=zeros(n,n+1);' \0 k; a# w4 O
   a(:,1:n)=a1;
/ C* J* o. }% Q   a(1:n,n+1)=b; % 增广矩阵
7 K) y8 k$ U' V+ J
% w3 ~4 t) V3 J  s3 T这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。5 q3 o2 R5 b  d1 _: K
, S0 z7 T. w( Y" m* t/ t
2.高斯消元过程:" K# W3 n9 Z: X+ a4 ~: T
: O" A; w5 ~. ?+ a  |
   for i=1:n-1  v7 S6 F" U$ b7 U7 f) b
       % 确保主对角线元素不为0. n) X( D+ x7 c0 `
       if(a(i:n,i)==0)
, k- O) |; z' Z' `3 P% T$ z          error('方程组没有唯一解');
) W8 O  t* U# c0 ^/ Z" N       end
. L0 s2 A( F7 e2 w6 D       % 选取主对角线元素不为0的行
) C% J5 F: X/ W  @/ }8 [$ i+ H       for p=i:n2 j, B/ `4 T1 T! W/ v5 W" B3 K
           if(a(p,i)~=0)( v/ l1 j8 i% w( I
               p;' X7 d3 g5 c7 \+ t+ f" }! j
               break;
1 h8 W1 B9 f' L  U           end
  L+ k/ s+ R4 m& l. E; q4 g       end 6 M8 J/ |  e1 q: ^) Q8 \) p
       % 如果选取的行不是当前行,则交换两行
2 b' g; M4 T( E$ w       if(p~=i)7 h' p$ @7 [' ], ]& _; t0 E
         t=a(i,;
7 N+ q2 j3 a( q8 I( [7 G         a(i,=a(p,;
& G4 l8 y$ L; N8 O. L         a(p,=t;4 t. E5 q* d% v' j# [
       end" @( x3 ?+ N* u: X& S4 K/ P: y. {7 n
       % 高斯消元
" a( h  i8 v& O       for j=i+1:n
1 Z" s( d, d$ T9 H9 J! ~2 A           a(j,i)=a(j,i)/a(i,i);1 T8 Y0 }5 _. `% i( v" v+ }
           a(j,=a(j,-a(j,i)*a(i,;
4 y- ?7 c7 f; C       end$ M$ s, X. g8 X; l. {
   end( M4 E4 e/ B4 D7 k
   % 检查方程组是否有唯一解6 O) n! W, o# j8 O! b- G
   if (a(n,n)==0)2 F! Z4 o, @0 L' I3 y, ]
        error('方程组没有唯一解');
5 Y! j) s7 V" W1 E0 V0 X6 e; N   end
; P) S- B, W7 ?9 e' b0 a6 u" D+ R7 |: |
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。; f# z0 y& S, T$ z; F3 ~4 P
( f7 L! H: I( g7 I
3.回代过程:# L9 k0 g0 l, `, M+ L

- g0 F: W0 `; R. o7 @+ L7 ?, F   % 回代
& v3 o2 p+ P: k7 U! E( f( y) O   x(n)=b(n)/a(n,n);, z2 W" Y: H. Z" N, g1 _: d, q- B
   for i=n-1:-1:1
$ E% Y5 d7 Z" C; G       sum=0;5 S" r! `) C, g1 C" Q  H) F9 ~
       for j=i+1:n/ ?1 p6 W! e+ J8 b7 a9 L
           sum=sum+a(i,j)*x(j);! u3 }; [2 o; k+ v) p" m( s+ W2 w
       end9 a0 U3 ?. B- }8 ?
       x(i)=(b(i)-sum)/a(i,i);
1 W" E" Y; E5 Z   end  _# p  }  L: j+ \$ `1 {  h
0 \. Q% L4 L7 N
这个部分实现了回代过程,得到方程组的解向量 x。0 W8 ~5 ?7 }; R  b% Y$ S
! g: w# N- |6 J3 w6 l( N
4.打印结果:1 o2 s) l, ^, ]( P, I
1 F4 I; |) e" b4 G
   jie=x') r0 I8 w" K- z" |
) g4 _! ]2 j; d$ M" y, ^
最后,打印求解得到的解向量。2 J; R$ L9 v8 A& b! B. \
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
# C) ~9 t) Q. r
+ r8 b' C" O* {& w) A! I4 d7 _0 P' w2 S7 B1 W0 f

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 08:10 , Processed in 0.414391 second(s), 59 queries .

回顶部