Интеграция на питоне

Привет, мой лектор задал вопрос об интеграции функции через python, и он дал нам очень мало информации. границы + бесконечность и бесконечность и функция

(cos a*x) * (e**-x**2)

пока у меня есть

def gauss_cosine(a, n):
    sum=0.0
    dx = ((math.cosine(a*x)*math.exp(-x**2)))
    return 
    for k in range (0,n):
        x=a+k*dx
        sum=sum+f(x)
    return dx*sum

не уверен, правильно ли это вообще. С уважением

3 ответа

Решение

Ну, у вашего интеграла есть аналитическое решение, и вы можете вычислить его с помощью sympy, как @Bill указал +1.

Тем не менее, я думаю, что вопрос был в том, как численно рассчитать этот интеграл, и это то, что я обсуждаю здесь.

Интегрант четный. Мы уменьшаем домен до [0,+inf]и будет умножаться на 2 результат.

У нас еще есть колебательный интеграл в неограниченной области. Это часто отвратительный зверь, но мы знаем, что он сходится и хорошо ведет себя в +- inf, Другими словами, exp(-x**2) распадается на ноль достаточно быстро.

Хитрость заключается в том, чтобы изменить переменную интеграции, x=tan(t), чтобы dx=(1+x**2)dt, Домен становится [0,pi/2], он ограничен, и численное интегрирование является тогда кусочком пирога.

Пример с правилом Симпсона из scipy, с a=2, С просто 100 Точки дискретизации у нас есть 5 точность цифр!

from scipy.integrate import simps
from numpy import seterr, pi, sqrt, linspace, tan, cos, exp
N = 100
a = 2.
t = linspace(0, pi / 2, N)

x = tan(t)
f = cos(a * x) * exp(-x ** 2) * (1 + x ** 2)

print "numerical solution  = ", 2 * simps(f, t)

print "analytical solution = ",sqrt(pi) * exp(-a ** 2 / 4)

Я не вижу, чтобы это рекомендовало много на этом сайте, но вы можете попробовать sympy:

In [1]: import sympy as sp
In [2]: x, a = sp.symbols(('x', 'a'))
In [3]: f = sp.cos(a*x) * sp.exp(-x**2)
In [4]: res = sp.integrate(f, (x, -sp.oo, sp.oo))
In [5]: res
Out[5]: sqrt(pi) * exp
In [6]: sp.pprint(res)
Out[6]:
         2 
       -a  
       ────
  ___   4  
╲╱ π ⋅ℯ    

Для численного интегрирования попробуйте пакет scipy.

Вашему компьютеру будет очень трудно представить эти границы.

Начните с построения вашей функции.

Это также помогает узнать ответ, прежде чем начать.

Я бы рекомендовал разбить его на два интеграла: один от минус-бесконечности до нуля, а другой от нуля до плюс-бесконечности. Как отмечает flebool ниже, это четная функция. Убедитесь, что вы знаете, что это значит и последствия для вашего решения.

Далее вам понадобится схема интеграции, которая может иметь дело с граничными условиями на бесконечности. Ищите схему квадратурного бревна.

Наивная интеграция Эйлера не будет моей первой мыслью.

Другие вопросы по тегам