2016-10-27 4 views
0

Я совершенно новой для питона, и попытаться интегрировать следующую оду:Что я делаю неправильно в этом Dopri5 реализация

$ \ точка {х} = -2x-у^2 $

$ \ dot {y} = -yx^2

Это приводит к массиву со всем 0, хотя Что я делаю неправильно? Это в основном скопированный код, а с другим, не связанным с ним, он работал нормально.

import numpy as np 
import matplotlib.pyplot as plt 
from scipy.integrate import ode 


def fun(t, z): 
    """ 
    Right hand side of the differential equations 
     dx/dt = -omega * y 
     dy/dt = omega * x 
    """ 
    x, y = z 
    f = [-2*x-y**2, -y-x**2] 
    return f 

# Create an `ode` instance to solve the system of differential 
# equations defined by `fun`, and set the solver method to 'dop853'. 
solver = ode(fun) 
solver.set_integrator('dopri5') 

# Set the initial value z(0) = z0. 
t0 = 0.0 
z0 = [0, 0] 
solver.set_initial_value(z0, t0) 

# Create the array `t` of time values at which to compute 
# the solution, and create an array to hold the solution. 
# Put the initial value in the solution array. 
t1 = 2.5 
N = 75 
t = np.linspace(t0, t1, N) 
sol = np.empty((N, 2)) 
sol[0] = z0 

# Repeatedly call the `integrate` method to advance the 
# solution to time t[k], and save the solution in sol[k]. 
k = 1 
while solver.successful() and solver.t < t1: 
    solver.integrate(t[k]) 
    sol[k] = solver.y 
    k += 1 

# Plot the solution... 
plt.plot(t, sol[:,0], label='x') 
plt.plot(t, sol[:,1], label='y') 
plt.xlabel('t') 
plt.grid(True) 
plt.legend() 
plt.show() 

ответ

1

Ваше начальное состояние (z0) является [0,0]. Производная по времени (fun) для этого начального состояния также равна [0,0]. Следовательно, для этого начального условия [0,0] является правильным решением для всех времен.

Если вы изменили свое начальное состояние на какое-то другое значение, вы должны увидеть более интересный результат.

+0

О, хорошо, это фиксированная точка, и я думал, что делаю что-то неправильно в коде –

 Смежные вопросы

  • Нет связанных вопросов^_^