QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |正序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
8 E/ i) Y4 l$ e& r5 }# v
: w2 R! e( f& i1.矩阵初始化:4 k3 _6 L1 ^, r  {8 ~: d

# z/ x# n- G$ U' b. t   a1=[2,-2,5;2,3,1;-1,4,1];9 }9 W' P: P# X1 Q  h6 M
   b=[6,13,3]';: |1 A$ `' A. O  m! `9 T' S0 n; |
   n=length(b); % 方程组大小为 n
% h; y* O# d" p+ }   a=zeros(n,n+1);
4 ~% {. Z0 G* p- s   a(:,1:n)=a1;
. E: `. n: X0 g- ?   a(1:n,n+1)=b; % 增广矩阵, p9 \1 M0 c6 z/ v' {8 q3 ]7 q
/ B, X8 O6 O/ [3 R
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
& `* }7 c( B8 a% H8 \. _+ S- J/ s8 [2 ]2 L
2.高斯消元过程:
0 M- \: t; S. K3 _9 N9 p) @1 H# t6 _$ Q% z% k* W
   for i=1:n-1
7 L1 H+ b0 Y( U7 r       % 确保主对角线元素不为0( P6 U. R" n5 x" e* \
       if(a(i:n,i)==0)/ z5 \0 r# f5 }! |
          error('方程组没有唯一解'); - y# Y$ J# u2 v1 p9 `/ N
       end
1 K9 s* F" z# i5 f- s/ U- t: H       % 选取主对角线元素不为0的行' ^' z9 }; I3 i# p0 o+ J' @% s$ h
       for p=i:n( o; n0 _6 h4 F4 q" F
           if(a(p,i)~=0)
/ P" U, _$ A) o$ D! T7 Y. O: q) O               p;
4 C7 z7 U/ Q; A               break;" m) c! M  t6 q3 b7 A4 [
           end0 x' W3 d# T* j0 {+ \' f( a
       end
9 [7 a& S& i* e       % 如果选取的行不是当前行,则交换两行
* R( D5 y( h- A! h  ~       if(p~=i)0 x4 c, L" E4 i! h  S
         t=a(i,;
3 p1 A/ n7 o  s         a(i,=a(p,;& _/ h1 t& O3 H4 X' H
         a(p,=t;: G, E  y. f  d  j
       end
. r' U' ~) m# A       % 高斯消元
5 O# V* |- X5 r9 X       for j=i+1:n
) d+ P1 Z$ l6 n5 V3 w/ j           a(j,i)=a(j,i)/a(i,i);
/ x! s) P* z3 ?! f           a(j,=a(j,-a(j,i)*a(i,;
- q7 S& E3 h! r9 v       end: ]8 `4 ]. b7 ^' C: s4 Z
   end
" G$ Z" L* a) S& B  b: p; ?. I+ a! k' m0 ]   % 检查方程组是否有唯一解
  s: V8 j$ W4 s1 c& e0 N4 G   if (a(n,n)==0)
/ H: {. _) ?/ A# v# a        error('方程组没有唯一解');, i4 z/ e1 J5 K: A0 c. C' X% a3 o
   end1 ^! w, s3 @' H) B
& \  X/ [% E: T& f+ W# P5 m
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。& v1 D. M6 ]' o

6 I' M7 m6 L) m7 z3 s# s& h: l3.回代过程:
; A, i, N( B7 e; v0 `5 b% r
2 M7 g0 a1 Y" T9 _+ b8 G   % 回代9 ~$ T6 ^* H5 i  f* u4 A' d
   x(n)=b(n)/a(n,n);& C7 m6 ~7 n7 ^  t; N% g
   for i=n-1:-1:1; N; t  C$ S' h" ?  J- j. j! k# W$ q
       sum=0;
+ \4 _4 S0 ~& h( d       for j=i+1:n
7 j/ w7 [4 l0 S+ p           sum=sum+a(i,j)*x(j);
) S' ]9 W1 L  c6 ~2 Q       end1 `# P+ D) }- A6 t+ t5 S+ B$ j  n
       x(i)=(b(i)-sum)/a(i,i);
% Y0 }9 L' ~( W9 q2 n0 m9 E" N   end
9 O2 s8 }- I/ R' Y; h. ]( F8 s. p% e2 L+ I% z
这个部分实现了回代过程,得到方程组的解向量 x。9 s5 G/ e6 c1 w0 A

& ~0 d* M$ Q; {4.打印结果:
* I9 _+ ~. Z! S+ w" Q/ n/ O  t' ^( S& D7 i  e  q) e
   jie=x'
7 j- f% s/ J% f1 F; p/ ~+ w4 W$ _. b+ G$ E1 }
最后,打印求解得到的解向量。
! s' w* _4 _3 `在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。1 b$ {, q. H9 e; I

  {9 J0 B. R5 m1 w; f' D" R" R* h" ?. V

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-15 00:52 , Processed in 0.954424 second(s), 55 queries .

回顶部