簡體   English   中英

我在此Dopri5實現中做錯了什么

[英]What am I doing wrong in this Dopri5 implementation

我對python完全陌生,並嘗試集成以下ode:

$ \\ dot {x} = -2x-y ^ 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()

您的初始狀態( z0 )為[0,0] 此初始狀態的時間導數( fun )也是[0,0] 因此,對於此初始條件, [0,0]始終是正確的解決方案。

如果將初始條件更改為其他值,則應觀察到更有趣的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM