QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:% ]* a" l8 L1 ]
& T% a0 I1 ^/ O
1.矩阵初始化:
  m6 q" K! X$ ?7 _, @% r
" q% T, b( H. E& S! r. D   a1=[2,-2,5;2,3,1;-1,4,1];0 l1 F- j+ x7 D, Z! k
   b=[6,13,3]';
7 M' h2 Q4 d, Q  ^   n=length(b); % 方程组大小为 n/ S9 t& \# Y: V3 z( ?7 r
   a=zeros(n,n+1);
* q4 D' k& O! u! P4 L% P/ F   a(:,1:n)=a1;3 u0 C$ L6 \6 v  ]3 g  o/ w) v8 i, T
   a(1:n,n+1)=b; % 增广矩阵
6 E9 X! f$ X1 v' s: ^
6 n- v3 T) E6 m- u1 u这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。/ \$ x! u& m$ `0 {* Z4 Y" Q- }: j

1 @- a% Q: `4 k+ C2.高斯消元过程:
% P/ }1 `" q: w  q! W( P
: z$ C/ l$ `) x/ g+ O0 q2 h: e   for i=1:n-14 ]7 I, l( |; g- p1 |- G& F! }0 V3 E2 a
       % 确保主对角线元素不为0
  Z! b: f. ~6 B       if(a(i:n,i)==0)! b. \% l% {" t3 r
          error('方程组没有唯一解'); ; w0 C0 r8 R+ L& C4 n/ q
       end9 S, S% y- I/ @9 `! j
       % 选取主对角线元素不为0的行
; D( d+ Y; u) l6 t+ B: o       for p=i:n
- @+ o+ W; ~% u. w, u& C* Y           if(a(p,i)~=0)
0 l4 x2 z; [) S9 a, a: M1 s# I               p;
0 x% R; ?* y: J               break;: C+ ~# L. B  ?* h) V
           end. n/ L5 W+ S4 E' W- {& x- _; c, K
       end % w3 @7 Z0 V7 P, x+ M, m7 T
       % 如果选取的行不是当前行,则交换两行6 s  o# p% {' U: e
       if(p~=i)
2 y% O" W- ]5 y! y! V% _         t=a(i,;
+ m5 u: ^7 L8 ~1 ~! g         a(i,=a(p,;
' W$ V6 D; f4 n% r  h, @         a(p,=t;
. z- N# Z3 L& L4 k6 z       end# f* |& s8 x1 ]
       % 高斯消元
' }6 s- S4 c! J: t9 |# [       for j=i+1:n5 ?( c& T" Q4 t$ P8 @2 M
           a(j,i)=a(j,i)/a(i,i);
! \9 X& a+ u% N1 `7 n           a(j,=a(j,-a(j,i)*a(i,;
- P9 K3 r5 F) o       end
; J3 n7 H* {# i2 O: o3 c   end
, K7 \% I9 w! l- w" K. V   % 检查方程组是否有唯一解$ ~+ e9 q' e5 {  H! g5 a4 R( D# }
   if (a(n,n)==0)4 }# P+ a7 B& s! _/ d
        error('方程组没有唯一解');
2 d: Q4 N, p+ G# _7 Q   end
0 V% Z, S8 ]! z! W/ x, p4 j7 {7 w+ a) V. q
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
) a' j/ J5 ^8 Z& r# x% y" U, V' ~9 X/ [! l
3.回代过程:
9 h1 }' }- ~7 n" u' c9 n4 V5 Z1 |& T) W! m2 U) D
   % 回代3 z& T$ _% h: j! o
   x(n)=b(n)/a(n,n);
. |: B5 D7 j/ W, @4 s& u   for i=n-1:-1:1; C7 s' o( M) O" h
       sum=0;7 c% p0 m2 `. c! z. Q1 g$ {
       for j=i+1:n; {1 E. q5 T# z* l- N
           sum=sum+a(i,j)*x(j);4 p4 I1 ^7 O1 N# i1 M$ s! Q5 V# \, _
       end
$ ?  e- b6 e& ]4 r* v       x(i)=(b(i)-sum)/a(i,i);
. t3 J  M$ u# k# A   end# F& t- }4 n9 a/ F# |# t
8 u3 D, @& e% U0 r
这个部分实现了回代过程,得到方程组的解向量 x。
7 h: u" w: }! t: Y8 f) X% q# T) Z* D) U5 t
4.打印结果:
- Z6 y4 Z0 {1 j
2 {# t. B  r% L7 o8 s   jie=x'
! g. Q. c/ K" ^  z) ]; d
, v3 s- X" E2 t最后,打印求解得到的解向量。
9 F8 `6 ^. l+ k5 \在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。" }2 t0 P" Z  F

3 y6 z: t8 p4 P' |( U- P0 g
, T4 C$ u! ^& `& 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-8-1 17:07 , Processed in 0.697166 second(s), 55 queries .

回顶部