Python:带边界(包括变量)的 Sympy 定积分

问题描述 投票:0回答:1

我在让 sympy 模块计算定积分时遇到了一些麻烦。 Equation 当我尝试运行以下代码时,程序无法完成。问题似乎来自积分界限包含方程中的变量这一事实。它不断地运行,永远无法解出方程。我能够通过使用不同的界限来求解方程,但这不是我想要的。如果您有任何建议或提示,我很高兴听到。感谢您的帮助。

import sympy
import numpy as np
from scipy.integrate import quad
import matplotlib.pyplot as plt

sympy.init_printing()
Q, eta, phi, kappa, lamb, beta, T0, T1, deltaT, T = sympy.symbols('Q eta phi kappa lamb beta T0 T1 deltaT T', real=True)


integrand = sympy.integrate(eta**(lamb*beta-1)*sympy.exp(-eta**2), (eta,0,eta))

T = T0 + deltaT*integrand

fT = sympy.lambdify((T0,T1,eta,lamb,beta), T, 'numpy')
python numpy sympy symbolic-integration
1个回答
0
投票

看起来 numpy 没有这个表达式所需的功能。 请参阅下面的示例代码。

import sympy as sym
import numpy as np

eta, eta_prime, lamb, beta, temp = sym.symbols('eta eta_prime lamb beta temp', real=True)
integrand = sym.integrate(eta_prime**(temp)*sym.exp(-eta_prime**2), (eta_prime, 0, eta))
integrand = integrand.replace(temp, lamb*beta-1)
integrand = sym.simplify(integrand)

sym.pprint(integrand)

T, T0, T1, deltaT = sym.symbols('T T0 T1 deltaT', real=True)
T = T0 + deltaT*integrand

sym.pprint(T)

fT = sym.lambdify((T0,T1,eta,lamb,beta),T)

print(fT(1,2,3,4,5))

fT_numpy = sym.lambdify((T0,T1,eta,lamb,beta),T, 'numpy')

print(fT_numpy(1,2,3,4,5))

最后换行是因为 numpy 不知道 sympy 使用的 lowergamma 函数。

注意,我必须在积分中引入一个临时实变量

temp
,稍后将其替换为正确的表达式
lamb*beta-1
。从数学上讲,这种替换是精确的,但不知何故 sympy 没有看到它,并且在给定原始表达式时需要很长时间。我还在积分(不是边界)中将
eta
替换为
eta_prime

© www.soinside.com 2019 - 2024. All rights reserved.