Использование RK4 для решения интегралов - PullRequest
0 голосов
/ 29 марта 2020

Вопрос просит нас решить этот интеграл в python, используя метод Rk4 ∫sinh(?)(?−5)?? от 0 до 5. Каков наилучший способ сделать это, как бы вы изменили это на ODE?

def RK4(f, dx, x0, y0, imax):
    output = np.empty((imax, 3))
    i = 0
    xi = x0
    yi = y0
    while(i < imax):
        k1 = dx*f(xi,yi)
        k2 = dx*f(xi + 0.5*dx, yi + 0.5*k1)
        k3 = dx*f(xi + 0.5*dx, yi + 0.5*k2)
        k4 = dx*f(xi + dx, yi + k3)

        yi = yi + 1/6*(k1 + 2*k2 + 2*k3 + k4)
        xi += dx
        output[i, 0] = xi
        output[i, 1] = yi[0]
        output[i, 2] = yi[1]
        i += 1
    return output

RK4(0,0,5,100,10)

Я получаю ошибку, что для k1 ("int объект не вызывается") ?? Как я могу это исправить или, возможно, проблема в другом месте моего кода. Спасибо за любую помощь. Также в этом вопросе прямо предлагается решить интеграл, используя правило Симпсона и методы RK4

1 Ответ

1 голос
/ 31 марта 2020

Вы передаете целое число 0 вместо функции. Затем в строке k1 вы пытаетесь использовать это целое число как функцию, которая выдает сообщаемую ошибку, поскольку нет разумной интерпретации 0(0,5). Вы можете использовать

RK4(lambda x,y:0,0,5,100,10)

Однако при нулевом шаге интеграция не произойдет.

...