数学建模社区-数学中国

标题: 二阶和四阶的泰勒展开法(Taylor's method)来数值求解常微分方程初值问题 [打印本页]

作者: 2744557306    时间: 2023-12-31 17:55
标题: 二阶和四阶的泰勒展开法(Taylor's method)来数值求解常微分方程初值问题
这段 MATLAB 代码实现了使用二阶和四阶的泰勒展开法(Taylor's method)来数值求解常微分方程初值问题,并将结果与精确解进行比较。以下是代码的主要解释:1 D( i; J, j1 y. Z+ g
function y = Taylor(a, b, N, af)
5 z1 J( T# i" J  f    h = (b - a) / N;
5 I  G/ v& e. }7 |    x(1) = a;# j' m! p4 J0 W/ S& Z
    y2(1) = af;
! U/ M% a6 g4 v$ b6 P    y4(1) = af;
  F. \- v  t* x3 z/ R" o    jqj(1) = af;
# v( t* P& Z6 W. T' j7 E# Q0 `1 I- n5 S* o/ |' p9 f$ t% K9 E' i
    for i = 2:N
. o; X0 |/ b. y5 w; P        % 二阶Taylor法
5 }; y+ G& I4 S+ K        y2(i) = y2(i-1) + h * ((1 - h/2) * (x(i-1) - y2(i-1)) + 1);" K; N4 u; \  I/ k
+ j# o2 G4 C7 ?6 @6 u+ p" ^
        % 四阶Taylor法
; z  z  h/ o& \4 W$ ?( X        y4(i) = y4(i-1) + h * ((1 - h/2 + h^2/6 - h^3/24) * (x(i-1) - y4(i-1)) + 1);
( B; b; [( r7 P0 K/ W- N8 _) `. F$ f  D0 B6 R
        x(i) = a + (i-1) * h;2 W# W' S" s# X* N3 B6 X/ G' c1 L
        jqj(i) = x(i) + exp(-x(i));
) X) C0 }9 L" {2 |. p# `    end
- \; E9 N, T* n
5 Y* `' x% x  f0 j# `$ Y1 q( s    % 将结果输出为矩阵形式
" n4 b7 E' f# D& \4 g5 x" ^) J    result = [x', y2', y4', jqj'];
  z& F9 ^* o0 s! E& K# y& g
+ j. I4 {& R. o( v5 A2 u- {    % 绘制曲线
4 ^' B9 s6 x" w) z    plot(x, y2, 'r', x, y4, 'b', x, jqj, 'g');/ I4 @, Y& M* B
    legend('Taylor2法', 'Taylor4法', '精确解');
4 }" t% m2 x( i# nend" o; {3 y1 ~$ s+ X
& m- z3 i7 ?. p; V1 ~! A1 T
该函数的输入参数包括求解区间 [a, b]、步数 N 以及初始条件 af。函数使用二阶和四阶的泰勒展开法来逐步求解微分方程。最后,结果以矩阵形式输出,并绘制了二阶Taylor法、四阶Taylor法和精确解的曲线。
5 A4 k# \0 ^. m  ?你可以调用这个函数,例如 Taylor(0, 1, 100, 1),其中参数表示解在区间 [0, 1] 上,步数为 100,初始条件为 1。# E- r1 e# S' S6 r) o+ h% O
% `) t* e" }) F" X3 |. ^

) U( v$ i: k7 ~1 ^4 R% Z. d




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5