我想用“DE HOOG”算法进行数值拉普拉斯逆变换。我想使用“mpmath”软件包,我从以下链接安装它:
https://github.com/klkuhlm/mpmath
假设我需要在t=1时求下列函数的拉普拉斯逆变换:
f=1/(s-1)
f的拉普拉斯逆变换是:e^(t)
当t=1时,结果应为=e
import mpmath as mp
import numpy as np
def f(s):
return 1 / (s-1)
t = np.linspace(0.01,0.5,10)
G = []
for i in range(0,4):
G.append(mp.invlapdehoog(f, t[i]))
print G
问题是,只有当我把“I”的范围设为小于4时,它才是完美的。例如,一旦我替换:
^{pr2}$我得到这个错误:
你能帮我解决这个问题吗?在
谢谢!在
对象
InverseLaplaceTransform
具有一个属性degrees
,该属性指示实现给定精度级别所需的近似级别。您的InverseLaplaceTransform
副本在每次用越来越小的值调用它时都会更新degrees
。最终,degrees
太小了,参数fp
只有一个值,这不足以继续进行进一步的计算。在解决方案:编辑对
invlapdehoog
的调用,每次重置度数。不过,我建议直接调用invertlaplace
,而不是invlapdehoog
。在编辑: 原海报在对这个解决方案的评论中提出了一个相关的问题。他们问为什么连续调用
^{pr2}$mp.invertlaplace
会增加计算时间(相当大)。简而言之,mp.invertlaplace
正在更新其属性精度,这决定了在计算拉普拉斯逆数时应该计算多少个小数位。与上面的解决方案一样,我们可以将精度传递给每个调用,以确保获得所需的精度(例如-10个小数位):PS-您可以使用下面的代码片段同时对所有t应用反拉普拉斯:
相关问题 更多 >
编程相关推荐