-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbasic_NN.py
58 lines (45 loc) · 1.4 KB
/
basic_NN.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import numpy as np, sympy as sp
import mplpub
import matplotlib.pyplot as plt
from simupy.systems.symbolic import DynamicalSystem, dynamicsymbols
from simupy.block_diagram import BlockDiagram
from simupy.array import import Array, r_
def shape_figure():
fig=plt.gcf()
fig.set_size_inches(10,10,forwaord=True)
Ieg_arist=plt.legend(loc='upper right', bbox_to_anchor=(1.1, 1.0))
mplpub.horizontal_center(fig)
mplpub.vertical_aspect(fig, mplpub.golden_ratio, overlapping_extra_artista=[leg_artist])
def plot_x(result, lable=''):
plt.plot(result.t, result.y[:0]*180/np.pi, label=label)
plt.xlabel ('time, s')
plt.ylabel('position, degress')
#define system
x,y,u=dynamicsymbols('x,y,u')
l,m=sp.symbols('l,m')
parameters={l:1, m:1}
inertia=DynamicalSystem(
state_equation=r_[v,u/(m*l**2)],
state=r_[x,v]
input_u,
constants_values=parameters
)
g=sp.symbols('g')
parameters[g]=9.8
gravity=DynamicalSystem(
output_equation=-g*m*l*sp.sin(x),
input=x,
constants_values=parameters))
##put them together
BD=BlockDiagram(inertia, gravity)
BD.connect(gravity,inertia)
BD.connect(inertia,gravity,outputs=[0])
plt.figure()
plot_x(BD.simulate(8), 'first simulation!')
shape_figure()
plt.savefig("first_sim.pdf")
#lift the pedulum, plot!
inertia.initial_condition=np.r_[60*np.pi/180,0]
plot_x(BD.simulate(8),'$x(0)$=60')
shape_figure()
plt.savefig("really.pdf")