matrices - numpy python 3.6 windows
resolver dos ecuaciones de dimensiĆ³n diferencial en python con scipy (1)
Aplique truco para desingularizar la división por y
, imprima todas las evaluaciones de función ODE, trace ambos componentes y use la ecuación diferencial correcta con el código modificado
import matplotlib.pyplot as pl
import numpy as np
from scipy.integrate import odeint
def func(z,t):
x, y=z
print t,z
return [6*y, (2*t-3*x)*y/(4*y**2+1e-12)]
z0=[1,2]
t = np.linspace(0,1,501)
xx=odeint(func, z0, t)
pl.figure(1)
pl.plot(t, xx[:,0],t,xx[:,1])
pl.legend()
pl.show()
y se ve que en t=0.64230232515
la singularidad de y=0
, donde y
comporta como una función de raíz cuadrada en su vértice. No hay forma de cruzar esa singularidad, ya que la pendiente de y
va al infinito. En este punto, la solución ya no es diferenciable continuamente, y por lo tanto este es el punto extremo de la solución. La continuación constante es un artefacto de la desingularización, no una solución válida.
Soy un novato en Python. Tengo un sistema diferencial simple, que consiste en dos variables y dos ecuaciones diferenciales y condiciones iniciales x0=1, y0=2
:
dx/dt=6*y
dy/dt=(2t-3x)/4y
ahora estoy tratando de resolver estas dos ecuaciones diferenciales y elijo odeint
. Aquí está mi código:
import matplotlib.pyplot as pl
import numpy as np
from scipy.integrate import odeint
def func(z,b):
x, y=z
return [6*y, (b-3*x)/(4*y)]
z0=[1,2]
t = np.linspace(0,10,11)
b=2*t
xx=odeint(func, z0, b)
pl.figure(1)
pl.plot(t, xx[:,0])
pl.legend()
pl.show()
pero el resultado es incorrecto y hay un mensaje de error:
Excess work done on this call (perhaps wrong Dfun type).
Run with full_output = 1 to get quantitative information.
No sé qué está mal con mi código y cómo puedo solucionarlo. Cualquier ayuda será útil para mí.