簡體   English   中英

如何在Python GEKKO模塊中定義二階導數?

[英]How do you define a second derivative in the Python GEKKO module?

我想用GEKKO解決一個二階微分方程。 在文檔中,只有一個示例向您展示了如何求解一階方程。 我不知道如何編寫y的二階導數以使其工作。

這是一階微分方程文檔中的示例。

from gekko import GEKKO
import numpy as np
import matplotlib.pyplot as plt

m = GEKKO()
m.time = np.linspace(0,20,100)
k = 10

y = m.Var(value=5.0)
t = m.Param(value=m.time)
m.Equation(k*y.dt()==-t*y)
m.options.IMODE = 4
m.solve(disp=False)

plt.plot(m.time,y.value)
plt.xlabel('time')
plt.ylabel('y')

plt.show()

一階導數可以聲明為dy = y.dt() ,二階導數可以聲明為ddy = dy.dt()

import numpy as np
import matplotlib.pyplot as plt


m = GEKKO()
m.time = np.linspace(0,20,100)
k = 10

y = m.Var(value = 5.0)
t = m.Param(value=m.time)
dy = m.Var(value = 0.0)
ddy = m.Var(value = -5/10)


m.Equations([
    k*y.dt()==-t*y,
    dy == y.dt(),
    ddy == dy.dt()

])

m.options.IMODE = 4
m.solve(disp=False)


plt.figure()
plt.plot(m.time,y.value, label = 'y')
plt.xlabel('time')
plt.plot(m.time, dy.value, label  = 'dy')
plt.xlabel('time')
plt.plot(m.time, ddy.value, label  = 'ddy')
plt.xlabel('time')
plt.legend()
plt.show()

在此處輸入圖片說明

您可以在這里找到更多信息: https : //apmonitor.com/wiki/index.php/Apps/2ndOrderDifferential

暫無
暫無

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

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