- 在线时间
- 479 小时
- 最后登录
- 2026-5-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7813 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2931
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1173
- 主题
- 1188
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
6 j* _; O i, V3 c9 E7 C" p k( J3 ^0 w" f8 c' v; ?4 |
1.矩阵初始化:' ~( s' V7 R/ Z+ Y; b& D
. O/ Q- v% G( W Q
a1=[2,-2,5;2,3,1;-1,4,1];
/ Q. S3 ?3 k. m: e b=[6,13,3]';5 \- t8 ?" N# m& k3 |( t- Y
n=length(b); % 方程组大小为 n
5 p9 p" r+ E/ A5 _! A& z a=zeros(n,n+1);
+ e6 X2 c6 K- C: m, w2 Y a(:,1:n)=a1;
o/ r) a7 |( r a(1:n,n+1)=b; % 增广矩阵
1 W. D8 E! Q( e/ b" N9 r* ?/ d j4 p j
1 B/ Z5 O8 m1 p0 R这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。; \- y" N& t0 s/ t& D3 X- v8 ~3 ]
+ ]/ D0 a0 C1 G4 C/ U0 i7 E4 s2.高斯消元过程:
+ {5 `& }0 B# e" v$ q- Z
. S8 ?( O: ], y3 z3 e* l for i=1:n-1
6 p6 L. r1 Y4 L! O % 确保主对角线元素不为0
& @4 k# a% g# n' R/ L4 a% `3 T4 g if(a(i:n,i)==0)
: t; a& q% s1 `$ m error('方程组没有唯一解');
# H$ Z- T7 ?3 t end
& ^* \7 J2 v+ G$ _2 M( s6 E( z % 选取主对角线元素不为0的行
, P# E" x7 N$ d2 B for p=i:n/ G* X' g1 _) J F1 W* L
if(a(p,i)~=0)
% q; G1 l6 |' D p;0 p! [' K5 H7 S7 E5 v& o$ H
break;
8 d; q7 L8 a8 A+ o+ k end" e; m2 d8 X) P4 [4 ^6 u
end
6 j* p( y7 d5 w8 c. Q, i, L % 如果选取的行不是当前行,则交换两行( B9 F3 o0 S: ^% Y
if(p~=i); n+ }! g$ B$ C6 C. ]
t=a(i, ;
0 F: w& v. c" ]1 m8 ? a(i, =a(p, ;& O+ a, f2 E: z) m: q) i1 B1 [
a(p, =t;
3 ]1 G' v6 G: q, v1 m9 X Z) I( a7 E end% S& g! u( M* D# V* @
% 高斯消元. m8 s: C: W) u" }1 z( A b! N
for j=i+1:n
& y/ i' t5 h& }* V j. R; q: \ a(j,i)=a(j,i)/a(i,i);
|2 X+ J3 U4 C a(j, =a(j, -a(j,i)*a(i, ;* s/ p% u2 G8 u: o! u5 X% Q4 K
end( _7 b" h( g8 A9 A9 o- Y
end+ ^4 P) q# H! l1 q" r
% 检查方程组是否有唯一解
( E# t- f3 O" z) ^/ ^) q if (a(n,n)==0)
+ \" M# G3 A' k! M* [/ h error('方程组没有唯一解');
8 W3 @. j% _& c6 z end
! @) K& R" X$ W# j' }4 \( [- F9 z/ D6 E1 d7 D
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。2 I" p$ V1 s# Z; w! ?- ]
2 S3 ~6 L6 S) O8 y- }
3.回代过程:5 z. X8 r- W. f' e3 `
7 l b/ N# ?! ]1 S % 回代
- V' w8 T9 \1 f9 e x(n)=b(n)/a(n,n);6 j: L: X- p# \2 t
for i=n-1:-1:17 s. j3 B/ n" n5 N
sum=0;
! N# @5 p0 {( a5 i for j=i+1:n
4 L% `1 m# e4 k$ {% A sum=sum+a(i,j)*x(j);
( M, \! d$ ?2 i! \; a end6 |& [+ i7 ]% j( u, F& A& i9 r
x(i)=(b(i)-sum)/a(i,i);
) t1 D0 F' c* z8 y% N end, |5 X% _+ Z/ d! e6 b
! ^+ s8 X7 S' S+ m x1 I
这个部分实现了回代过程,得到方程组的解向量 x。7 U6 ~9 p: I- d6 [
3 T2 K, v$ R4 C; G4 }' }0 q% x9 i4.打印结果:
+ h6 l* Y/ q! |% l( j% p' J1 @: u* h2 s# P2 R$ ~
jie=x'
: `6 H$ J/ {; \- g6 E' c' b
. e$ Q& k% W; V# a. F+ p; l+ ? R最后,打印求解得到的解向量。4 n5 b8 v* |( E3 s" m f& b
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。. _' q, h% J0 J) v, [7 {9 M; W
$ C3 l$ B1 i/ p4 _" r
* L5 O* P2 W/ p6 J. H |
-
-
gauss.m
1.07 KB, 下载次数: 0, 下载积分: 体力 -2 点
售价: 1 点体力 [记录]
[购买]
zan
|