Я пытаюсь написать оду для решения проблемы гармонического осциллятора, и у меня есть эта проблема с моей функцией гармоники для использования в команде odeint.
import matplotlib.pyplot as plt
import numpy as np
from scipy.integrate import odeint
k=4.0
m=1.0
B=0
def harmonic((x, y), t):
return [y, -k * x / m + B / m * y]
Выдает сообщение об ошибке:
File "<ipython-input-60-2d6b156227be>", line 1
def harmonic((x, y), t):
^
SyntaxError: invalid syntax
Кто-нибудь может мне помочь? Спасибо!
Можете ли вы показать, как odeint
вызывается в вашем коде? Или дифференциальное уравнение, которое определяет изменение y относительно x и начальное условие в y=0
?
@BenT Спасибо! я решил проблему
@amanb Спасибо! Я решил свою проблему.
(x, y)
представляет собой кортеж. Если вы хотите просто использовать x,y как отдельные переменные, просто используйте x,y
. Ваша функция будет выглядеть так:
def harmonic(x, y, t):
return [y, -k * x / m + B / m * y]
Передача гипотетических значений x, y и t в гармоническую функцию возвращает список, рассчитанный кодом в операторе return
функции:
harmonic(2,3,5)
#Output:
[3, -8.0]
Но это не сработает с odeint
. x
и y
должны быть помещены в один массив длины 2.
Для этого потребуется дополнительная информация, например, y0 и как y изменяется с x. Документы: docs.scipy.org/doc/scipy/reference/generated/…
Да все верно. Как сказал @David Vivas, "... У меня проблема с гармоникой моей функции для использования в команде odeint" (но код, вызывающий odeint
, не показан).
Посмотрите на следующий пример:
import matplotlib.pyplot as plt
import numpy as np
from scipy.integrate import odeint
k = 4.0
m = 1.0
B = 0
def harmonic(var, t=None):
x, y = var[0], var[1] # var is assumed to be an array, usually numpy array
return [y, -k * x / m + B / m * y]
result = odeint(harmonic, (0.2, 0), np.linspace(0, 1, 100))
plt.plot(result[:,0], result[:,1], 'r-')
plt.show()
Вам не нужны круглые скобки вокруг x, y. Удалите их и все заработает.