Python序列错误

时间:2014-02-24 04:18:46

标签: python numpy

我编写了一个使用中点方法解决各种积分的代码。我让它用于其他一些函数,但是当试图计算这个特定函数的积分时(你将在代码中看到它),我遇到了这个错误:“设置一个带有序列的数组元素。”如果有人能够指出造成这个问题的原因,我们将不胜感激。

编辑:我已经标记了发生错误的行。

这是我的代码:

from matplotlib.pylab import *


N = 1000
xi = 1.0
xf = 4.0
dx = (xf - xi)/N
x = zeros(N+1)
F = zeros(N+1)
k = m = 1
Z = 2*sqrt((2*m)/2)
A = 1
x[0] = xi
F[0] = 0.0
for i in range(1,N+1):
    x[i] = x[i-1] + dx
    xmid = (x[i] + x[i-1])/2.0
    F[i] = F[i-1] + dx*(Z*sqrt(k*A**4 - k*x**4)) #error here
print 'F at', xf, ' = ', F[N]
plot(F,x,'b')
xlabel('F')
ylabel('x')
show()

2 个答案:

答案 0 :(得分:0)

在循环的第一次迭代的运行时,有问题的行添加了一个数组和一个广播到数组的标量:

F[i-1] = 0.0
dx*(Z*sqrt(k*A**4 - k*x**4)) = array([ 0.   ,    nan,  0.006, ...,  0.006,  0.006,  0.006])

因此,在运行时,它正在尝试为索引分配一个数组,该数组对于一维F数组没有明确定义。

F[i] = array([ 0.   ,    nan,  0.006, ...,  0.006,  0.006,  0.006])

检查你的公式,但我猜你可能打算做这样的事情:

dx*(Z*sqrt(k*A**4 - k*x[i]**4)) 

答案 1 :(得分:0)

这里的问题是x是一个数组。所以,

F[i-1] + dx*(Z*sqrt(k*A**4 - k*x**4))
由于广播,

返回数组。你可能意味着什么:

F[i-1] + dx*(Z*sqrt(k*A**4 - k*x[i]**4))