我在让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')
答案 0 :(得分: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
替换。在数学上这个替换是准确的,但在某种程度上,当给出原始表达式时,同情并不会看到它并且需要永远。我还在积分(不是边界)中用eta
替换了eta_prime
。