我正在尝试计算并绘制时间相关amp
微分运动方程(见t
)解的振幅rhs6
,作为wd
的函数对于f
中找到的力系数f_array
的多个值。
到目前为止,我已经将代码用于针对amp
绘制wd
以获得f
的单个值。结果是共振峰:
下面给出了amp
对wd
的{{1}}的一个值(产生上述图像)的代码。
f
现在,我希望针对from pylab import *
from scipy.integrate import odeint
from numpy import *
import math
#Parameters.
k = 2.0
m = 1.0
w0 = (k/m)**(1/2)
alpha = 0.2
l = alpha/(2*m)
f = 1.0
wd = w0 + 0.025
beta = 0.2
t_fixed = 2.0
#Arrays.
t = linspace(0.0, 400.0, 400.0)
wd_array = linspace(w0-1.0, w0+1, 400.0)
f_array = linspace(10.0, 100.0, 3.0)
#Time step.
init_x = 0.0
init_v = 0.0
dx = 15.0
dv = 0.0
init_cond = [init_x,init_v]
init_cond2 = [init_x + dx,init_v + dv]
def rhs6(c,t,wd):
c0dot = c[1]
c1dot = -2*l*c[1] - w0*w0*c[0] + (f/m)*cos((wd)*t)
return [c0dot, c1dot]
amp_array=[]
for wd in wd_array:
res = odeint(rhs6, init_cond, t, args=(wd,))
amp = max(res[:,0])
amp_array.append(amp)
plot(wd_array, amp_array)
xlabel('Driving frequency, wd')
ylabel('Ampltiude, amp')
show()
找到amp
多个wd
的值。我试图通过基本上在f
上创建一个for
循环语句来做到这一点。但是,我的方法不起作用,我收到错误:
f_array
。
因为展示尝试是好的,所以下面是我的。
setting an element with a sequence
有什么想法吗?
答案 0 :(得分:1)
您的问题是full_array
是一个numpy数组,您正在尝试将其中的元素设置为列表,因此setting an element with a sequence
。
要解决此问题,您可以改为创建一个二维numpy数组,然后将每行设置为amp_array
,如下所示
from pylab import *
from scipy.integrate import odeint
from numpy import *
import math
#Parameters.
k = 2.0
m = 1.0
w0 = (k/m)**(1/2)
alpha = 0.2
l = alpha/(2*m)
f = 1.0
wd = w0 + 0.025
beta = 0.2
t_fixed = 2.0
#Arrays.
t = linspace(0.0, 200.0, 200.0)
wd_array = linspace(w0-1.0, w0+1, 200.0)
f_array = linspace(10.0, 200.0, 3.0)
#Time step.
init_x = 0.0
init_v = 0.0
dx = 15.0
dv = 0.0
init_cond = [init_x,init_v]
init_cond2 = [init_x + dx,init_v + dv]
def rhs6(c,t,wd,f):
c0dot = c[1]
c1dot = -2*l*c[1] - w0*w0*c[0] + (f/m)*cos((wd)*t)
return [c0dot, c1dot]
full_array = zeros((len(f_array),len(wd_array)))
for index,force in enumerate(f_array):
amp_list = []
for wd in wd_array:
res = odeint(rhs6, init_cond, t, args=(wd,force))
amp = max(res[:,0])
amp_list.append(amp)
# print(res)
amp_array = array(amp_list)
full_array[index,:] = amp_array
for f in full_array:
plot(wd_array, f)
show()
或者,您可以关注gboffi's建议并使用np.vstack
或np.hstack
来创建full_array
。
最后绘制数组的for
循环也不正确,所以我编辑了它。图表看起来像