Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
| Download
Views: 1794
Image: ubuntu2004
1
def generator():
2
t = var("t")
3
s = var("s")
4
y,yp,ypp = mi_vars("y","y'","y''")
5
d = dirac_delta
6
u = unit_step
7
8
def gen_delta():
9
"""
10
Generates a nice IVP involving delta(t-a)
11
"""
12
a = randrange(1,4)
13
b = randrange(1,4)
14
m = choice([-1,1])*randrange(1,5)
15
n=m
16
while n==m:
17
n = choice([-1,1])*randrange(1,5)
18
k=m*b^2
19
y_0=choice([-1,1])*randrange(1,6)
20
if randrange(0,2)==0:
21
y_0=0
22
else:
23
n=0
24
yp_0 = n*b
25
ode = shuffled_equation(ypp,b^2*y,-k*u(t-a))*randrange(2,4)
26
ly = (y_0*s+yp_0)/(s^2+b^2)+k*exp(-a*s)/(s*(s^2+b^2))
27
ly_simp = y_0*s/(s^2+b^2)+yp_0/(s^2+b^2)+m*exp(-a*s)/s-m*s*exp(-a*s)/(s^2+b^2)
28
partial_fractions = (1/(s^3+s*b^2)==(m/k)/s-(m*s/k)/(s^2+b^2))
29
sol = (y==y_0*cos(b*t)+n*sin(b*t)+m*u(t-a)-m*cos(b*(t-a))*u(t-a))
30
31
return {
32
"ode": ode,
33
"y0": y_0,
34
"yp0": yp_0,
35
"ly": ly,
36
"ly_simp": ly_simp,
37
"sol": sol,
38
"partial_fractions": partial_fractions
39
}
40
41
def gen_u():
42
"""
43
Generates a nice IVP involving u(t-a)
44
"""
45
a = randrange(1,4)
46
m = choice([-1,1])*randrange(1,5)
47
n=m
48
while n==m:
49
n = choice([-1,1])*randrange(1,5)
50
alpha = choice([-1,1])*randrange(1,5)
51
beta = choice([-1,1])*randrange(1,5)
52
k=alpha*(m-n)
53
yp_0 = beta*(m-n)
54
y_0=0
55
b=-m-n
56
c=m*n
57
ode = shuffled_equation(ypp,b*yp+c*y,-k*d(t-a))*randrange(2,4)
58
ly = (y_0*s+yp_0)/(s^2+b*s+c)+k*exp(-a*s)/(s^2+b*s+c)
59
ly_simp = beta/(s-m)-beta/(s-n)+exp(-a*s)*alpha/(s-m)-exp(-a*s)*alpha/(s-n)
60
partial_fractions = (1/(s^2+b*s+c)==(alpha/k)/(s-m)-(alpha/k)/(s-n))
61
sol = (y==beta*exp(m*t)-beta*exp(n*t)+alpha*exp(m*(t-a))*u(t-a)\
62
-alpha*exp(n*(t-a))*u(t-a))
63
64
return {
65
"ode": ode,
66
"y0": y_0,
67
"yp0": yp_0,
68
"ly": ly,
69
"ly_simp": ly_simp,
70
"sol": sol,
71
"partial_fractions": partial_fractions
72
}
73
74
return choice([gen_delta(),gen_u()])
75