¿Cómo resolver esta ecuación diferencial usando scipy odeint?

Estoy tratando de resolver la siguiente ecuación diferencial usando scipy odeint sin mucho éxito:

import numpy as np from scipy.misc import derivative from scipy.integrate import odeint Imag = 16000. w = 2*np.pi*60 tau = .05 theta = 1.52 phi = theta - np.radians(90) t = np.linspace(0,.1,10000) def Ip(t): return np.sqrt(2)*Imag*(np.sin(w*t+phi-theta)-np.exp(-t/tau)*np.sin(phi-theta)) B = lambda Ip: Ip/(53.05+0.55*abs(Ip)) def L(B): return derivative(B,Ip(t))*377.2 def dI(t): return derivative(Ip,t) def f(y,t): Rb = 8. N = 240. Is = y[0] f0 = (1/(L(B)+0.002))*((dI(t)*L(B)/N)-Rb*y[0]) return [f0] yinit = [0] sol = odeint(f,yinit,t) print sol[:,0] 

Sigo recibiendo el siguiente error:

 odepack.error: Result from function call is not a proper array of floats. ValueError: object too deep for desired array odepack.error: Result from function call is not a proper array of floats. 

¿Qué debo hacer para ejecutar el script sin errores?

¿Qué hay de usar ode lugar de odeint

Hay una pregunta muy similar a la tuya: ¿Cómo hacer que odeint tenga éxito?

Tienes un problema con esta función:

 def L(B): return derivative(B,Ip(t))*377.2 

Tenga en cuenta que t refiere a la variable global definida anteriormente, que es una matriz numpy. Creo que necesita repensar cómo define sus funciones y sus argumentos, ¿no debería ser también un argumento para L ? Tal como está, f devuelve una lista que contiene una matriz, incluso cuando su primer argumento contiene un solo elemento:

 In [10]: f([1], 0) Out[10]: [array([ -2.28644086e+10, -2.28638809e+10, -2.28633064e+10, ..., -1.80290012e+09, -1.80271510e+09, -1.80258446e+09])] 

Eso hará que se odeint .