Подходит ли scipy.integrate.quad для интеграции матричного выражения? - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь интегрировать матричную функцию в Python, используя функцию scipy quad. Это подходит для матричной интеграции или есть лучшая функция для использования?

Подынтегральное выражение определяется как:

def integrand(x, W, Omega, omega, K, R):

    return np.real(np.dot(W,np.dot(expm(1j*(Omega-omega*np.identity(2))*x+K*x+R*x),np.ones([2,1]))))

, и я интегрирую, используя quad, следующим образом:

def integral(W, Omega, K, R, omega):

    return quad(integrand, 0, np.inf, args=(W, Omega, omega, K, R))[0]

Для указанных значений ввода I проверил, что подынтегральное выражение действительно. Я полагаю, что интеграл существует, но quad возвращает nan, поэтому мне интересно, если quad не подходит для такого рода интеграции?

Полный код:

import numpy as np
from scipy.linalg import expm
from scipy.integrate import quad

def integrand(x, W, Omega, omega, K, R):

    return np.real(np.dot(W,np.dot(expm(1j*(Omega-omega*np.identity(2))*x+K*x+R*x),np.ones([2,1]))))

def integral(W, Omega, K, R, omega):

    return quad(integrand, 0, np.inf, args=(W, Omega, omega, K, R))[0]

Rb = 250
a = 0.5
Rf = 23
k = 200
wf = 250
wb = wf

omega = 0

W = np.array([a,1-a])
Omega = np.array([[wf,0],[0,wb]])
K = np.array([[-k,k],[k,-k]])
R = np.array([[Rf,0],[0,Rb]])


print(integral(W, Omega, K, R, omega))

Результат выглядит следующим образом:

python3.6/site-packages/scipy/integrate/quadpack.py:364: IntegrationWarning: The occurrence of roundoff error is detected, which prevents
  the requested tolerance from being achieved.  The error may be
  underestimated.
  warnings.warn(msg, IntegrationWarning)
nan
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...