【发布时间】:2017-08-04 07:13:17
【问题描述】:
我试图找到一个表达式的拉普拉斯逆,在声明时除一个变量外,所有变量都已定义:
from numpy import *
import mpmath as mp
p0 = 1
E = 2
c= 3
L = 4
x = 2.5
t = linspace(1,5,10)
ulaplace = []
def U(s):
return(c*p0*(-exp(L*s/c) + exp(s*(L + 2*x)/c))*exp(-s*x/c)/(E*s**2*(exp(2*L*s/c) + 1)))
for ti in t:
ulaplace.append(mp.invertlaplace(U, ti, method='talbot'))
但我收到此错误:
Traceback (most recent call last):
File "D:\TEMP\IDLEscripts\CompareAnalyticalSolutions2.py", line 46, in <module>
ulaplace.append(mp.invertlaplace(U, ti, method='talbot'))
File "C:\Python35\lib\site-packages\mpmath\calculus\inverselaplace.py", line 805, in invertlaplace
fp = [f(p) for p in rule.p]
File "C:\Python35\lib\site-packages\mpmath\calculus\inverselaplace.py", line 805, in <listcomp>
fp = [f(p) for p in rule.p]
File "D:\TEMP\IDLEscripts\CompareAnalyticalSolutions2.py", line 43, in U
return(c*p0*(-exp(L*s/c) + exp(s*(L + 2*x)/c))*exp(-s*x/c)/(E*s**2*(exp(2*L*s/c) + 1)))
TypeError: attribute of type 'int' is not callable
我也尝试了doc website 建议的lambda function 格式,但仍然遇到同样的错误。
mpmath.invertlaplace 函数是否要求在定义时所有内容都以数字形式出现?我问是因为这有效:
>>> import mpmath as mp
>>> def F(s):
return 1/s
>>> mp.invertlaplace(F,5, method = 'talbot')
mpf('1.0')
如果是这样,我需要能够规避这一点。对我来说,重点是玩弄其他变量,看看它们如何影响逆拉普拉斯算子。此外,有人会认为该函数在传递给mpmath 之前已被评估。
如果不是,那这里到底发生了什么?
【问题讨论】: