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