QQ登录

只需要一步,快速开始

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

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

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

1198

主题

4

听众

2976

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:1 h* J0 j3 Q, d2 P+ S

! u- }! w1 _' U1.矩阵初始化:
- E; J7 u! y6 H+ @' W8 a2 W# Y
* `& Z, D0 l) F! H& A   a1=[2,-2,5;2,3,1;-1,4,1];% w6 |- p' e, A, c
   b=[6,13,3]';
5 j  k" q, Z' k" Z, ?4 U   n=length(b); % 方程组大小为 n9 f- H' C4 ]& p' x: w2 o
   a=zeros(n,n+1);
) V/ f! E" d1 {: i   a(:,1:n)=a1;
5 a6 R9 n( ^' A( B5 a" X' Y1 q   a(1:n,n+1)=b; % 增广矩阵
+ N6 O- S! `9 M+ \/ q
1 a' \3 c6 l9 @5 x这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。: x4 }2 N( S  J, u: N
6 W+ I3 S+ a6 a( t: s8 X" I
2.高斯消元过程:* v1 Z4 y" I( W% x* K

5 F* K& s4 c2 W* ^   for i=1:n-1
4 ^0 |4 J9 ~: \1 c       % 确保主对角线元素不为09 N% {9 Q3 D+ n
       if(a(i:n,i)==0)4 e3 b2 c4 h* g$ W0 h4 C7 t7 x4 P
          error('方程组没有唯一解'); : C1 B0 d  r4 s0 Y& D2 j6 B
       end
1 G  |$ H1 s# G; j; b1 G5 h       % 选取主对角线元素不为0的行( ^2 D4 @- H" q$ W: H
       for p=i:n
6 m1 T. u$ ]8 E8 F# y" C           if(a(p,i)~=0)
$ O2 N4 L  B. `! ~. N               p;8 W1 x0 m' T8 d' R% E2 \* L) ~
               break;
0 o) e" }: m# w* D+ o  q           end
/ @7 H- H* @6 ~7 @" F       end
! ]( K7 e6 }0 O0 F6 a4 E       % 如果选取的行不是当前行,则交换两行
3 u% h# `( R% e8 j- d* A       if(p~=i)3 C5 L' F4 e7 Z4 q2 n2 ?" K" C
         t=a(i,;, ]. e! e" M4 @- x6 n7 P
         a(i,=a(p,;
! @$ A! k! a1 X7 k         a(p,=t;. d, h! o( c3 O; x/ h) T) P) V2 ?+ I5 |
       end
3 H1 }+ a& r2 m( [  ~& g! g       % 高斯消元8 b: K5 F9 W+ @8 l) l
       for j=i+1:n
+ v; r9 @5 C" ~7 c! g+ h5 c& C1 x! v           a(j,i)=a(j,i)/a(i,i);; W) G/ l' x" A4 r) Q+ S3 F# Y* l" k
           a(j,=a(j,-a(j,i)*a(i,;
- b- F7 s& h% _  Q       end
0 [7 d% Q; O! S9 y0 K   end7 Z2 s+ U7 P3 |- a; Z. T( n8 M9 t' ~
   % 检查方程组是否有唯一解' d* d% B8 [  @2 Y1 y
   if (a(n,n)==0)  r* u3 U; e$ k8 `" _9 h
        error('方程组没有唯一解');' M/ v% [' Q& ~: w/ J
   end% n4 t$ o: V) A/ L6 p; \5 e& ]

% `. o& a  r* G+ l5 X' D这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
% Q; W2 |7 W, S6 q0 ^! z8 X1 K/ H$ {# W
, U4 }6 T  y4 Y2 L5 {# z3.回代过程:
8 {2 |) X+ B, p2 s6 F+ J' y8 F  i; T4 [" J( A' \! q
   % 回代
0 e' c' w' T8 [$ H% q! ]8 E9 ~   x(n)=b(n)/a(n,n);, U, w  v" [' C: N# E: E
   for i=n-1:-1:1) i2 a- k4 M) I- A
       sum=0;
; W5 N( R9 \, ]2 l( B! [* B       for j=i+1:n1 Y1 B2 p; g; _4 x( R9 N
           sum=sum+a(i,j)*x(j);
/ W& Y2 u- r) k/ e* y: _       end
( Y* @7 b" z8 o: y3 {9 _, ?       x(i)=(b(i)-sum)/a(i,i);
! O* e2 |9 A9 E* A3 q+ M: s' q& y* f   end; P! d: D& w4 @6 [
2 U6 W4 o, [6 B, x7 @
这个部分实现了回代过程,得到方程组的解向量 x。
* u/ \% M0 |) u% o' r1 n) Y+ m4 ~  ]- ~7 K
4.打印结果:/ d, I, g8 J$ U) U( E

' k" N  d# `3 o" K8 V% X   jie=x'4 w# o: A  Z( Q* Z8 y% V0 z2 R: p
0 d, G' p3 E. e9 r0 j3 r  }
最后,打印求解得到的解向量。
: d/ ?' G' P  T1 [$ `8 [+ d在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
3 i; m7 Q8 {* q. q
0 y0 P/ u) v& l9 S" x9 |; H" X( X: o7 R4 P) B/ y% 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-9-12 14:55 , Processed in 0.291348 second(s), 55 queries .

回顶部