2014-02-24 64 views
0

我已經寫了一個代碼來解決使用中點法的各種積分。我曾爲其他函數工作,但是當試圖計算這個特定函數的積分(你會在代碼中看到它)時,我遇到了這個錯誤:「用一個序列設置一個數組元素。」如果有人能指出是什麼導致了這個問題,那將是非常感謝。Python序列錯誤

編輯:我已經標記了錯誤發生的地方。

這是我的代碼:

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

在所述循環的第一次迭代中運行時有問題的線具有增加一個陣列,並且其廣播到陣列的標量:

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)) 
+0

我總是做出這樣愚蠢的疏忽。我不應該這麼晚就編程。這固定了它。謝謝。 –

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))