Repetition 19. april 2004restart:Indl\346s differentialligningspakken og plottepakkenwith(DEtools):with(plots):Definition af ligning og begyndelsesv\346rdieqn:=diff(y(x),x)=y(x); ic:=y(0)=1;Man kan l\370se differentialligningen i Maple ved kommandoendsolve({eqn,ic},y(x));Retningsfelt plottes:dfieldplot(eqn,y(x),x=-1..1,y=0..3);Plot af l\370sning og retningsfelt sammen:q1:=dfieldplot(eqn,y(x),x=-1..1,y=0..3): q2:=plot(exp(x),x=-1..1,color=black):display({q1,q2});Eulers metode til l\370sning af differentialligning. Eksakt implementationmyeuler:=proc(f,x0,y0,h,N)
local k,x,y,pair,s,t;
x[0]:=x0:
y[0]:=y0:
for k from 1 to N do
x[k]:=x[k-1]+h:
y[k]:=y[k-1]+h*f(x[k-1],y[k-1]):
end do;
pair:=(s,t)->[s,t]:
zip(pair,convert(x,list),convert(y,list)):
end proc;Eksempel:g:=(x,y)->y;x0:=0;y0:=1;myeuler(g,x0,y0,1/2,2);with(plots):p1:=plot(myeuler(g,x0,y0,1/2,2),color=red):p:=plot(exp(x),x=0..1,color=black):display({p,p1});p2:=plot(myeuler(g,x0,y0,1/4,4),color=green):display({p,p1,p2});display({q1,p,p1,p2});Floating point Euler metodemyEuler1:=proc(f,x0,y0,h,N)
local k,x,y,pair,s,t;
x[0]:=evalf(x0):
y[0]:=evalf(y0):
for k from 1 to N do
x[k]:=evalf(x[k-1]+h):
y[k]:=evalf(y[k-1]+h*f(x[k-1],y[k-1])):
end do;
pair:=(s,t)->[s,t]:
zip(pair,convert(x,list),convert(y,list)):
end proc;Korrigeret Euler metodemyCorrEuler1:=proc(f,x0,y0,h,N)
local k,x,y,pair,s,t,k1,k2;
x[0]:=evalf(x0):
y[0]:=evalf(y0):
for k from 1 to N do
x[k]:=evalf(x[k-1]+h):
k1:=evalf(f(x[k-1],y[k-1])):
k2:=evalf(f(x[k-1]+h/2,y[k-1]+h*k1/2)):
y[k]:=evalf(y[k-1]+h*k2):
end do;
pair:=(s,t)->[s,t]:
zip(pair,convert(x,list),convert(y,list)):
end proc;Sammenlignings1:=plot(myCorrEuler1(g,x0,y0,1/2,2),x=0..1,color=blue):display({p,p1,s1});odeadvisor(diff(y(x),x)=x+y(x)^2);