- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:9 S( q! I, S/ h6 ~" S# G5 p& y
' n/ n8 R5 x( E6 A1.矩阵初始化:
" ^( Z/ e! C6 M% A7 W
; C! y; F2 G S2 k0 b4 y a1=[2,-2,5;2,3,1;-1,4,1];$ s% ]' T6 L5 E' ~/ B. t
b=[6,13,3]';# H1 ~/ t' Z& E
n=length(b); % 方程组大小为 n
% X: h6 i7 N7 \$ ^- O. q& r a=zeros(n,n+1);) ^2 d0 K5 u' d* n
a(:,1:n)=a1;4 B, X* a( Y5 d# x; O
a(1:n,n+1)=b; % 增广矩阵4 S$ r& r* d/ L) Y
0 D2 f! a# G) c" Y3 j$ t这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。& U# y% Z! p/ H
# o0 Z, F/ G9 l) A p- W0 q
2.高斯消元过程:
; B5 r/ F* I5 q& S1 O8 J! G, I5 z! x, W
for i=1:n-18 A! q# s0 s* R. X6 C
% 确保主对角线元素不为01 o, c9 t& f3 I/ D4 o9 l4 H& u
if(a(i:n,i)==0)
) U. E+ y8 ~9 R' f0 d/ B' _" w error('方程组没有唯一解'); 5 k* f# {7 G* j E; w9 ~8 w1 |) L0 f
end" A7 Q) o9 S; J1 d( m$ i/ z
% 选取主对角线元素不为0的行# u4 ]% ^) h3 m4 c4 L" t. J- ]
for p=i:n
3 R+ A6 ~: B7 a$ R if(a(p,i)~=0)
9 s5 G. @4 B' l3 ^& z p;3 L/ E0 y6 f: @/ E$ J" Q
break;+ n" I& o u X" X3 h
end. o3 U/ {% ~1 J8 _- i3 r3 J. `
end
- |8 T) |2 A- W: R( h) i0 X, b % 如果选取的行不是当前行,则交换两行
/ q2 v$ g. `+ Y0 L( A4 ]4 Z/ e' l$ J4 [& u if(p~=i)
" p7 |3 e, L/ u/ J! k4 a t=a(i, ;
; d- D% `! c; b$ A# |+ b! @ a(i, =a(p, ;
/ P1 X9 V# t; Z/ s& x9 z6 r a(p, =t;4 p2 {1 R- B/ L5 [3 g9 N
end
) m" a! V. E% q+ I9 L) F % 高斯消元
" o" G1 i/ _1 }; d4 K. L" R; y+ @0 U for j=i+1:n
" D, \+ U ?0 u$ u: a, s! R a(j,i)=a(j,i)/a(i,i); Z7 t4 E; k/ S; ?. h" h+ u
a(j, =a(j, -a(j,i)*a(i, ;
0 _1 ~0 \& A$ ~6 g' \ end
& l$ o8 e( Y5 B8 F+ F$ a+ V( ` end4 q r$ }8 t* W- m' {# {# U/ a
% 检查方程组是否有唯一解4 O y9 Z' Q( X! W R+ P
if (a(n,n)==0)
. r+ B: @" d. t, E error('方程组没有唯一解');
$ i" k0 |* U+ k0 B end
r1 \+ G, B4 p! O+ ~( p& N; }& u+ O& p8 x7 T# X
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
* R( J; `) y- e& s4 w0 Z9 _8 [1 Y6 ]4 C% l" x3 P9 U: x% g- `; q: X
3.回代过程:
* H, Y6 T' j1 V4 o9 |
& }' l- X2 H" w- c g9 ]4 Z % 回代3 l& I. y$ I: F$ @6 ^7 ~5 ` S5 r$ n- Z
x(n)=b(n)/a(n,n);% S! P2 a- M# ^7 G2 ]# V
for i=n-1:-1:1
$ ]' k0 g. J# g& \ sum=0;& L" g7 g" h5 e2 [5 V8 y
for j=i+1:n
$ @& b" z3 ^0 F! K/ F sum=sum+a(i,j)*x(j);9 Q% f; w h3 p1 [
end
2 p! \4 c7 |- r! ]* w4 Y; a x(i)=(b(i)-sum)/a(i,i);) D1 n7 C( @3 P c6 B" v' }" ~
end. E/ ~1 }/ Z' y3 T" I3 A1 p
' |" Y3 B! R& u# q) B5 ]这个部分实现了回代过程,得到方程组的解向量 x。3 M. [8 P$ s0 E# e: e
2 X6 [& ^% L% J8 T2 |( H4.打印结果:
' N7 ?/ L2 m' g6 q3 t \1 t# S3 u- `9 q( K! h3 n
jie=x'
/ i' T1 d$ F8 }! e$ y' i( b& C$ L1 U- D2 T2 L$ L2 e ^
最后,打印求解得到的解向量。
, A$ [' t$ z" i# \在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
/ E9 p& ?: I2 e- [8 c4 Y4 H8 \# s9 f: F
* z" U9 e1 R0 J( V6 Z7 f6 c
|
-
-
gauss.m
1.07 KB, 下载次数: 0, 下载积分: 体力 -2 点
售价: 1 点体力 [记录]
[购买]
zan
|