【问题标题】:Python: Sympy definite integral with bounds including variablePython:带有边界的Sympy定积分,包括变量
【发布时间】:2017-12-13 15:40:52
【问题描述】:

我在让 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')

【问题讨论】:

  • 输出是什么?什么界限打破了它?
  • 你的符号有缺陷。积分界和积分变量不要使用相同的符号。
  • Prith,我正在尝试使用来自this 方程的 sympy 来创建一个可调用函数。打破它的界限是方程所要求的积分界限中的 eta。 Hannebambel,您提到我不应该使用相同的符号进行积分,但我试图复制的方程确实使用相同的符号表示积分界和积分变量。
  • 是的,我已经看到了这个等式,但一开始就很糟糕。想象一下,我想计算 T(2*eta)。 2 会出现在右侧的什么位置?自然会期望它出现在右侧的每个 eta 之前。但这根本不会改变积分,所以 T(eta)=T(2*eta)...
  • 啊,我明白你的意思了。好吧,我会试一试。感谢您的帮助!

标签: python numpy integration sympy


【解决方案1】:

似乎 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

【讨论】:

    猜你喜欢
    • 2015-08-25
    • 2020-07-30
    • 2023-01-02
    • 2018-09-04
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 2016-11-19
    • 2018-03-11
    相关资源
    最近更新 更多