Professional Documents
Culture Documents
WB1135 Dynamica - Python
WB1135 Dynamica - Python
Inhoudsopgave
Tutorial 1
1.1 Bewegen zonder versnelling
1.2 Bewegen met constante versnelling
1.3 Bewegen met variabele versnelling 1
1.4 Bewegen met variabele versnelling 2
1.5 Bewegen met variabele versnelling 3
1.6 Bewegen in 2D
Tutorial 2
2.1 Massa-veer
2.2 Massa veer met zwaartekracht
2.3 Nieuwe integratiemethode / Odeint
2.4 Elastische botsing
2.5 Instantane botsing
Tutorial 3
w;3.1 Hovercraft 1
3.2 Hovercraft 2
3.3 Schijf aan een Veer (werkt niet volledig)
Opdracht 4
Sportauto
Blok valt op een veer?? 🙁:(
Massa-veer-demper
Vliegtuig
Tutorial 1
dt = float(0.1)
t0 = float(0.0)
t1 = float(10.0)
x0 = float(1.2)
v0 = float(3.0)
antwoord = "B"
fig, ax = plt.subplots(1, 2)
ax[0].plot(t, x_num, linestyle='--')
ax[0].plot(t, x_an)
ax[1].plot(t, x_num-x_an)
antwoord2 = "C"
1.2 Bewegen met constante versnelling
import numpy as np
import matplotlib.pyplot as plt
dt = 0.1
t0 = 0.0
t1 = 10.0
x0 = 0.0
v0 = 40.0
a0 = -9.81
t = np.linspace(0, 10, 101)
fig, ax = plt.subplots(1, 2)
ax[0].plot(t, x_num, linestyle='--')
ax[0].plot(t, x_an)
ax[0].set_title('numeriek en analytisch bepaalde functie')
ax[1].plot(t, x_num-x_an)
antwoord = "B"
antwoord2 = "A"
1.3 Bewegen met variabele versnelling 1
#import modules#
#define variables#
dt = 0.1
t0 = 0.0
t1 = 10.0
x0 = 0.0
v0 = 0.0
m = 5.0
t = np.arange(0,10.1,dt)
x[0]= x0
v[0]= v0
a[0]= (versnelling(t[0]))
for i in range(len(t)-1):
dt = t[i + 1] - t[i]
x[i+1] = x[i] + v[i]*dt
v[i+1] = v[i] + (versnelling(t[i]))*dt
a[i+1] = (versnelling(t[i+1]))
x,v,a
#versnelling(t) gebruiken ipv a_func)
a_f
x_an = analytisch(x0,v0,t)[0]
v_an = analytisch(x0,v0,t)[1]
a_an = analytisch(x0,v0,t)[2]
#multiple choice#
antwoord = "B"
x0 = 0
v0 = 4.5
m = 95
def versnelling(x):
if x < 2000:
F = 15.0
else:
F = -8.0
a = F/m
return a
t = np.linspace(0,300, 3001)
x[0] = x0
v[0] = v0
a[0] = versnelling(x[0])
for i in range(len(t) - 1):
dt = t[i+1] - t[i]
x[i+1] = x[i] + v[i]*dt
v[i+1] = v[i] + a[i] * dt
a[i+1] = versnelling(x[i+1])
return x, v, a
x0 = 0
v0 = 14
m = 110000
F_prop = 0
dt = 0.1
def versnelling(v):
a = (F_prop - 120 * v**3) / m
return a
def analytisch(x0,v0,t):
x = (2*m/240)*np.sqrt((240*t/m)+1/(v0**2))-(2*m/(240*v0))+x0
v = 1/np.sqrt(240*t/m+1/v0**2)
a = -120*(1/np.sqrt(240*t/m+1/v0**2))**3/m
return x,v,a
x_an, v_an, a_an = analytisch(x0,v0,t)
t = np.arange(0,20.001,0.001)
x_num = numeriek(x0, v0, versnelling,t)[0]
x_verschil_15 = x_num[15000]-x_an[150]
1.6 Bewegen in 2D
import numpy as np
import matplotlib.pyplot as plt
def versnelling(x, y, vx, vy):
ax = 0.0
ay = -9.81
return ax, ay
x0 = 0.0
y0 = 10.0
vx0 = 20.0
vy0 = 10.0
m = 0.5
t = np.linspace(0,3,301)
x[0] = x0
y[0] = y0
vy[0] = vy0
ax[0], ay[0] = a_func(x0, y0, vx0, vy0)
for i in range(len(t)-1):
dt = t[i + 1] - t[i]
x[i + 1] = x[i] + vx[i] * dt
y[i + 1] = y[i] + vy[i] * dt
vx[i + 1] = vx[i] + ax[i] * dt
vy[i + 1] = vy[i] + ay[i] * dt
ax[i + 1], ay[i + 1] = a_func(x[i + 1], y[i + 1], vx[i + 1], vy[i +
1])
return(x,y,vx,vy,ax,ay) vx[0] = vx0
x_num, y_num, vx_num, vy_num, ax_num, ay_num = numeriek(x0, y0, vx0, vy0,
versnelling, t)
x0 = 0.0
y0 = 10.0
vx0 = 20.0
vy0 = 10.0
m = 0.5
t = np.linspace(0,3,301)
k = 0.21
x_num2 = numeriek(x0, y0, vx0, vy0, versnelling, t)[0]
y_num2 = numeriek(x0, y0, vx0, vy0, versnelling, t)[1]
#Gravitatie
Tutorial 2
2.1 Massa-veer
m = 12 #kg
k = 100 #N/m
def afgeleiden(state, t):
y, v = state
a = -(k*y)/m
return v, a
return y, v, a
import sympy as sm
def test_vergelijkingen():
m, k, y, y0, v0, t = sm.symbols('m k y y0 v0 t')
y = sm.Function('y')(t)
ddy= -k*y/m
test_vergelijkingen()
t = np.linspace(0,10,10001)
y0 = 0.1
v0 = 1.0
state0 = [y0,v0]
y_num,v_num,a_num = numeriek(state0, afgeleiden, t)
y_an,v_an,a_an = analytisch(state0,t)
t = np.linspace(0,10,10001)
y0 = 0.1
v0 = 1.0
state0 = [y0,v0]
y_num,v_num,a_num = numeriek(state0, afgeleiden, t)
y_an,v_an,a_an = analytisch(state0,t)
import numpy as np
import sympy as sm
import matplotlib.pyplot as plt
m = 12 #kg
k = 100 #N/m
return y, v, a
fig, ax = plt.subplots(1, 1)
ax.plot(t, y_num)
ax.set_xlabel('tijd [s]')
ax.set_ylabel('positie [m]')
ax.axhline(0, linestyle=':', color='k')
plt.show()
''Opdracht 2'''
def numeriek(state0, a_func, t):
y0,v0=state0
y=np.zeros(len(t))
v=np.zeros(len(t))
a=np.zeros(len(t))
y[0]=y0
v[0]=v0
a[0]=a_func(state0,t[0])[1]
for i in range(len(t)-1):
dt = t[i + 1] - t[i]
v[i + 1]=v[i]+a[i]*dt
y[i + 1]=y[i]+v[i]*dt
a[i + 1]=a_func((y[i+1],v[i+1]),t[i+1])[1]
return y, v, a
'''Opdracht 3'''
m, k, g, y, y0, v0, t = sp.symbols('m k g y y0 v0 t')
y = sp.Function('y')(t)
ddy=(- k * y + m * g)/m
'''Opdracht 4'''
y_p= m*g/k
'''Opdracht 5'''
omega = sp.sqrt(k/m)
A= v0/omega
B= y0 - g*m/k
'''Opdracht 6'''
k = 100
g = 9.81
m = 12
y_p = g*m/k
t = np.linspace(0,10,10001)
'''Opdracht 8'''
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 2)
ax[0].plot(t, y_num, linestyle='--')
ax[0].plot(t, y_an)
ax[0].set_title('numeriek en analytisch bepaalde functie')
ax[1].plot(t, y_num-y_an)
plt.show()
def E_totaal(y,v):
Ek = 0.5*m*v**2
Ev = 0.5*k*y**2
Eh = m*g*y
E = -Eh+Ev+Ek
return E
'''Opdracht 9'''
'''Opdracht 10'''
E_num = E_totaal(y_num,v_num)
E_an = E_totaal(y_an,v_an)
'''Opdracht 11'''
antwoord_num = 'C'
antwoord_an = 'B'
2.3 Nieuwe integratiemethode / Odeint
m = 12
k = 100
g = 9.81
y0 = 0.1
v0 = 1.0
‘B’
antwoord2 = [2, 3, 4, 5]
2.4 Elastische botsing
import numpy as np
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
m = 0.8
g = 9.81
y0 = 1.2
v0 = 0.1
t0 = 0
t1 = 1.0
dt = 0.001 # begin opdracht
m = 0.8
g = 9.81
k = 1000
y0 = 1.2
v0 = 0.1
t0 = 0
t1 = 1
dt = 0.001
state0 = y0, v0
def f_zwaartekracht():
m = 0.8
g = 9.81
F_g = -m*g
return F_g
def f_grond(y):
k = 1000
if y < 0:
return -k*y
else:
return 0
y[0] = state0[0]
v[0] = state0[1]
a[0] = -g
: 0.001
k = 1e5 #begin opdracht: 1000
t = np.linspace(t0, t1, int((t1 - t0) / dt ) + 1) #moet +1 zijn aan begin! Kreeg error bij
laatste opdracht dat array te kort was dus bij laatste opdracht veranderd naar +2
def f_zwaartekracht():
m = 0.8
g = 9.81
F_g = -m * g
return F_g
def f_grond(y):
k = 1000
F_grond = k * np.maximum(0, -y)
return F_grond
y[0] = state0[0]
v[0] = state0[1]
a[0] = a0
print(index)
print(np.max(v_num5))
print(np.min(v_num5))
impulsverschil = 8.009645387433197
print(impulsverschil)
""" Opdracht 11 """
index2 = np.where(f_nieu w(y_num5) <= 0)[0]
impuls_zwaartekracht = -m*v_num5[505]
print(impuls_zwaartekracht)
impuls_zwaartekracht = 0.7165467932664598
def f_zwaartekracht():
m = 0.8
g = 9.81
F_g = -m*g
return F_g
def f_grond(y):
k = 1000
if y < 0:
return -k*y
else:
return 0
def f_totaal(state, t):
y, v = state
F = f_zwaartekracht() + f_grond
return F
y[0] = state0[0]
v[0] = state0[1]
a[0] = -g
import numpy as np
import matplotlib.pyplot as plt
#Opdracht 1
m = 0.8
g = -9.81 # m/s^2
y0 = 1.2 # m
v0 = 0.1 # m/s
t0 = 0.0 # s
t1 = 1.0 # s # bij Restitutiecoëfficiënt is dit 2.0 s
a0 = -9.81 # m/s^2
dt = 0.001
state0 = y0, v0
def f_zwaartekracht():
F_g = m*g
return F_g
#Restitutiecoefficient
t0 = 0 #s
t1 = 2 #s
dt = 0.001 #s
e = 0.75
t = np.arange(t0, t1+dt, dt)
y = np.zeros(len(t))
v = np.zeros(len(t))
a = np.zeros(len(t))
y0, v0 = state0
y[0] = y0
v[0] = v0
a[0] = a_func([y0, v0], t[0])
return y, v, a
def stoot():
L = m * v_num[506] - m * v_num[505]
return L
stoot = stoot()
fig, ax = plt.subplots(1,3)
ax[0].plot(t, y_num)
ax[1].plot(t, v_num)
ax[2].plot(t, a_num)
plt.show()
_____________________________________
Antwoord=[‘A’,’B’]
w;3.1 Hovercraft 1
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
m = 460 #[kg]
I = 240 #[kg*m^2]
F = 1100 #[N]
def moment(theta):
M = F * 0.6 * np.cos(theta)
return M
m = 460 #[kg]
I = 240 #[kg*m^2]
F = 1100 #[N]
def moment(theta):
M = F * 0.6
return M
m = 15 #[kg]
r = 1.2 #[m]
g = -9.81 #[m/s^2]
k = 100 #[N/m]
l_0 = 4 #[m]
theta_0 = 0
x = 0
y = -4
M_0 = [-1.2,-4]
I = 1/2 * m * r ** 2
def Ftot(state):
x,y,theta,vx,vy,omega = state
Px = x + r * np.cos(theta)
Py = y + r * np.sin(theta)
afstand_P_Q = np.sqrt(Px ** 2 + Py ** 2)
uitrekking = afstand_P_Q - l_0
F_k = k * uitrekking
s = (np.sqrt(Px ** 2 + Py ** 2))
F_kx = -Px / s * F_k
F_ky = -Py / s * F_k
Fx = F_kx
Fy = m * g + F_ky
return np.array([Fx,Fy])
def Mtot(state):
x,y,theta,vx,vy,omega = state
Px = x + r * np.cos(theta)
Py = y + r * np.sin(theta)
afstand_P_Q = np.sqrt(Px ** 2 + Py ** 2)
uitrekking = afstand_P_Q - l_0
F_k = k * uitrekking
s = (np.sqrt(Px ** 2 + Py ** 2))
F_kx = Px / s * F_k
F_ky = -Py / s * F_k
M = F_kx * r * np.sin(theta) + F_ky * r * np.cos(theta)
return M
def afgeleiden(state, t):
x,y,theta,vx,vy,omega = state
ax = Ftot(state)[0] / m
ay = Ftot(state)[1] / m
alpha = Mtot(state) / I
return vx, vy, omega, ax, ay, alpha
t = np.arange(0,25.1,0.1)
x0 = 0.0
v0 = 0.0
a0 = 0.0
def versnelling(t):
if t<10:
a = 0.5 * t
elif t>=10 and t<=25:
a = -2
return a
t_stop_euler = 22.4
t_stop_odeint = 22.5
def t_check(v):
i=0
while v[i]>=0:
i+=1
else:
return i
t_stop_euler=t[t_check(v_euler)]
t_stop_odeint=t[t_check(v_odeint)]
y = np.zeros(len(t))
v = np.zeros(len(t))
a = np.zeros(len(t))
y0, v0 = state0
y[0] = y0
v[0] = v0
a[0] = a_func([y0, v0], t[0])
return y, v, a
Blok valt op een veer 🙂
help lan
Help? :)
k=25000
m=40
g=9.81
x0=2
v0=-5
state0 = (x0,v0)
t0 = 0
t1 = 5
dt = 0.001
t = np.linspace(t0, t1, 1+ int(t1/dt))
fig, ax = plt.subplots(1, 2)
ax[0].plot(x_num, label='numeriek')
ax[0].set_xlabel('t')
ax[1].plot(v_num, label='numeriek')
ax[1].set_xlabel('t')
#plt.show()
—------------------------------------------------------------------------------------------
indrukking (2/2)
—------------------------------------------------------------------------------------------
indrukking = -x_num[0]
for i in range(len(x_num)-1):
if x_num[int(i+1)] < -indrukking:
indrukking = -x_num[i+1]
#print(x_num[i+1],indrukking)
—------------------------------------------------------------------------------------------
numerieke resultaten 2 (2/2 kleine afwijking) met deze code zal v_num wel werken!
—------------------------------------------------------------------------------------------
k=25000
m=40
g=9.81
c=500
x0=2
v0=-5
state0 = (x0,v0)
t0 = 0
t1 = 10
dt = 0.001
t = np.linspace(t0, t1, 1+ int(t1/dt))
fig, ax = plt.subplots(1, 2)
ax[0].plot(x_num, label='numeriek')
ax[0].set_xlabel('t')
ax[1].plot(v_num, label='numeriek')
ax[1].set_xlabel('t')
plt.show()
—------------------------------------------------------------------------------------------
x_eind (2/2)
—------------------------------------------------------------------------------------------
x_eind = np.average(x_num2[9000:10000])
—------------------------------------------------------------------------------------------
v_eind (2/2 kleine afwijking)met bovenste code werkt ie
—------------------------------------------------------------------------------------------
v_eind = np.average(np.abs(v_num2[9000:10000]))
—------------------------------------------------------------------------------------------
#
Massa-veer-demper
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
m = 30
k = 15e3
c = 20
#Beginvoorwaarden
x0 = 0
v0 = 0
state0 = (x0, v0)
#Tijd
t1 = 15
dt = 0.01
t = np.arange(0, t1+dt, dt)
T_A = 40000
T_B = 20000
m = 200000
vx0 = -300/3.6
r = 8
k = 15
I = (m)*k**2
state0 = 0,0,0,vx0,0,0
def moment_G():
M = (T_A-T_B)*r
return M
t0 = 0
t1 = 10
dt = 0.1
t = np.linspace(t0, t1, 101)
hoeksnelheid_5 = resultaat.T[5][50]