예제 #1
0
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:
예제 #2
0
# 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'
예제 #4
0
#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)
예제 #5
0
    (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) == [
예제 #6
0
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')