- 在线时间
- 472 小时
- 最后登录
- 2025-9-5
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7679 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2884
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1161
- 主题
- 1176
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
4 t5 x: \6 J$ s" F2 t' J
8 C2 }% ^& @' Y! ]! Z5 U& x1.矩阵初始化:
$ k4 I# }3 _# j7 f/ b. i4 o1 C, h2 U' Z3 U* A
a1=[2,-2,5;2,3,1;-1,4,1];; H- j% R' p+ R. Y; C. T+ M
b=[6,13,3]';2 o1 N. U. m1 o6 o1 u' o6 N9 q7 F; b
n=length(b); % 方程组大小为 n2 l; x6 K$ R* I2 d/ g* _8 }9 j% j
a=zeros(n,n+1);# ]2 g1 M) o b- c) h2 H9 e- l. r
a(:,1:n)=a1;7 O# `2 a$ @3 i, a @: o% m
a(1:n,n+1)=b; % 增广矩阵7 r. I0 D O4 O1 ]/ L* ?# V
( @1 R% U4 ~$ j& \8 P) K
这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。3 ]6 n/ U" H& u7 H: R7 u0 i2 M
% S0 ]3 B& H' d& p2 h6 G: B2.高斯消元过程:
. ?3 |/ O& v( z' t* y' ]
}% W( k! b. y# O for i=1:n-1
" b' ?! M9 s9 |) G5 Q! D7 s9 } % 确保主对角线元素不为0
& r: a2 l ~. I$ i' J* n if(a(i:n,i)==0)
3 E6 a9 z" U6 D5 A" F error('方程组没有唯一解');
# U4 M+ C# r; y end
" R( I6 K& `5 ]2 | % 选取主对角线元素不为0的行
7 t" D% W# T; |/ q for p=i:n9 J, r( I9 c: R0 h6 `/ [- W" a# a
if(a(p,i)~=0)
0 h6 U% h& R: O, _$ T+ ` K p;
! r1 s+ c" T1 a$ s9 w8 y5 \ break;0 `1 |5 |- y7 L) B s/ U# Z n1 n
end
9 Y, j2 W: H5 b+ q5 T end
$ A, t. x' \5 p2 g, m+ I3 b % 如果选取的行不是当前行,则交换两行* L" M; D- n1 h4 t5 u& ~0 V
if(p~=i)8 X( H* X0 _0 g$ ^
t=a(i, ;$ L$ I6 M' }% P7 A
a(i, =a(p, ;
- l/ z& @- {- z1 u* g a(p, =t;+ W# V& T( L+ i
end
/ j S4 ]+ Q! t( P % 高斯消元
6 G3 W k1 ?3 f. t/ b7 V& X/ l7 D for j=i+1:n6 S4 p: F+ T$ Q* P( x: x
a(j,i)=a(j,i)/a(i,i);
@; E0 A2 q8 n" ~( u' r5 r a(j, =a(j, -a(j,i)*a(i, ;
& V; X- [1 z/ f. p$ } end
; R, M# w" j! b7 f end
8 A$ d% F+ Y: D9 T) q4 O& w$ r % 检查方程组是否有唯一解( g% ]9 @1 t( A2 P$ y* ]1 A
if (a(n,n)==0)) y% B% a7 m6 o8 D0 q f# H: _
error('方程组没有唯一解');/ @6 H: o9 Y3 J/ {; n
end: e4 W: @8 }7 b4 l7 T% O
, R7 f1 o6 I N6 `# ?" W4 J& g
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
. C2 [1 K- Y; a$ i* Z t! }
2 }; O3 }% X9 G6 F4 t5 ~' U3.回代过程:! Y( a: X Z: \1 U
$ _ w9 N$ b: j5 {: N
% 回代
) ^2 S/ j2 p8 G# N& r x(n)=b(n)/a(n,n);9 P8 P6 e- S4 U) V, Q+ C
for i=n-1:-1:1
+ F2 P" T% S. _3 n5 \ sum=0;
! z4 B, `' W- l0 u for j=i+1:n1 `& d, x8 M* l2 L9 D& q
sum=sum+a(i,j)*x(j);
2 O- Q1 y: q2 `* y end6 k% l7 z6 s8 R8 s
x(i)=(b(i)-sum)/a(i,i);! A3 v% k7 L/ t3 `) G
end
6 n N: ^0 ~5 `( Z* U9 S" N' g Y3 C* M
这个部分实现了回代过程,得到方程组的解向量 x。; O& W0 Q& [$ ]# Y! T
3 `, Y% N; }4 P) T! B) S* C8 a4.打印结果:
8 F+ K- O2 K- u8 S2 S) ^+ P# r+ y8 L7 {. x8 i9 i3 c
jie=x'
2 x" f' p9 h. ]0 u- E0 F: p1 ^" H
+ E L; m4 k: Z! y+ A9 f) u9 u最后,打印求解得到的解向量。% Y4 o4 p6 ^8 `# @3 C9 m- q
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
/ `4 S$ ?" ^3 p; D8 ], B- [
; u- r5 r, j5 J+ R) Q4 Z0 k* K
3 O9 D R9 n8 j. | |
-
-
gauss.m
1.07 KB, 下载次数: 0, 下载积分: 体力 -2 点
售价: 1 点体力 [记录]
[购买]
zan
|