2014-08-31 2 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. В последней строке, я хочу, чтобы оценить bigF(t) на t=tn после 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, а не «власть». Это серьезная ошибка в нескольких местах вашего кода. '1^1' равно нулю, к вашему удивлению. –

+1

Я предполагаю, что вы хотели передать функцию для интеграции, а не вычисленное значение. Таким образом, вы должны, вероятно, поместить 'lambda s:' перед вашим аргументом в значение integ. – happydave

ответ

Смежные вопросы