Skip to content

Instantly share code, notes, and snippets.

@kayhman
Created October 4, 2020 12:50
Show Gist options
  • Save kayhman/9c715137d7e9ab5a13f6238cc77a1cc7 to your computer and use it in GitHub Desktop.
Save kayhman/9c715137d7e9ab5a13f6238cc77a1cc7 to your computer and use it in GitHub Desktop.
import matplotlib.pyplot as plt
import numpy as np
trip_distance = 6.0 # km
trip_duration = 12.0 # minutes
trip_avg_speed = 30.0 # km/h
# trip duration in minutes
def duration(distance, speed):
return distance * 1/speed * 60.0
def speed_error(speed):
dur = duration(trip_distance, speed)
return trip_duration - dur
# Approximate diff using limit definition
def speed_error_num_diff(speed, delta=1e-3):
return (speed_error(speed+delta)**2 - speed_error(speed)**2) / delta
# Compute diff using exact formula
def speed_error_diff(speed, delta=1e-3):
return 2 * trip_distance*60.0/speed**2 * speed_error(speed)
speeds = np.linspace(20, 50)
error = np.vectorize(speed_error)(speeds)
squared_error = error**2
fig, ax = plt.subplots()
ax.grid(True, which='both')
ax.plot(speeds, squared_error, label='Squared error wrt to speed param')
v_avg = 35
for i in range(0,7):
diff = speed_error_diff(v_avg)
tangente = speed_error(v_avg)**2 + diff * (np.linspace(20, 50) - v_avg)
ax.scatter([trip_avg_speed, v_avg], [0, speed_error(v_avg)**2])
ax.plot(np.linspace(20, 50), tangente, label=f'Tangent {v_avg}')
v_avg = v_avg - diff * 2.0
print('new avg: ', v_avg)
plt.xlabel('average speed')
plt.legend()
plt.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment