Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
3774 views
ubuntu2004
1
def generator():
2
def exp_ivp(t,y,yp,ypp):
3
# pick a,b for (D-a)(D-b)
4
a = randrange(1,6)*choice([-1,1])
5
b=a
6
while a==b:
7
b = randrange(1,6)*choice([-1,1])
8
# pick particular solution
9
k1 = choice([-1,1])*randrange(1,6)
10
k2 = 0
11
ode = shuffled_equation(ypp,-(a+b)*yp,a*b*y)
12
ivp_sol = (y == k1*exp(a*t)+k2*exp(b*t))
13
iv1 = k1+k2
14
iv2 = a*k1+b*k2
15
return {
16
"ode": ode,
17
"order": "2nd",
18
"y0": iv1,
19
"t0": 0,
20
"yp0": iv2,
21
"sol": ivp_sol,
22
"y": y,
23
"t": t,
24
"ex_im": "explicit",
25
}
26
def exact(t,y,yp,ypp):
27
n=randrange(2,5)
28
k=randrange(1,6)*choice([-1,1])
29
terms = [
30
y^n,
31
k*t*y,
32
]
33
f = sum(terms)
34
# pick initial values
35
ivs = [-1,1]
36
shuffle(ivs)
37
t0,y0=ivs
38
f0 = y0^n+k*t0*y0
39
ode = shuffled_equation(
40
terms[0].diff(t),
41
terms[1].diff(t),
42
terms[0].diff(y)*yp,
43
terms[1].diff(y)*yp,
44
)
45
return {
46
"ode": ode,
47
"order": "1st",
48
"t0": t0,
49
"y0": y0,
50
"sol": (f==f0),
51
"ex_im": "implicit",
52
"y": y,
53
"t": t,
54
}
55
def folin(t,y,yp,ypp):
56
# pick n for y=kx^n
57
n = randrange(2,6)
58
# pick initial value
59
t0 = choice([-1,1])
60
# pick coefficient
61
k = randrange(1,5)*choice([-1,1])
62
hom_sol = k*t^n
63
# particular solution
64
kp = randrange(1,6)*choice([-1,1])
65
m = n
66
while m==n:
67
m = randrange(1,5)
68
part_sol = kp*t^m
69
ts = n*part_sol-t*part_sol.diff()
70
ode = shuffled_equation(ts,t*yp,-n*y)
71
ivp_sol = (y==k*t^n+part_sol)
72
y0 = k*t0^n+kp*t0^m
73
74
return {
75
"ode": ode,
76
"order": "1st",
77
"t0": t0,
78
"y0": y0,
79
"sol": ivp_sol,
80
"ex_im": "explicit",
81
"y": y,
82
"t": t,
83
}
84
85
t,x,y = var("t x y")
86
xp = var("xp",latex_name="x'")
87
yp = var("yp",latex_name="y'")
88
xpalt = var("xpalt",latex_name="\\frac{dx}{dt}")
89
ypalt = var("ypalt",latex_name="\\frac{dy}{dt}")
90
ypalx = var("ypalx",latex_name="\\frac{dy}{dx}")
91
xpp = var("xpp",latex_name="x''")
92
ypp = var("ypp",latex_name="y''")
93
xppalt = var("xppalt",latex_name="\\frac{d^2x}{dt^2}")
94
yppalt = var("yppalt",latex_name="\\frac{d^2y}{dt^2}")
95
yppalx = var("yppalx",latex_name="\\frac{d^2y}{dx^2}")
96
variables = [
97
[t,y,yp,ypp],
98
[x,y,yp,ypp],
99
[t,x,xp,xpp],
100
[t,y,ypalt,yppalt],
101
[x,y,ypalx,yppalx],
102
[t,x,xpalt,xppalt],
103
]
104
shuffle(variables)
105
ivps = [
106
exact(*variables[0]),
107
folin(*variables[1]),
108
exp_ivp(*variables[2]),
109
]
110
shuffle(ivps)
111
return {"ivps": ivps}
112
113