Попытка интегрировать функцию выдает «цикл ufunc не поддерживает аргумент 0 типа Symbol»

#python #numpy #math #integration

#python #numpy #математика #интеграция

Вопрос:

Мои пакеты:

 from pylab import plt
import pandas as pd
import numpy as np
import sympy as sy
import matplotlib.pyplot as plt
import datetime as dt
from pylab import mpl
import scipy.integrate as sci
import scipy.stats as scs
import pandas_datareader as web
import statsmodels.api as sm
import scipy.optimize as spo
from yahoo_fin import options
from dawp import *
import math
import sys
import yfinance as yf
  

Я определяю функцию:

 def Hh(n, x):
    if n == -1:
        return np.exp(-x**2 / 2)
    elif n == 0:
        return math.sqrt(2*math.pi) * scs.norm.cdf(-x)
    else:
        return (Hh(n-2, x) - x * Hh(n-1, x)) / n
  

Теперь я хотел бы определить другую функцию, которая интегрирует Hh функцию по отношению к x . Я пытаюсь сделать это следующим образом:

 def I(n, c, a, b, d):
    return sci.quad(np.exp(a*x) * Hh(n, b*x - d), c, np.inf)
  

но я получаю эту ошибку:

 AttributeError                            Traceback (most recent call last)
AttributeError: 'Symbol' object has no attribute 'exp'

The above exception was the direct cause of the following exception:

TypeError                                 Traceback (most recent call last)
<ipython-input-73-796991ea4106> in <module>
----> 1 I(1,1,1,1,1)

<ipython-input-72-0a67e7ee1499> in I(n, c, a, b, d)
      1 def I(n,c,a,b,d):
----> 2     return sci.quad(np.exp(a*x)*Hh(n,b*x-d), c, np.inf)

TypeError: loop of ufunc does not support argument 0 of type Symbol which has no callable exp method
  

Что я должен изменить, чтобы получить правильный результат и в отношении x ?

Комментарии:

1. Что такое sci и scs ?

2. Я редактирую свой пост и добавляю пакет

3. Какой параметр был бы для вас примером?

4. Почему вы не можете использовать функцию интеграции sympy?

5. Вы пытаетесь использовать функции, которые не могут использовать символы. Мой совет — определить x как символ, вручную закодировать норму, квадратный корень и экспоненциальные функции относительно x , а затем использовать sympy.integrate() для интеграции выходных данных Hh() .

Ответ №1:

Вы можете определить неопределенный интеграл каждого из ваших условных выражений следующим образом:

 import numpy as np
import sympy as sp

x = sp.symbols('x')

def Hh(n):

    if n == -1:
        fx = sp.exp(-x**2 / 2)

    elif n == 0:
        fx = ((2*np.pi)**(1/2)) * (sp.exp((-x**2)/2) / (2*np.pi)**(1/2))

    return fx

print (sp.integrate(Hh(n=0), x))
  

Может существовать функция sympy, которая может обрабатывать norm (используется, когда n == 0 ), но я никогда ее не использовал (вы увидите, что я только что закодировал формулу в).
Кроме того, обязательно используйте sp.exp() вместо math.exp() or np.exp() при работе с символически определенными экспоненциальными функциями.

Если вам нужно определить определенный интеграл, взгляните на: https://docs.sympy.org/latest/modules/integrals/integrals.html

Я не вставил ваше else утверждение, чтобы сэкономить время, но вышеупомянутое все равно должно применяться.