; A' S. T- A9 x6 n" U, ]# D+ O1.初始化:5 R/ W* U% Z6 e4 o! Z1 E6 E
9 O E' m' P0 u2 W! u1 a6 J5 T a = 0; " u% c- }9 V9 J; T! i8 Q b = 1;6 P4 ?) [/ w. K# ~# P' `
m = 10; % 空间划分5 I9 \& p9 y/ d9 I9 ?$ M: m
T = 0.5; % 最终时间# A3 x K; Z0 E* Q/ f
N = 1000; % 时间划分, ^$ W f I8 L/ C
af = 1; % 松弛因子. v) p3 O- k+ L$ \
f = inline('sin(pi*x)', 'x'); % 初始条件 " Z, j. z9 ]+ j' f2 K h = (b - a) / m; 2 d0 c2 z( B/ n- k, L k = T / N;. y1 \3 E" p) r4 q' }( z" k% w
lmd = af^2 * k / h^2; % 注意,lmd必须小于0.5,以保证差分法的稳定性, K9 ~/ Q/ S' T
x = linspace(a, b, m+1); 3 X \- N, @* N1 i/ D6 O& A L u(1,1:N+1) = 0;7 z; {$ N" Z/ H4 W
u(m+1,1:N+1) = 0;$ P t' a; @: x1 n5 U
" p9 m* p# m/ N
在这一部分,初始化了问题的各个参数,包括空间划分 m、最终时间 T、时间步长 k、松弛因子 af 等。 5 s4 N, y1 ~, X0 A# E6 p3 n; Q3 g6 h
2.显式差分法求解: 1 L" G% G! W/ F% k1 B ) D7 q$ w2 p. y9 |) ` for i = 2:m' b1 \5 A. ]4 d7 G
u(i,1) = f(a + (i-1) * h);! t' e- Q6 D1 s
end" n9 w" l) G3 A. c% s
. b m0 Y* Y6 u5 T" s- c! `2 G3 l for j = 1:N9 @, `* H; F4 U q
for i = 2:m/ q H% ~/ x% } d& p1 d" c k8 D
u(i,j+1) = (1 - 2 * lmd) * u(i,j) + lmd * (u(i+1,j) + u(i-1,j));; x, c. c2 T& Y( ~$ ^) D& ~/ b/ A( G
end# \$ y4 h* X5 L
end9 Y- l+ w6 S& v9 A
2 J* P2 ]# ~$ P这一部分使用了显式差分法来更新温度分布 u。在每个时间步长 k 中,根据已知的时间层(j)来计算下一个时间层(j+1)的温度分布。3 b( q: \' [' n2 c& X4 g1 W
! a8 O4 ~7 x5 Z3.计算精确解和误差:' F* x! `6 E$ @8 t
8 e0 j1 O) ~; ^ E8 @ true = exp(-pi^2 * T) .* sin(pi * x);, t4 `5 c) G, Z
error = abs(u(:,N+1) - true');* j5 R& Q3 W0 K
re = [x', u(:,N+1), true', error]; m& r7 A' V4 M& o9 x
# g6 r4 a/ T! m, W! I4 M
这里计算了精确解 true,并计算了数值解 u 与精确解之间的误差。* F; T' p/ ^' ]. \! H/ G0 Y
/ V y0 l0 A' K, ~! P9 M" Q" U/ {& J7 M4.输出结果: 8 ?# h. ^$ W- g, q6 c7 {. v5 j. W- j% P1 T# }
re 0 y1 n/ s! y2 d6 {" U8 [$ m1 h ; C. m! e0 M( @/ \5 S最后,输出结果包括空间点 x、数值解 u、精确解 true 以及它们之间的误差。' ?3 b ^4 k0 w0 G8 {8 F: s& j
需要注意的是,在使用显式差分法时,为了稳定性,需要确保所选取的时间步长 k 和空间步长 h 满足某些稳定性条件,其中 lmd 必须小于 0.5。 , ?* O) e+ j7 ]: G2 F ( n8 S/ B8 U. `) f* G- b, s6 O* G1 [' A* X