Re: Programming Euler's Method into Mathematica
- To: mathgroup at smc.vnet.net
- Subject: [mg82186] Re: Programming Euler's Method into Mathematica
- From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
- Date: Sun, 14 Oct 2007 06:11:55 -0400 (EDT)
- References: <fepva6$ik4$1@smc.vnet.net>
Hi, may be it help you: Clear[EulerStep, EulerHeunStep, SimpleNDSolve] EulerStep[y_] := y + h*(f @@ y) EulerHeunStep[y_] := Module[{yast, k1}, k1 = f @@ y; yast = y + h*k1; y + h*((f @@ yast) + k1)/2 ] SimpleNDSolve[eqns : {_Equal ..}, init_, var_List, {t_, t0_, step_, n_Integer}, method_: EulerStep] := Block[{dvar, h = step, f}, dvar = D[#, t] & /@ var; f = First[dvar /. Solve[eqns, dvar]]; f = Function @@ ({var, f} /. a_[t] :> a); Prepend @@@ Transpose[{ NestList[method, init, n], Table[t0 + h*i, {i, 0, n}]}] ] and call it with eusol1 = SimpleNDSolve[{q'[t] == p[t], p'[t] == -q[t]}, {0.0, 1.0}, {q[t], p[t]}, {t, 0, 0.1, 180}, EulerStep]; Regards Jens Tara.Ann.Lorenz at gmail.com wrote: > I am trying to use Euler's Update Method to Numerically Integrate a > Function (I know how to use NDSolve for this case, but I want to > demonstrate an approximation method as well). For those familiar with > neuroscience, I am trying to model the Hodgkin Huxley Equations. I > have four ordinary differential equations (ODE) that I have written in > discrete form using Euler's Method. I am trying to solve for one of > these discrete equations, V, which is a function of the other three > differential equations (n, m, and h). All four equations are also a > function of time. Essentially, the command for NDSolve for this case > is in the following form: NDSolve[{ODE1, ODE2, ODE3, ODE4, > V[0]==0,n[0]==1, m[0]==2, h[0]==3},{V,n,m,h},{t,0,50},MaxSteps->1000] > > Instead of the above ODE input, I want to use Euler's Method. (i.e. V(t > +delta_t)=V(t)+delta_t("stuff"). Now, the code below works for a > function of x and y. MY QUESTION IS: how would I change this code to > apply to my situation in which I want to solve for V[t] but it is a > function of n[t], m[t], and h[t]. > > I would appreciate any hints/clues/suggested programs. I know that > Mathematica has a built-in "Explicit Euler" Method, but I would like > to develop the program myself. I believe I am making a small mistake > that is preventing my success. > > Thank you, > Tara > > The following program code works for a function f(x,y): > euler[f_,{x_,x0_,xn_},{y_,y0_},steps_]:= > > Block[{ xold=x0, > yold=y0, > sollist={{x0,y0}}, > x,y,h > }, > > h=N[(xn-x0)/steps]; > > Do[ xnew=xold+h; > ynew=yold+h*(f/.{x->xold,y->yold}); > sollist=Append[sollist,{xnew,ynew}]; > xold=xnew; > yold=ynew, > {steps} > ]; > > Return[sollist] > >