QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
- g" t$ O) B6 P) ?
5 B, m. i" t8 h) I8 G- J. Z* J, N1.矩阵初始化:- K2 X- E0 A% g* i/ W. o

9 b9 H+ m0 q: U1 ~   a1=[2,-2,5;2,3,1;-1,4,1];
4 X9 o8 |6 b: X7 }( u/ @+ X; e, X   b=[6,13,3]';
& S7 n3 W# [$ _( ^9 e  N   n=length(b); % 方程组大小为 n1 b% n4 Q3 y- ]3 A+ I
   a=zeros(n,n+1);
+ d' V& I: K$ A/ b   a(:,1:n)=a1;  O6 X. F" B8 @8 r- q+ ~2 I- j
   a(1:n,n+1)=b; % 增广矩阵! f! e' s: B% d2 f4 e# F
( z  i5 V, M5 v/ }! r- @
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。# U9 {0 T. A! v1 b3 |, z3 m) p) @

6 \  ^6 o7 q" D$ C' H& z2.高斯消元过程:! R; [) o! ]' B" R

3 M' U0 ?% f% o   for i=1:n-1" @0 u4 a* `  Y
       % 确保主对角线元素不为0
0 q/ Z  L7 \% U$ I; h! l3 G" W4 i+ W       if(a(i:n,i)==0)
: ~6 s1 Y$ w* |0 r2 O  G' l( ~          error('方程组没有唯一解'); ' @, G5 L( u7 g. l9 v
       end* ^) S" \& y2 y
       % 选取主对角线元素不为0的行: G9 l% C4 d# X: |3 @% A
       for p=i:n! z: S# k, J6 t# ^. F5 m3 X
           if(a(p,i)~=0)
# `% c' U: D& f* i               p;
, u& x/ p6 a  X8 @               break;6 D; K! a$ s" K9 R" H1 X
           end6 G# Q5 ?+ |0 ]( r* ]+ Y3 b
       end : m9 T) K; O- _9 Q6 `, S% y
       % 如果选取的行不是当前行,则交换两行
; a$ C8 ]7 N% U* C2 ^& O9 ^       if(p~=i)( A9 d* X: ~$ }: B/ L
         t=a(i,;6 B# v. f* E0 o' f8 J
         a(i,=a(p,;
9 w7 Q9 H0 [* {         a(p,=t;- Y! \5 u" ]& U
       end/ F5 K# v5 }$ ~. H) A0 w( [7 O  g9 B9 F
       % 高斯消元4 B! M# y) y2 e. Y) ]* N& g
       for j=i+1:n
7 }! d8 S& Q- a* H: K8 W: k           a(j,i)=a(j,i)/a(i,i);, w( Y; Y  P) `+ B+ q4 ]& l1 H
           a(j,=a(j,-a(j,i)*a(i,;9 m/ n0 y' y3 [0 Y+ I' i8 p
       end
; D$ z/ }7 r2 r' U8 H7 g   end
- i9 K+ _" P  i   % 检查方程组是否有唯一解
; s. O! d) K3 {4 Q' Y) h) P   if (a(n,n)==0)
* r2 X9 ?0 T- w& [        error('方程组没有唯一解');
! I+ G' t0 c3 I  u: [" g   end
. r9 A) d8 ~0 H0 q3 F4 u1 h$ B5 q/ i( n& o3 ]+ Y
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。$ a2 C5 m8 R+ D

/ p- X1 W- R% R0 u* w/ d3.回代过程:1 L0 O9 K0 F5 Q2 I" j/ H; G

. H3 r6 L! |7 p( ~   % 回代1 _/ x' W( z1 o4 Q/ U+ \; H; {7 u
   x(n)=b(n)/a(n,n);
. ]- }4 s. k7 s8 d4 o   for i=n-1:-1:1" v7 G& t7 x' W: A% u
       sum=0;. @9 x# h) u. F
       for j=i+1:n
3 R* S1 s) C( V$ w9 M6 Q, a           sum=sum+a(i,j)*x(j);
% q7 T( V* ?* \/ |$ ]       end
" D- X: r2 [8 x! n. B1 ]) S) E       x(i)=(b(i)-sum)/a(i,i);
6 @! c) i. Z- p   end
2 @: [: g- P0 C4 F5 a9 H" B# p& {' E7 C
这个部分实现了回代过程,得到方程组的解向量 x。: h, f1 {; |7 r1 C3 J
: u( W! s; P! |3 m( |
4.打印结果:) ^6 `" Y4 h& N- y7 y( g& b7 ?

% _5 J3 S% J% P9 _3 U0 V) T   jie=x'
' _: ?. f' v8 l  ^9 q
: q5 U0 O# W3 X& r& w最后,打印求解得到的解向量。- ]1 p0 U4 q  o  F
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。6 P' d" ~* k  H, K

! m9 t5 k# I/ z6 x3 |! `6 T- H4 m' [- n: @+ S1 G, B% i

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-30 22:09 , Processed in 0.428142 second(s), 55 queries .

回顶部