Как определить функцию для использования с scipy.integrate.solve_ivp - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь решить дифференциальное уравнение, используя scipy.integrate.solve_ivp

L*Q'' + R*Q' + (1/C)*Q = E(t), E(t) = 230*sin(50*t)

для Q (t) и Q '(t)

C = 0.0014 #F
dQ_0 = 2.6 #A
L = 1.8 #H
n = 575 #/
Q_0 = 1e-06 #C
R = 43 #Ohm
t_f = 2.8 #s

import numpy as np
from scipy.integrate import solve_ivp

t = np.linspace(0, t_f, n)

def E(x):
    return 230*np.sin(50*x)

y = E(y)

def Q(t, y, R, L, C):
     return (y - L*Q'' - R*Q')*C

init_cond = [Q_0, dQ_0]

y_ivp = solve_ivp(Q, t_span=(0, t_f), y0=init_cond)

Я только пытаюсь понять, как правильно определить функцию, которая передается в качестве аргумента 'fun' в scipy.integrate.solve_ivp

1 Ответ

0 голосов
/ 29 мая 2019

solve_ivp не имеет механизма передачи параметров, поэтому рассматривайте параметры как глобальные переменные.Вы формулируете ODE для Q, поскольку это ODE второго порядка, состояние также содержит первую производную, как вы каким-то образом распознавались в составе начального состояния.Функция ODE должна затем производить производные значения в данном состоянии.Определите Q(t)=Q[0] и Q'(t)=Q[1], затем

def Q_ode(t, Q):
     return [ Q[1], (E(t) - R*Q[1] - (1/C)*Q[0])/L ]

Я бы продолжил называть переменные, содержащие Q значения, буквой Q.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...