Question: Runge Kutta problem my code is not working? Any ideas?! Thanks!


Digits := 6:
f := (t,x,y) -> diff(x(t),t$2) = -x(t)/(x(t)^2+y(t)^2)^(3/2):
g := (t,x,y) -> diff(y(t),t$2) = -y(t)/(x(t)^2+y(t)^2)^(3/2):

t0 := 0:
x0:=1: y0:=0: tf := 3: n := 12:                 # number of subintervals
m := 2:                  # to print every mth step
h := evalf((tf - t0)/n): # step size

t:=t0: x:=x0: y:=y0:

fmt := `%10.0f %10.4f %10.4f \n`:

for i from 1 to n do
   k1 := f(t,x,y):
   l1 := g(t,x,y):                    # left-hand slopes
   k2 := f(t+h/2,x+h*k1/2,y+h*l1/2):
   l2 := g(t+h/2,x+h*k1/2,y+h*l1/2):  # 1st midpt slopes
   k3 := f(t+h/2,x+h*k2/2,y+h*l2/2):
   l3 := g(t+h/2,x+h*k2/2,y+h*l2/2):  # 2nd midpt slopes
   k4 := f(t+h,x+h*k3,y+h*l3):
   l4 := g(t+h,x+h*k3,y+h*l3):
   k := (k1+2*k2+2*k3+k4)/6:
   l := (l1+2*l2+2*l3+l4)/6:
   x := x + h*k:
   y := y + h*l:
   t := t + h:
   if trunc(i/m) =i/m then  printf(fmt,180*t,x,y) fi; od:
Error, (in f) invalid input: diff received 0, which is not valid for its 2nd argument
 

Please Wait...