%hide
#auto
@interact
def _(initial=input_grid(1,3,default=[-1/12,2,5],label="y(0), y'(0),t_max",width=10),
abc=input_grid(1,3,default=[3/32,0,12],label="m,gamma,k", width=10)):
y0,y0p,tmax = initial[0]
a,b,c = abc[0]
plots = []
a = float(a)
b = float(b)
c = float(c)
soln_nums = solve_diffeq(a,b,c,t0,y0,y0p)
discriminant = soln_nums[0]
if discriminant > 0:
r1,r2,c1,c2 = soln_nums[1:]
soln = c1*e^(r1*t)+c2*e^(r2*t)
linear_combo = ["%se^{%st}"%(RF(constant),RF(rval)) for constant,rval in ((c1,r1),(c2,r2)) if constant !=0]
soln_n = "$y(t) = " + '+'.join(linear_combo) + "$"
elif discriminant == 0:
r1,c1,c2 = soln_nums[1:]
soln = (c1+c2*t)*e^(r1*t)
linear_combo = ["%s%s"%(RF(constant),y) for constant,y in ((c1,"e^{%st}"%RF(r1)),(c2,"te^{%st}"%RF(r1))) if constant !=0]
soln_n = "$y(t) = " + '+'.join(linear_combo) + "$"
else:
lam,mu,c1,c2,R,delta = soln_nums[1:]
soln = e^(lam*t)*(c1*cos(mu*t)+c2*sin(mu*t))
linear_combo = ["%s%s"%(RF(constant),y) for constant,y in ((c1,"\cos(%st)"%RF(mu)),(c2,"\sin(%st)"%RF(mu))) if constant !=0]
soln_n = "$y(t) = e^{%st}("%RF(lam) + '+'.join(linear_combo) + ")$"
soln2 = R*e^(lam*t)*cos(mu*t-delta)
soln2_n = "%se^{%st}\cos(%st-%s)"%(RF(R),RF(lam),RF(mu),RF(delta))
plots.extend([plot(R*e^(lam*t),(t,0,tmax),rgbcolor=(0.1,0.1,0.1)),
plot(-R*e^(lam*t),(t,0,tmax),rgbcolor=(0.1,0.1,0.1))])
line1 = "$\\left(%s \\right)y''+\\left(%s \\right)y'+\\left(%s \\right)y=0; \quad$"%(latex(a),latex(b),latex(c))
line1 += "$y(%s)=%s,\quad y'(%s)=%s$"%(latex(t0), latex(y0), latex(t0), latex(y0p))
line1 += "$\quad$ discriminant = $%s$"%latex(discriminant)
line2 = soln_n
if discriminant < 0:
line2 += "$\quad = \quad "+soln2_n+"$"
html(line1)
html(line2)
plots.append(plot(soln,(t,0,tmax)))
show(sum(plots))
|
|
| y(0), y'(0),t_max | |
| m,gamma,k | |
|
CPU time: 0.00 s, Wall time: 0.00 s
Click to the left again to hide and once more to show the dynamic interactive window
|