u, v, t = var('u v t')
@interact
def _(x = input_box(3*sin(u)*cos(v), 'x'),
y = input_box(sin(u)*sin(v), 'y'),
z = input_box(2*cos(u), 'z'),
_int_u = input_grid(1, 2, default = [[0,pi]], label = 'u -interval'),
_int_v = input_grid(1, 2, default = [[-pi,pi]], label = 'v -interval')):
global F, Fu, Fv, func, S_plot, int_u, int_v
int_u = _int_u[0]
int_v = _int_v[0]
F = vector([x, y, z])
S_plot = parametric_plot3d( F,
(u, int_u[0], int_u[1]),
(v, int_v[0], int_v[1]))
S_plot.show(aspect_ratio = [1, 1, 1])
dFu = F.diff(u)
dFv = F.diff(v)
Fu = fast_float(dFu, u, v)
Fv = fast_float(dFv, u, v)
ufunc = function('ufunc', t)
vfunc = function('vfunc', t)
dFtt = F(u=ufunc, v=vfunc).diff(t, t)
ec1 = dFtt.dot_product(dFu(u=ufunc, v=vfunc))
ec2 = dFtt.dot_product(dFv(u=ufunc, v=vfunc))
dv, ddv, du, ddu = var('dv, ddv, du, ddu')
diffec1 = ec1.subs_expr(diff(ufunc, t) == du,
diff(ufunc, t, t) == ddu,
diff(vfunc, t) == dv,
diff(vfunc, t, t) == ddv,
ufunc == u, vfunc == v)
diffec2 = ec2.subs_expr(diff(ufunc, t) == du,
diff(ufunc, t, t) == ddu,
diff(vfunc, t) == dv,
diff(vfunc, t, t) == ddv,
ufunc == u, vfunc == v)
sols = solve([diffec1 == 0 , diffec2 == 0], ddu, ddv)
ddu_rhs = (sols[0][0]).rhs().full_simplify()
ddv_rhs = (sols[0][1]).rhs().full_simplify()
ddu_ff = fast_float(ddu_rhs, du, dv, u, v)
ddv_ff = fast_float(ddv_rhs, du, dv, u, v)
def func(y,t):
v = list(y)
return [ddu_ff(*v), ddv_ff(*v), v[0], v[1]]
|
|
Click to the left again to hide and once more to show the dynamic interactive window
|