Cómo aplicar correctamente scipy.integrate.Radau?

Andrej:

(Voy a apreciate incluso un enlace a un ejemplo, hasta ahora no he encontrado ninguna.)

Estoy tratando de utilizar Radau de scipy.integrate para resolver ecuaciones diferenciales de segundo orden. Por ahora estoy tratando sólo un ejemplo sencillo, de modo que pueda uderstand cómo funciona (sin éxito hasta el momento).

Vamos a decir que tengo siguiente ecuación:

d ^ 2y / dt ^ 2 = C,

lo que significa que y = (C t ^ 2) / 2 + B t.

Digamos, por ejemplo, y (1) = 1 y C = digamos 2. Vamos que yo quiero encontrar valor de y para t = 10.

Este es mi código:

from scipy.integrate import Radau
import numpy as np

C = 2.0
y = np.zeros(2)

def fun(t, y):
  #y[0] = C*t
  y[1] = C
  return y

t0 = 1.0
y0 = np.array([1., 1.])
t_bound = 10.0

eq = Radau(fun, t0, y0, t_bound)
print(eq.n)

while(True):
  print(eq.t)
  print(eq.y)
  print(eq.status)
  if eq.status == 'finished':
    break
  eq.step()

Salidas está mal. (Si yo elimine el comentario de que una línea comentada en la fundefinición, sino que también da una respuesta equivocada. Pero creo que no debería siquiera tener que decirle solucionador de eso, ¿verdad? No sé este valor por lo general).

Creo que mi mayor problema es que no estoy muy seguro de lo que debe ser aprobada como fun. Documentación dice que debe ser lado derecho del sistema, así que pensé que primero derivación debe estar en y [0], segunda derivación en Y [1] etc.

¿Qué estoy haciendo mal? ¿Cómo debe ser implementado?

Lutz Lehmann:

Atm está resolviendo

y0' = y0,  y0(1)=1
y1' = 2,   y1(1)=1

el cual tiene la solución y0(t)=exp(t-1)y y1(t)=2*t-1que no es ciertamente lo que quiere. Desea que el sistema de primer orden

y0' = y1
y1' = C

por lo que es necesario

def fun(t,y): return [y[1], C]

A continuación, la solución es y1(t)=C*t+B=2*t-1y y0(t)=0.5*C*t^2+B*t+A=t^2-t+1así como la integración termina correctamente con eq.y = [91. 19.].

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=377815&siteId=1
Recomendado
Clasificación