数学建模社区-数学中国
标题:
二阶和四阶的泰勒展开法(Taylor's method)来数值求解常微分方程初值问题
[打印本页]
作者:
2744557306
时间:
2023-12-31 17:55
标题:
二阶和四阶的泰勒展开法(Taylor's method)来数值求解常微分方程初值问题
这段 MATLAB 代码实现了使用二阶和四阶的泰勒展开法(Taylor's method)来数值求解常微分方程初值问题,并将结果与精确解进行比较。以下是代码的主要解释:
: v% `' G3 N$ y8 B6 M
function y = Taylor(a, b, N, af)
* X5 [* I: o( l
h = (b - a) / N;
5 t6 |+ i& @: D0 I5 U
x(1) = a;
* r$ V5 s, g* t2 ~2 i) Q
y2(1) = af;
& O9 U4 G; A( o: v3 \
y4(1) = af;
" T3 b5 r' S; i/ Z, A, U
jqj(1) = af;
, D+ v3 R' }! a1 w
0 c+ t: q/ P" d: N4 W
for i = 2:N
, Y& B% t4 f8 B; G' ~& S7 a0 f! l# D
% 二阶Taylor法
0 P; q, W4 D/ ?6 @4 ?
y2(i) = y2(i-1) + h * ((1 - h/2) * (x(i-1) - y2(i-1)) + 1);
$ {+ }# \; Z* ~& x% S
" U" l" D/ j& R0 j1 Z: _
% 四阶Taylor法
" J; r* D0 v* N# ~- Y n
y4(i) = y4(i-1) + h * ((1 - h/2 + h^2/6 - h^3/24) * (x(i-1) - y4(i-1)) + 1);
s- J5 E; r7 r5 b
$ H% c; A; Y3 r: Y! v6 i
x(i) = a + (i-1) * h;
+ E7 X' Y: G) F! J
jqj(i) = x(i) + exp(-x(i));
/ Z8 t5 k% e* i" H
end
5 C9 I1 d7 Z& ], b. ~" }# G
1 n" e4 b) Y* ~' I4 I9 I
% 将结果输出为矩阵形式
+ P4 l% l8 H: z. s/ Y+ f4 y1 p H
result = [x', y2', y4', jqj'];
# N7 @/ e2 w" z2 e, f9 _ f
, N+ v& T- Z/ N" `# c7 E
% 绘制曲线
4 q, Y3 L/ |3 a; }2 N
plot(x, y2, 'r', x, y4, 'b', x, jqj, 'g');
7 k; ^3 o' U' D6 ^; l9 g
legend('Taylor2法', 'Taylor4法', '精确解');
& W/ E- \2 z2 v& |/ y8 V3 f
end
' t2 E0 ?/ w' v
" Q( ~, r' B8 @4 ~9 ^0 g+ h
该函数的输入参数包括求解区间 [a, b]、步数 N 以及初始条件 af。函数使用二阶和四阶的泰勒展开法来逐步求解微分方程。最后,结果以矩阵形式输出,并绘制了二阶Taylor法、四阶Taylor法和精确解的曲线。
7 x# a+ @7 c, \- t9 ~, f$ F* b! R
你可以调用这个函数,例如 Taylor(0, 1, 100, 1),其中参数表示解在区间 [0, 1] 上,步数为 100,初始条件为 1。
! Q6 Y+ n# |9 R$ T
: ~7 F$ Y! S$ A% H+ n
/ H3 L4 o" p5 y, P( W$ ]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5