QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:1 f3 Z; w$ E% ^  J$ J4 {

4 i: y: V5 m4 Y' c* J- X0 L* O1.矩阵初始化:
( I3 B* v- H) z. ~) t( G; A$ l# S
- ^* [) B6 ]& y! ~   a1=[2,-2,5;2,3,1;-1,4,1];) o+ A, I4 ^3 ~
   b=[6,13,3]';
7 d% I2 U( i/ [# C   n=length(b); % 方程组大小为 n
1 {8 C% C; c! H   a=zeros(n,n+1);
/ w: B7 @; [0 O3 P7 S) v   a(:,1:n)=a1;
% S" P" K  z! b( z. j   a(1:n,n+1)=b; % 增广矩阵- E. r4 F% j- U8 Q8 Q! F, H5 f/ `& `

" h% {6 R4 x5 w6 v6 L这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。. X) _" o, |# e7 {
$ C$ Q' ?. J. p& E, \5 s
2.高斯消元过程:1 m  ]5 i0 F, j* }) L2 W

4 `- D% n6 U% S! v' }  L# ]   for i=1:n-1
$ g* j! v& o# X- f% i       % 确保主对角线元素不为0( P, P. C5 a- q" S# Z6 [5 g' B, h* ?0 |# o
       if(a(i:n,i)==0)9 e; ~- C& }0 q3 |" L1 ^7 b- ~
          error('方程组没有唯一解'); : u; a  B+ p' _: {# c" }
       end" l; h3 n" ~# h7 T3 ^) Q) Z, l  Y
       % 选取主对角线元素不为0的行
8 I* ^  E3 _8 P. K. Z       for p=i:n! G  _* W8 ~7 `# M
           if(a(p,i)~=0)
1 l" f1 K$ W5 m7 x  ?# h& R$ K  U4 [. S& `               p;7 \, {# |% y% K' V. P) P
               break;0 e4 f: U' s) P8 G
           end
: T* m6 ]" I' o       end
: F$ l! d& ]4 y8 c  B9 S# w. P/ x       % 如果选取的行不是当前行,则交换两行
. S3 D- w: A( {% V, a       if(p~=i)+ ~( ?& X: ^* S
         t=a(i,;
: u- K( k" ?( D: E9 P. x& h3 H         a(i,=a(p,;, D' v# B3 S; U9 ?' U
         a(p,=t;
) X8 a) w5 K5 S5 d3 s1 W       end( |* ?" O: F" b  N. X
       % 高斯消元/ L$ ?9 K: D, S# F
       for j=i+1:n
& i* ~- k, |$ _2 C- k# y           a(j,i)=a(j,i)/a(i,i);
4 V0 b6 K% c! [( w% P8 V           a(j,=a(j,-a(j,i)*a(i,;+ w& l+ K$ P; R
       end
4 C0 {* g/ O* X0 Q- C$ C9 x   end  C$ f0 w$ L7 ?6 _6 s; ], y
   % 检查方程组是否有唯一解( ]* S7 O6 a0 T) L& {6 {& T+ f
   if (a(n,n)==0)
* M+ V2 @7 I6 K- B8 a& Y        error('方程组没有唯一解');
; P" R+ d3 }- o; a3 I   end; x/ F- d1 q( M. W" H5 }

0 E% \6 a' K  o( |. {3 F) Y* T这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。% |" Q$ M1 F- k7 m% B7 j1 t) S

, n& Y' h$ `$ B$ z1 ~/ ^3.回代过程:
6 j. j4 Y! U; M7 N- x: u; V% m8 U2 j5 O
   % 回代3 {/ t2 e1 R* F8 B$ E( [+ t$ w
   x(n)=b(n)/a(n,n);) u0 e5 o5 A6 q# Q5 Z
   for i=n-1:-1:1# E; Q  t3 S6 A: a0 v2 l9 B: B
       sum=0;
5 C. M; R9 l  [# B1 c! Q6 h       for j=i+1:n7 k! p' T- L6 ~! s( g$ {
           sum=sum+a(i,j)*x(j);
0 n3 y5 G: ]+ `# V  y- M       end
, k  R0 j& \$ Q       x(i)=(b(i)-sum)/a(i,i);# h/ a3 I" h; e4 ~& q# T3 ?
   end
0 S5 H- O2 ]2 B6 b+ ^. w1 u; t$ b' e0 T, }0 z
这个部分实现了回代过程,得到方程组的解向量 x。& G/ [9 x5 [. R' }3 u# Q+ V

, f) i2 r0 M! P# d4.打印结果:8 n$ \. ~4 h5 O% y+ {) j. e
& g3 j- D9 ^; x! m3 }' \/ ?
   jie=x'7 @4 |2 e4 V. }7 `2 y$ {
; O3 G8 p4 D% r) r4 P0 H* ?, C
最后,打印求解得到的解向量。9 D3 |. x9 ]3 P3 {9 n$ h7 u  {4 z
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
+ I* L+ N/ m7 g$ X, V4 X7 `
; y' S* A; S* d( u0 `* f; D0 F
" T$ ?, I7 u8 i& [5 S' N

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-15 21:47 , Processed in 1.430920 second(s), 55 queries .

回顶部