在Mathematica中编写Euler方法

时间:2010-10-24 02:20:00

标签: math wolfram-mathematica ode

我想编写一个在其中有一个循环的函数,它预先形成了Euler方法所需的操作。我的糟糕尝试在它下面。

In[15]:= Euler[icx_,icy_,h_,b_,diffeq_] :=
curx;
cury;
n=0;
curx = icx;
cury = icy;

While
[curx != b, 

    Print["" + n + " | " + curx + cury];
    n++;

    dq = StringReplace[diffeq, "y[x]" -> curx];
    dq = StringReplace[dq, "x" -> cury];
    curx+=h;
    cury=cury+h*dq;


]


In[21]:= Euler[0, 0, .1, 1, e^-y[x]]

Out[21]= icx

2 个答案:

答案 0 :(得分:1)

要在Mathematica中通过Euler方法求解ODE,代码为:

Clear["Global`*"]; 
s = NDSolve[{y'[x] == Exp[-y[x]], y[0] == 0}, y, {x, 0, 1}, 
    Method -> {"FixedStep", Method -> "ExplicitEuler"}, 
    MaxSteps -> 20000];
Plot[Evaluate[y[x] /. s], {x, 0, 1}, PlotRange -> Full]

否则,如果您正在处理作业,请在标签上注明。

HTH!

答案 1 :(得分:0)

以下是没有任何显式循环的解决方案示例。

如果需要循环,我允许你自己动手。

EulerODE[f_ /; Head[f] == Function, {t0_, y0_}, t1_, n_] := 
 Module[{h = (t1 - t0)/n // N, tt, yy},
 tt[0] = t0; yy[0] = y0;
 tt[k_ /; 0 < k < n] := tt[k] = tt[k - 1] + h;
 yy[k_ /; 0 < k < n] := 
 yy[k] = yy[k - 1] + h f[tt[k - 1], yy[k - 1]];
 Table[{tt[k], yy[k]}, {k, 0, n - 1}]
 ];

ty = EulerODE[Function[{t, y}, y/t + y^2/t^2], {1, 1}, 2, 100] ;

Plot[Interpolation[ty][t], {t, 1, 2}]