QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

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

3 w! i/ r/ V6 n5 H  D1.矩阵初始化:: C! o% ]* p6 B! Q
5 X2 C6 V' J: [8 U% B
   a1=[2,-2,5;2,3,1;-1,4,1];
; ], f8 f4 l, W* q5 P* G   b=[6,13,3]';
# |  Z! y  M" {2 X/ |4 L   n=length(b); % 方程组大小为 n
7 }$ X  X5 y! G9 ^7 y0 y2 J   a=zeros(n,n+1);% T. x/ I. }: j& r# g" G/ |
   a(:,1:n)=a1;6 r) ?$ u) y% |' \3 z
   a(1:n,n+1)=b; % 增广矩阵
8 m2 J* u, e8 V; w" r( |" g5 V, f0 D5 l" R! S5 J* Y( p! i8 B
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
0 W2 S2 O; b! A1 S/ Q# I( q) h2 j8 o$ m& `% W
2.高斯消元过程:
& N' f5 ]  |# z
+ b0 n9 F7 Z+ s+ o" I9 f% W   for i=1:n-1
3 y5 H% v% }  i0 S) B) m       % 确保主对角线元素不为0
( T3 U7 l3 p" z6 U1 u/ `# n       if(a(i:n,i)==0)
8 q" t0 ^4 I8 ^- O! a2 p          error('方程组没有唯一解');
/ U8 O, c" f" o8 A9 @+ e9 ^6 H       end& b, Y# O4 M; ]0 s2 h' U
       % 选取主对角线元素不为0的行1 a8 P* Q% W' l/ I7 R. _0 U" o
       for p=i:n. u+ e( F6 p* c+ C$ ]
           if(a(p,i)~=0)
$ q! l* o% q' y9 P0 t% E               p;
- k) Q* x: z* e" o               break;: }0 Y$ `8 R5 H1 r
           end. K; z" s; v! w1 \- x0 j3 t) t
       end 3 g$ V2 m/ b& c) O- F' m  M- u- B# f( T
       % 如果选取的行不是当前行,则交换两行
" P' s# u* F. _! q2 g; u3 Q- {       if(p~=i)
/ r& j! D7 f  w6 r         t=a(i,;
* |, \* W* T! h1 F" p- n2 d         a(i,=a(p,;7 k0 q( \' x$ q! w! w' K( [
         a(p,=t;& D% f9 S" r% u# ~1 t
       end
5 Y) v" e6 g' g/ ]2 H       % 高斯消元
: k1 d$ ^/ S3 U  E" t! U5 \       for j=i+1:n
: A" x9 a+ ~) F. _  \1 r  ?: n           a(j,i)=a(j,i)/a(i,i);  V8 a& l8 d/ C
           a(j,=a(j,-a(j,i)*a(i,;) A3 d6 d3 N8 M' S. H0 A6 e; d' Z) Q
       end
8 e! n5 n- o+ a- O   end
0 X7 R" t  ~# X2 A/ L7 W2 M   % 检查方程组是否有唯一解& j& N- h" k5 k3 y- e
   if (a(n,n)==0)
  {- G! m  \" I        error('方程组没有唯一解');
0 y0 O" e- x6 f, ^' B! k  }9 f7 a   end
$ Y% d! S' s+ n5 i2 S! S  @: K" J5 V6 n, d7 S7 B# k. s
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。2 I- i) f9 J5 Z* c) h
, d+ R! D0 u$ x( l# H
3.回代过程:
! J! \2 U9 e7 N+ O
: Z. p" e( w5 \4 L& p8 `- z   % 回代
& q4 T1 Y5 U7 Q5 F2 _( N   x(n)=b(n)/a(n,n);
( X3 C) s4 C& \$ a   for i=n-1:-1:1
! z! V7 l9 Y8 Y3 m. K- k7 C       sum=0;
5 f4 }' N, Y5 G" J$ ?) A, h       for j=i+1:n' e7 Z; \# j  `1 S$ y' z
           sum=sum+a(i,j)*x(j);/ k8 C" `: W6 G0 \7 [( y8 q0 V1 M
       end) N9 h1 L9 `, S/ y8 u) A
       x(i)=(b(i)-sum)/a(i,i);5 i2 A3 ~; e+ Z6 A3 V
   end6 o1 Q( w) m( J4 d' s1 F
! p% F+ y3 L& T* h0 l, M/ q
这个部分实现了回代过程,得到方程组的解向量 x。5 Y+ Z* ]6 h$ I& j# l1 C

& s4 k. ?% W0 Y. y1 x4.打印结果:9 C+ {$ j: Z6 F* V9 O0 J

( ~7 N6 ^8 I5 p$ F  [' ?   jie=x'3 ^* j2 `' Q$ }; J

/ J: N- U. K0 E1 x2 m  s$ [" S6 N最后,打印求解得到的解向量。
4 H/ s# {/ E/ X0 Y; m3 s在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。4 q. i, q9 K" v- B4 S
+ g5 U8 A/ ~  v/ J, R/ E7 ?. s
3 H% n0 Z; ]5 c/ S! Z( x6 J

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-10 04:10 , Processed in 0.455765 second(s), 55 queries .

回顶部