QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
3 n% E' y/ E8 n# ^' @6 y
& X; t3 a' W* a" T7 @, V1.矩阵初始化:  y2 m- D" a6 A" J7 {3 C) S; P- L6 {
) p% |/ E# p! g% h7 p1 D
   a1=[2,-2,5;2,3,1;-1,4,1];
' o& x- b0 b1 o   b=[6,13,3]';
+ k3 d* U6 @3 e8 B0 Y% S; J3 J   n=length(b); % 方程组大小为 n
+ H8 l) q9 x% C9 h- x& |$ y   a=zeros(n,n+1);
  M4 b% B8 j+ v1 k9 @' G1 K6 A   a(:,1:n)=a1;' |, P# i2 ?1 B
   a(1:n,n+1)=b; % 增广矩阵" y* ]' ^1 w1 B- Y

& t4 ~2 c3 {" D1 d  ~  ?这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。. i) Z/ b( J7 U$ c, _" g9 V& W, {

# w2 i" |7 o  p0 x6 x2.高斯消元过程:) D$ o3 B+ X4 V# Y% b. g
8 K% V4 c0 o$ o6 N, u  ~& {! r$ [
   for i=1:n-11 S# E. |/ K" d7 b1 K
       % 确保主对角线元素不为0
  e8 S7 j) e+ o       if(a(i:n,i)==0)
" a7 F5 h# W. ^' D          error('方程组没有唯一解'); : b" z6 U4 y+ N; `
       end
0 h+ Y/ T- {( t4 j) j2 Q0 ~( A* w       % 选取主对角线元素不为0的行
9 m- I. M2 H, F# i6 s" }2 }       for p=i:n& w# J- F! o* y) B' i
           if(a(p,i)~=0). c4 o/ g# a& `  |1 @
               p;% |' ]2 l' n9 {& v
               break;
0 ^5 X& l6 J& d0 f, h- E           end
/ H. Q; \% ~4 _' R/ Z6 t       end 0 u) g' r& K* H" p3 v
       % 如果选取的行不是当前行,则交换两行
8 Z) N8 O' a( m$ l9 h$ A' e       if(p~=i)
" p+ s# h+ T* k5 Q         t=a(i,;
' `' L  e% ?% O         a(i,=a(p,;8 X; {( @# O( g1 U9 r
         a(p,=t;
  C8 D! c5 u" t( h8 r       end
6 C8 k% _8 s4 N9 O& I       % 高斯消元
5 ?/ u/ e5 x9 T' I% f1 w       for j=i+1:n
+ @- t( P8 l7 B  @" ^           a(j,i)=a(j,i)/a(i,i);
6 F2 B( f. P7 s/ Q           a(j,=a(j,-a(j,i)*a(i,;
% W( A  e: Z6 k3 f# q' \% e" M       end, F  ~* [3 J6 p+ ~/ [, s
   end
/ x/ s4 ~7 k( a: Y   % 检查方程组是否有唯一解  s7 ]0 q0 M% |& l# j7 a- T
   if (a(n,n)==0)* t3 ?3 O: l2 F' c! D
        error('方程组没有唯一解');- ~: d4 z: @6 R, F% w# {
   end
& p, G0 G8 z" v7 X* u# K: R( M6 `
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
6 {) k8 e$ ?0 a# z  W" m) s4 [2 v4 C' a. U
3.回代过程:3 w( W2 M  U* |& Y- S

/ Q# `' e) x1 |8 B4 V6 X& U7 F2 q   % 回代8 I+ t; @& p) F: ^- G7 o
   x(n)=b(n)/a(n,n);
) z# G! i% U' Z  F8 y' B& a- h9 j0 W- h   for i=n-1:-1:1' }( r0 i3 U& v! h" l' F% x: M6 a
       sum=0;
; J/ @/ o- i7 W9 W. u) Y       for j=i+1:n' a7 _2 t9 {6 A- I7 X. o
           sum=sum+a(i,j)*x(j);, K8 y3 h3 |- \$ t! s6 d
       end. p1 a, k! ]6 k4 e6 J' @
       x(i)=(b(i)-sum)/a(i,i);  w" }+ h- z" h9 p7 K
   end
6 {  i3 Q9 z  h  v4 B: o4 ~/ v7 X' Z) M, y6 n7 x/ q
这个部分实现了回代过程,得到方程组的解向量 x。6 t9 \/ g# f& ?# Z2 r- v

+ Z0 B& v& S, L+ O' K4.打印结果:/ s* _; f) _* B' w6 B7 Y" {7 L% R

4 D( i% k, w9 j- c3 h   jie=x'5 Q1 V+ }3 N, Y! [0 z. C. L  O1 `

6 e  s, z0 H$ J1 V) s' M最后,打印求解得到的解向量。
' N; t8 s1 V4 i/ t" v" ?在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。: a0 A# f( ?' M4 q, H) r
8 S: c$ P& L" u" A+ t
1 Z" F+ v' T# l2 n# e9 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-4-14 02:38 , Processed in 0.327036 second(s), 55 queries .

回顶部