2014-08-31 69 views
2

我正在嘗試編寫一個循環來計算每一步中定積分的值。功能bigF非常複雜。簡而言之,它集成了一系列關於s,from s=tn-(n/2)s=tn+(n/2)的術語。整合後,bigF仍然有一個變量t。所以你可以說bigF(t) = integral(f(s,t)),其中f(s,t)integrate.integ之後的大項混亂。在最後一行,我想在t=tn評估bigF(t)bigF計算的f(s,t)在Python中計算定積分

積分後運行後,我得到的錯誤global name 's' is not defined。但s只是一個虛擬變量,因爲我正在計算卷積。我需要做什麼?

import numpy as np 
import scipy.integrate as integ 
import math 

nt=5001#; %since (50-0)/.01 = 5000 
dt = .01#; % =H 
H=.01 

theta_n = np.ones(nt) 
theta_n[1]=0#; %theta_o 
omega_n = np.ones(nt) 
omega_n[1]=-0.4# %omega_o 
epsilon=10^(-6) 
eta = epsilon*10 
t_o=0 

def bigF(t, n): 
    return integrate.integ((422.11/eta)*math.exp((5*(4*((eta*t-s-tn)^2)/eta^2)-1)^(-1))*omega, s,tn-(n/2),tn+(n/2)) 

for n in range(1,4999) 
    tn=t_o+n*dt; 
    theta_n[n+1] = theta_n[n] + H*bigF(tn, n); 
+0

Python中的'^'代表XOR,而不是「power」。這是代碼中幾個地方的嚴重錯誤。 '1^1'爲零,讓您大吃一驚。 – 2014-08-31 04:49:16

+1

我猜你的意思是要傳遞一個函數來整合,而不是一個計算值。所以你應該把'lambda s:'放在你的參數前面來整合。 – happydave 2014-08-31 04:50:54

回答

0

如果您正在進行卷積運算,聽起來像是想要numpy.convolve