Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
20865 views
1
def generator():
2
x,xp = mi_vars("x", "x'")
3
4
# pick a,b for x'=k*t^p(t-a)(t-b)
5
k = choice([-1,1])*randrange(2,4)
6
p = randrange(4)
7
a = randrange(-6,-1)
8
b = randrange(2,6)
9
f = k*x^p*(x-a)*(x-b)
10
ode = (xp == f.expand())
11
12
version = choice(["zero","even","odd"])
13
if version == "zero":
14
p = 0
15
elif version == "even":
16
p = choice([2,4])
17
else:
18
p = choice([1,3])
19
20
t0 = (a + 0.5 + random()*(-a-1)).n(digits=2)
21
x0 = (0.5 + random()*(b-1)).n(digits=2)
22
if choice([True,False]):
23
t0,x0 = x0,t0
24
25
if (version == "zero") and (k<0):
26
a_label = "source/unstable"
27
z_label = "NA"
28
b_label = "sink/stable"
29
math_lim = b
30
real_lim = b
31
elif (version == "zero") and (k>0):
32
a_label = "sink/stable"
33
z_label = "NA"
34
b_label = "source/unstable"
35
math_lim = a
36
real_lim = a
37
elif (version == "even") and (k<0):
38
a_label = "source/unstable"
39
z_label = "neither/unstable"
40
b_label = "sink/stable"
41
if x0 < 0:
42
math_lim = 0
43
else:
44
math_lim = b
45
real_lim = b
46
elif (version == "even") and (k>0):
47
a_label = "sink/stable"
48
z_label = "neither/unstable"
49
b_label = "source/unstable"
50
if x0 < 0:
51
math_lim = a
52
else:
53
math_lim = 0
54
real_lim = a
55
elif (version == "odd") and (k<0):
56
a_label = "sink/stable"
57
z_label = "source/unstable"
58
b_label = "sink/stable"
59
if x0 < 0:
60
math_lim = a
61
real_lim = a
62
else:
63
math_lim = b
64
real_lim = b
65
else:
66
a_label = "source/unstable"
67
z_label = "sink/stable"
68
b_label = "source/unstable"
69
math_lim = 0
70
real_lim = 0
71
72
73
return {
74
"ode": ode,
75
"t0": t0,
76
"x0": x0,
77
"a": a,
78
"b": b,
79
"a_label": a_label,
80
"b_label": b_label,
81
"z_label": z_label,
82
"math_lim": math_lim,
83
"real_lim": real_lim,
84
}
85
86