gpt4 book ai didi

python - 环路和 fork 图

转载 作者:行者123 更新时间:2023-11-30 23:01:15 26 4
gpt4 key购买 nike

我正在编写一个脚本,绘制具有小的直接力的阻尼摆的 fork 图。

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
epsi = 0.01
# Declare the model
f_dir = np.arange(0,1.3,0.01)
A_s = np.zeros(len(f_dir))

i = 0
for f in f_dir:
def myModel(y, t):

dy0 = y[1]
dy1 = -epsi*y[1]-np.sin(y[0]) - f*np.cos((1.01)*t)*np.cos(y[0])
return [dy0, dy1]
time = np.arange(0.0, 2000,0.01)
yinit = np.array([np.pi/2, 0])
y = odeint(myModel, yinit, time)

A_s.insert(i,np.abs(np.max(y[-600:-1,0])- np.min(y[-600:-1,0])))

i += 1


plt.plot(f_dir,A_s,'*')
plt.xlabel(r'$f_s$')
plt.ylabel(r'$A_s$')
plt.hold
plt.show()

问题是我没有在 A_s 中插入任何内容,我不知道为什么,因为变量 i 在循环的每一步都会增加。

最佳答案

遵循您的代码有点困难,但这可能更接近您想要的。即使 f 是一个可变参数,您也只需定义一次模型:您可以将此类参数传递给 args 元组中的 odeint 并他们被交给模型函数。

另请注意,NumPy 数组没有 insert 方法。

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
epsi = 0.01
# Declare the model
f_dir = np.arange(0,1.3,0.01)
A_s = np.zeros(len(f_dir))

def myModel(y, t, f):
dy0 = y[1]
dy1 = -epsi*y[1]-np.sin(y[0]) - f*np.cos((1.01)*t)*np.cos(y[0])
return [dy0, dy1]

i = 0
for f in f_dir:
time = np.arange(0.0, 2000,0.01)
yinit = np.array([np.pi/2, 0])
y = odeint(myModel, yinit, time, args=(f,))
A_s[i] = np.abs(np.max(y[-600:-1,0])- np.min(y[-600:-1,0]))
i += 1


plt.plot(f_dir,A_s,'*')
plt.xlabel(r'$f_s$')
plt.ylabel(r'$A_s$')
plt.hold
plt.show()

关于python - 环路和 fork 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34969490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com