def _round(t): return tuple(round(x, 5) for x in t) euler = EulerEstimator( derivatives={ '1': (lambda t, x: x['1'] + 1), '2': (lambda t, x: x['1'] + x['2']), '3': (lambda t, x: 2*x['2']) }, point=(0, {'1': 0, '2': 0, '3': 0}) ) do_assert("point", euler.point, (0, {'1': 0, '2': 0, '3': 0})) do_assert("calc derivative", euler.calc_derivative_at_point(), {'1': 1, '2': 0, '3': 0}) euler.step_forward(0.1) do_assert("step forward", euler.point, (0.1, {'1': 0.1, '2': 0, '3': 0})) do_assert("new derivative", euler.calc_derivative_at_point(), {'1': 1.1, '2': 0.1, '3': 0}) euler.step_forward(-0.5) do_assert("step forward 2", euler.point, (-0.4, {'1': -0.45, '2': -0.05, '3': 0})) euler.go_to_input(5, step_size=2) # notes to help you debug:
# print(euler.point) # # (3, 9.29) euler = EulerEstimator(derivatives={ "suseptible": (lambda t, x: -0.001 * x["suseptible"] * x["infected"]), "infected": (lambda t, x: 0.001 * x["suseptible"] * x["infected"] - 0.05 * x["infected"]), "recovered": (lambda t, x: 0.05 * x["infected"]) }, point=(0, { "suseptible": 500, "infected": 5, "recovered": 0 })) print("Derivitive: " + str(euler.calc_derivative_at_point())) # print("Point: "+str(euler.point)) # #(0, (0, 0, 0)) # print("Derivitive: "+str(euler.calc_derivative_at_point())) # #[1, 0, 0] # euler.step_forward(0.1) # print("Point: "+str(euler.point)) # print("Derivitive: "+str(euler.calc_derivative_at_point())) # [1.1, 0.1, 0] # euler.step_forward(-0.5) # print("Point: "+str(euler.point)) # (-0.4, (-0.45, -0.05, 0))
import sys sys.path.append('src') from euler_estimator import EulerEstimator euler = EulerEstimator(derivatives = {'a':(lambda x: x['a']/2)}, point = (1,{'a':4})) print("\n Testing starting point") assert euler.point == (1,{'a':4}), 'Incorrect Starting point' print(" passed") print("\n Testing starting derivative") assert euler.calc_derivative_at_point() == {'a':2}, "Expected: "+str({'a':2})+", Got: "+str(euler.calc_derivative_at_point()) print(" passed") print("\n Testing point after first step") euler.step_forward(0.1) assert euler.point == (1.1, {'a':4.2}), 'Incorrect point after first step' print(" passed") print("\n Testing derivative after first step") assert euler.calc_derivative_at_point() == {'a':2.1},'Incorrect derivative after first step' print(" passed") print("\n Testing point after 2nd step") euler.step_forward(-0.5) assert (round(euler.point[0],3),{item:round(euler.point[1][item],3) for item in euler.point[1]})== (0.6, {'a':3.15}), 'Incorrect point after 2nd step' print(" passed") print("\n Testing go_to_input") euler.go_to_input(3, step_size = 0.5) assert (round(euler.point[0],3),{item:round(euler.point[1][item],3) for item in euler.point[1]}) == (3, {'a':9.229}), 'Incorrect final result'
#assert euler.calc_estimated_points(point=(1,4), #step_size=0.5, num_steps=4) == [(1, 4), (1.5, 5),(2, 6.25), (2.5, 7.75), (3, 9.5)] #print("Passed") #euler.plot(point=(-5,10), step_size=0.1, num_steps=100) derivatives = { 'A': (lambda t, x: x['A'] + 1), 'B': (lambda t, x: x['A'] + x['B']), 'C': (lambda t, x: 2 * x['B']) } initial_values = {'A': 0, 'B': 0, 'C': 0} initial_point = (0, initial_values) euler = EulerEstimator(derivatives=derivatives) assert euler.calc_derivative_at_point(initial_point) == { 'A': 1, 'B': 0, 'C': 0 } point_2 = euler.step_forward(initial_point, 0.1) assert point_2 == (0.1, {'A': 0.1, 'B': 0, 'C': 0}), point_2 assert euler.calc_derivative_at_point(point_2) == { 'A': 1.1, 'B': 0.1, 'C': 0 }, euler.calc_derivative_at_point(point_2) point_3 = euler.step_forward(point_2, -0.5)
(2.5, 7.75), # after 3rd step (3, 9.5) # after 4th step ]''' derivatives = { 'A': (lambda t, x: x['A'] + 1), 'B': (lambda t, x: x['A'] + x['B']), 'C': (lambda t, x: 2 * x['B']) } euler = EulerEstimator(derivatives=derivatives) initial_values = {'A': 0, 'B': 0, 'C': 0} initial_point = (0, initial_values) assert euler.calc_derivative_at_point(initial_point) == { 'A': 1, 'B': 0, 'C': 0 } point_2 = euler.step_forward(point=initial_point, step_size=0.1) assert point_2 == (0.1, {'A': 0.1, 'B': 0, 'C': 0}) assert euler.calc_derivative_at_point(point_2) == {'A': 1.1, 'B': 0.1, 'C': 0} point_3 = euler.step_forward(point=point_2, step_size=-0.5) assert point_3 == (-0.4, {'A': -0.45, 'B': -0.05, 'C': 0}) assert euler.calc_estimated_points(point=point_3, step_size=2, num_steps=3) == [
import sys sys.path.append('src') from euler_estimator import EulerEstimator euler = EulerEstimator(derivative=(lambda x: x + 1), point=(1, 4)) assert euler.point == (1, 4), 'Wrong Point' assert euler.calc_derivative_at_point() == 2, 'Wrong Derivative' euler.step_forward(0.1) assert euler.point == (1.1, 4.2), 'Wrong Point' assert euler.calc_derivative_at_point() == 2.1, 'Wrong Derivative' euler.step_forward(-0.5) assert euler.point == (0.6, 3.15), 'wrong point' euler.go_to_input(3, 0.5) assert euler.point == (3, 9.29), 'Weong Point' print('ALL TESTS PASSED')