2016-05-01 5 views
2

Так что я пытаюсь вычислить интеграл по y, тогда я хочу рассчитать exp (-t * решение) и проинтегрировать это по x.Интеграция функции, которая сама включает интеграл с использованием SciPy

Это должно быть, как это:

Интеграл по х (ехр (-t * B)) от 0 до Pi

В = Интеграл по у (3.0 * (син (х) * грех (y) * sin (TM) + cos (x) * cos (TM)) ** 2.0-1.0) ** 2.0 от 0 до 2Pi

Я попытался сделать это с помощью scipy, но это не будет интегрирование по y без x.

Вот мой код до сих пор:

from numpy import cos, sin, exp 
import math 
import scipy.integrate as integrate 

t=0.0 
TM=(54.74/180)*math.pi 

def integrand(y,x): 
    return (3.0*A(y,x)**2.0-1.0)**2.0 

def A(y,x): 
    return sin(x)*sin(y)*sin(TM)+cos(x)*cos(TM) 

while t<10: 
    t+=4 
    resultbet, err=integrate.nquad(integrand, [(0.0, 2*math.pi)]) 
    result=exp(-t*resultbet) 
    resultalph, err=integrate.nquad(result, [(0.0, math.pi)]) 
+0

Я не понимаю, что вы пытаетесь сделать. Можете ли вы написать уравнения, которые вы пытаетесь решить? –

+0

Хорошо, я пытаюсь: Интеграл над x (exp (-t * B)). B = Интеграл над y (3.0 * (sin (x) * sin (y) * sin (TM) + cos (x) * cos (TM)) ** 2.0-1.0) ** 2.0 Это действительно не Хорошее уравнение, я знаю: D –

+0

, который не похож на форму scipy, может обрабатывать меня. Похоже, вам нужен подход, например, интеграция дифференциального уравнения для решения этой проблемы. Или дискретизируйте по x и приблизите внешний интеграл. –

ответ

1

Вы хотите интегрировать по у, а затем применить экспоненциальную функцию, а затем интегрировать над й. Это не двойной интеграл, это интеграция функции, определенной в терминах интеграла. Я переписал код, соответственно, сохраняя свои определения А и подынтегральное:

def B(x): 
    return integrate.quad(lambda y: integrand(y,x), 0, 2*math.pi)[0] 

while t<10: 
    t += 4 
    result = integrate.quad(lambda x: x*exp(-t*B(x)), 0, math.pi) 
    print(result) 

Выход:

(0.28030701904213656, 1.0526577138223263e-08) 
(0.1972630762340601, 1.3996736645569703e-12) 
(0.16081518182419666, 9.188712047715815e-11) 

Здесь первое число является значением интеграла, вторая оценка ошибок; это то, что возвращает integrate.quad. (И именно поэтому в конце функции B есть 0 [0])

Функция B принимает x как аргумент и возвращает результат одномерного интегрирования по y от 0 до 2 * pi. Затем в петле интегрируется функция x*exp(-t*B(x)).

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

  • Нет связанных вопросов^_^