【发布时间】:2015-05-05 05:28:16
【问题描述】:
我的代码存在问题,该代码是一种用于数值求解谐振子的 Runge Kutta 算法。不幸的是,我收到一个错误,说我不能将序列乘以浮点类型的非整数。考虑到这段代码几乎是来自教育文本的逐字记录,我看不出错误在哪里。有人可以帮我吗?感谢您友好的邻居蜘蛛侠。
import numpy as np
import matplotlib.pyplot as plt
#Variable Definitions
N = 500
x0 = 1.0
v0 = 0.0
dur = 10.0
dt = dur/float(N-1)
#creating the array
y = np.zeros([N,2])
y[0,0] = x0
y[0,1] = v0
#runge kutta algorithm
def rk4(y, time, dt, deriv)
k1 = dt * deriv(y,time)
k2 = dt * deriv(y + 0.5*k1,time + 0.5*dt)
k3 = dt * deriv(y + 0.5*k2, time + 0.5*dt)
k4 = dt * deriv(y + k3, time + dt)
y_next = y + (k1 + 2*(k2+k3)+k4)/6
return y_next
#Harmonic oscillator
def Harmonic(x,time):
y0 = x[1]
y1 = (-1)*x[0]
return ([y0,y1])
#forming data points
for i in range(N-1):
y[i+1] = rk4(y[i],0, dt, Harmonic)
time = np.linspace(0, dur, N)
#plotting
plt.plot(time,y[:,1])
plt.show()
错误在第 33 行。
TypeError: 不能将序列乘以“float”类型的非整数
【问题讨论】:
-
它说你的错误发生在哪一行?
-
Harmonic返回列表。当您将其中一个列表乘以浮点数时,您期望会发生什么? -
在问题中发布您的实际异常(带有回溯),不要只是模糊地描述它。
-
@user2357112:如果他是一名数字程序员,他可能期望它返回一个新列表,其中每个值都乘以该浮点数。 (在这种情况下,他可能应该使用 NumPy 数组,而不是列表。)
-
只是出于好奇,教科书是什么?
标签: python integer numerical runge-kutta