#python #runge-kutta
#python #рунге-кутта
Вопрос:
Вопрос Python:
У меня есть следующий код RK-4, который оценивает мой ode первого порядка, но я хочу отредактировать его так, чтобы он мог оценивать следующий ode 2-го порядка как систему ODE первого порядка: (d ^ 2y / dt ^ 2) 4 (dy / dt) 2y = 0. Я хотел бы сохранить h (размер шага тот же), а начальные условия были бы y (0) = 1 и y'(0) = 3.
Я очень новичок в python, поэтому мне трудно это делать. Заранее благодарю вас за любую помощь!
import matplotlib.pyplot as plt
def dydx(x, y):
return ((x - y)/2)
def rungeKutta(x0, y0, x, h):
n = (int)((x - x0)/h)
y = y0
for i in range(1, n 1):
k1 = h * dydx(x0, y)
k2 = h * dydx(x0 0.5 * h, y 0.5 * k1)
k3 = h * dydx(x0 0.5 * h, y 0.5 * k2)
k4 = h * dydx(x0 h, y k3)
y = y (1.0 / 6.0)*(k1 2 * k2 2 * k3 k4)
x0 = x0 h
return y
x0 = 0
y = 1
x = 2
h = 0.2
print ('The value of y at x is:', rungeKutta(x0, y, x, h))
Ответ №1:
Единственное изменение, которое необходимо, — это сделать состояние векторным объектом. В python это обычно массив numpy. Итак
y0 = np.array([1,3],dtype=float)
def dydx(x, y):
return np.array([y[1], -4*y[1]-2*y[0]])
Все остальное должно автоматически использовать соответствующие векторные операции.