Первое решение должно дать вам ожидаемый результат, но в реализации оды есть ошибка.
Функция, которую вы передаете odeint, должна возвращать массив, содержащий решения системы дифференциальных уравнений 1st -приложения.
В вашем случае вы решаете
![enter image description here](https://i.stack.imgur.com/7QNjc.gif)
В то время как вместо этого вы должны решить
![enter image description here](https://i.stack.imgur.com/tum2a.gif)
Для того, чтобы сделатьпоэтому измените свой код на этот
import numpy as np
from scipy.integrate import odeint
from numpy import sin, cos, pi, array
import matplotlib.pyplot as plt
def deriv(z, t):
x, y, dxdt, dydt = z
dx2dt2 = (0.415 + x) * (dydt)**2 - 50 / 1.006 * x + 9.81 * cos(y)
dy2dt2 = (-9.81 * 1.006 * sin(y) - 2 * (dxdt) * (dydt)) / (0.415 + x)
return np.array([dxdt, dydt, dx2dt2, dy2dt2])
init = array([0, pi / 18, 0, 0])
time = np.linspace(0.0, 10.0, 1000)
sol = odeint(deriv, init, time)
plt.plot(sol[:, 0], sol[:, 1], label='hi')
plt.show()
![enter image description here](https://i.stack.imgur.com/XAKO3.png)
Вторая часть кода выглядит так, как будто вы пытаетесь изменить координату.Я не уверен, почему вы пытаетесь решить оду снова вместо того, чтобы просто делать это.
x = sol[:,0]
y = sol[:,1]
def plot(h):
x, y = h
n = (0.4 + x) * sin(y)
u = (0.4 + x) * cos(y)
return np.array([n, u])
n,u = plot( (x,y))
На данный момент, что вы делаете там, это решение этой системы:
![enter image description here](https://i.stack.imgur.com/Vi3nR.gif)
Что приводит к x = e ^ t и y = e ^ t и n '= (0,4 + e ^ t) * sin (e ^ t) u' = (0,4+ е ^ т) * соз (е ^ т).
Не вдаваясь слишком в детали, с некоторой интуицией вы можете увидеть, что это приведет к аттрактору, так как производные от n и u начнут переключатьсяПодпишите быстрее и с большей величиной по экспоненте, что приведет к коллапсу n и u на аттракторе, как показано на вашем графике.
Если вы на самом деле пытаетесьРешите другое дифференциальное уравнение. Мне нужно его увидеть, чтобы помочь вам в дальнейшем.
Это то, что произойдет, если вы выполните преобразование и установите время 1000:
![enter image description here](https://i.stack.imgur.com/KDLNZ.png)