x,y = var('x,y')
from sage.ext.fast_eval import fast_float
@interact
def _(f = input_box(default=y), g=input_box(default=-x*y+x^3-x),
xmin=input_box(default=-1), xmax=input_box(default=1),
ymin=input_box(default=-1), ymax=input_box(default=1),
start_x=input_box(default=0.5), start_y=input_box(default=0.5),
step_size=(0.01,(0.001, 0.2)), steps=(600,(0, 1400)) ):
ff = fast_float(f, 'x', 'y')
gg = fast_float(g, 'x', 'y')
steps = int(steps)
points = [ (start_x, start_y) ]
for i in range(steps):
xx, yy = points[-1]
try:
points.append( (xx + step_size * ff(xx,yy), yy + step_size * gg(xx,yy)) )
except (ValueError, ArithmeticError, TypeError):
break
starting_point = point(points[0], pointsize=50)
solution = line(points)
vector_field = plot_vector_field( (f,g), (x,xmin,xmax), (y,ymin,ymax) )
result = vector_field + starting_point + solution
html(r"$\displaystyle\frac{dx}{dt} = %s$ $ \displaystyle\frac{dy}{dt} = %s$" % (latex(f),latex(g)))
result.show(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax)