Difference between revisions of "Tugas rungekutta MFS"
Line 3: | Line 3: | ||
'''Koding''' | '''Koding''' | ||
+ | : | ||
import numpy as np | import numpy as np | ||
− | + | m = eval(input('massa benda: ')) | |
g = eval(input('percepatan gravitasi: ')) | g = eval(input('percepatan gravitasi: ')) | ||
u = eval(input('koefisien gesek bidang: ')) | u = eval(input('koefisien gesek bidang: ')) | ||
+ | cd = eval(input('koefisien gesek udara: ')) | ||
teta = eval(input('sudut kemiringan bukit: ')) * (np.pi / 180) | teta = eval(input('sudut kemiringan bukit: ')) * (np.pi / 180) | ||
sint = np.sin(teta) | sint = np.sin(teta) | ||
cost = np.cos(teta) | cost = np.cos(teta) | ||
− | + | v0 = 0 | |
− | |||
− | |||
− | |||
t0 = 0 | t0 = 0 | ||
dt = 1 | dt = 1 | ||
error = 100 | error = 100 | ||
− | |||
tries = [] | tries = [] | ||
+ | p = g * (sint - u * cost) | ||
+ | q = cd / m | ||
− | def | + | def dvdt(t0, v0): |
− | return | + | return p - q * (v0 ** 1.5) |
while error > 0.005: | while error > 0.005: | ||
− | k1 = | + | k1 = dvdt(t0, v0) |
− | k2 = | + | k2 = dvdt(t0 + 0.5 * dt, v0 + 0.5 * dt * k1) |
− | k3 = | + | k3 = dvdt(t0 + 0.5 * dt, v0 + 0.5 * dt * k2) |
− | k4 = | + | k4 = dvdt(t0 + dt, v0 + dt * k3) |
− | + | v1 = v0 + (1.0 / 6.0) * (k1 + 2 * k2 + 2 * k3 + k4) | |
t0 = t0 + dt | t0 = t0 + dt | ||
− | error = (( | + | error = ((v1 - v0) / v1) * 100 |
− | + | v0 = v1 | |
− | tries.append( | + | tries.append(v1) |
t1 = len(tries) | t1 = len(tries) | ||
− | print(f' | + | print(f'kecepatan maksimum yang dapat dicapai adalah {round(v1, 2)} m/s dengan waktu {t1 + 1} s') |
Revision as of 15:37, 6 November 2019
Koding
import numpy as np
m = eval(input('massa benda: ')) g = eval(input('percepatan gravitasi: ')) u = eval(input('koefisien gesek bidang: ')) cd = eval(input('koefisien gesek udara: ')) teta = eval(input('sudut kemiringan bukit: ')) * (np.pi / 180) sint = np.sin(teta) cost = np.cos(teta) v0 = 0 t0 = 0 dt = 1 error = 100 tries = [] p = g * (sint - u * cost) q = cd / m
def dvdt(t0, v0):
return p - q * (v0 ** 1.5)
while error > 0.005:
k1 = dvdt(t0, v0) k2 = dvdt(t0 + 0.5 * dt, v0 + 0.5 * dt * k1) k3 = dvdt(t0 + 0.5 * dt, v0 + 0.5 * dt * k2) k4 = dvdt(t0 + dt, v0 + dt * k3) v1 = v0 + (1.0 / 6.0) * (k1 + 2 * k2 + 2 * k3 + k4) t0 = t0 + dt error = ((v1 - v0) / v1) * 100 v0 = v1 tries.append(v1)
t1 = len(tries)
print(f'kecepatan maksimum yang dapat dicapai adalah {round(v1, 2)} m/s dengan waktu {t1 + 1} s')