Я пытаюсь написать цикл, который вычисляет значение определенного интеграла на каждом шаге. Функция 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);
'^' в Python означает XOR, а не «власть». Это серьезная ошибка в нескольких местах вашего кода. '1^1' равно нулю, к вашему удивлению. –
Я предполагаю, что вы хотели передать функцию для интеграции, а не вычисленное значение. Таким образом, вы должны, вероятно, поместить 'lambda s:' перед вашим аргументом в значение integ. – happydave