Initial Refactoring of yoshi_otter and Test Implementation
This commit is contained in:
51
yoshi_otter/algebra/edo/__edo.py
Normal file
51
yoshi_otter/algebra/edo/__edo.py
Normal file
@@ -0,0 +1,51 @@
|
||||
from typing import Callable
|
||||
|
||||
|
||||
class Edo:
|
||||
|
||||
def __init__(self, function: Callable[[float], float]) -> None:
|
||||
self.F = function
|
||||
|
||||
def euler(self, a: float, y: float, b: float, n: int = 10**6) -> float:
|
||||
|
||||
dx = (b - a) / n
|
||||
|
||||
def x(i):
|
||||
return a + i * dx
|
||||
|
||||
for i in range(n):
|
||||
y = y + (self.F(x(i), y)) * dx
|
||||
|
||||
return y
|
||||
|
||||
def runge(self, a: float, y: float, b: float, n: int = 10**6) -> float:
|
||||
|
||||
dx = (b - a) / n
|
||||
|
||||
def x(i):
|
||||
return a + i * dx
|
||||
|
||||
for i in range(n):
|
||||
y = y + (dx / 2) * (self.F(x(i), y) + self.F(x(i + 1), (y + (dx * self.F(x(i), y)))))
|
||||
|
||||
return y
|
||||
|
||||
def adams(self, a: float, y: float, b: float, n: int = None
|
||||
) -> float:
|
||||
|
||||
if n is None:
|
||||
n = 10 ** 6
|
||||
|
||||
dx = (b - a) / n
|
||||
|
||||
def x(i):
|
||||
return a + i * dx
|
||||
|
||||
for i in range(n):
|
||||
f0 = self.F(x(i), y)
|
||||
f1 = self.F(x(i + 1), y + dx * self.F(x(i) + (dx / 2), y + (dx / 2) * self.F(x(i), y)))
|
||||
f2 = self.F(x(i + 2), y + (dx / 2) * (3 * f1 - f0))
|
||||
|
||||
y += (dx / 12) * (5 * f2 + 8 * f1 - f0)
|
||||
|
||||
return y
|
||||
Reference in New Issue
Block a user