用mpmath实现Python中的Laplace逆

2024-04-19 23:00:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用“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}$

我得到这个错误:

enter image description here

你能帮我解决这个问题吗?在

谢谢!在


Tags: httpsimportgithubcom算法链接asnp
1条回答
网友
1楼 · 发布于 2024-04-19 23:00:02

对象InverseLaplaceTransform具有一个属性degrees,该属性指示实现给定精度级别所需的近似级别。您的InverseLaplaceTransform副本在每次用越来越小的值调用它时都会更新degrees。最终,degrees太小了,参数fp只有一个值,这不足以继续进行进一步的计算。在

解决方案:编辑对invlapdehoog的调用,每次重置度数。不过,我建议直接调用invertlaplace,而不是invlapdehoog。在

for i in xrange(0,10):
    G.append(mp.invertlaplace(f, t[i], method = 'dehoog', degree = 18))

编辑: 原海报在对这个解决方案的评论中提出了一个相关的问题。他们问为什么连续调用mp.invertlaplace会增加计算时间(相当大)。简而言之,mp.invertlaplace正在更新其属性精度,这决定了在计算拉普拉斯逆数时应该计算多少个小数位。与上面的解决方案一样,我们可以将精度传递给每个调用,以确保获得所需的精度(例如-10个小数位):

^{pr2}$

PS-您可以使用下面的代码片段同时对所有t应用反拉普拉斯:

G = map( lambda x: mp.invertlaplace(f, x, method = 'dehoog', dps = 10, degree = 18), t)

相关问题 更多 >