使用Python,Sympy对广义连续分数进行逆拉拉变换

时间:2017-09-20 16:29:17

标签: python-3.x sympy differential-equations inverse-transform

正如标题所示,我正在努力实现上述目标。我这样做的第一次尝试涉及解决连续分数部分。问题:我怎么知道我需要继续分数部分的深度?我尝试选择3级(连续分数下降3级)。但这样做需要花费大量时间来执行。有人可以帮忙吗?继承我的代码:

我计算广义连续分数的函数:

def list_to_fract2(l,l2):
    expr2 = sym.Integer(0)
    for i,j in zip(reversed(l),reversed(l2)):
        expr2 = j-expr2
        expr1 = i
        expr2 = expr1 / expr2
    return expr2

ak = sym.symbols("a1:4") #3 levels deep
bk = sym.symbols('b1:4') #3 levels deep
mu = sym.Symbol('mu')
s,lam = sym.symbols(['s','lam'])

expr = list_to_fract2(ak,bk) 

expr

a1 /( - a2 /( - a3 / b3 + b2)+ b1)

#Initializing parameters to be subbed into sympy later
k = np.arange(1,len(ak)+1)
dk = mu + k*frac(str(thetas[0]))
a_k = lam * dk
b_k = s + dk + lam
expr = expr.subs({i:j for i,j in zip(ak,a_k)})
expr

lam *(mu + 71/100)/(b1 - lam *(mu + 71/50)/(b2 - lam *(mu + 213/100)/ b3))

expr = expr.subs({i:j for i,j in zip(bk,b_k)})
expr

lam *(mu + 71/100)/( - lam *(mu + 71/50)/( - lam *(mu + 213/100)/(lam + mu + s + 213/100)+ lam + mu + s + 71/50)+ lam + mu + s + 71/100)

expr = expr.subs({'mu': frac(str(mu2)),'lam':frac(str(lamda_emp[0]))})
expr

1221 /(400 *(s + 7/2 - 2183 /(500 *(s + 421/100 - 11359 /(2000 *(s + 123/25))))))

问题:现在我应该采取相反的措辞吗?

我接下来尝试了这个:

t = sym.symbols("t", positive=True)
ans = sym.inverse_laplace_transform(expr,s,t).evalf().simplify()

这在我的机器中执行时间过长。如果我将级别更改为2,在这种情况下它实际上工作得非常快。有人能帮忙吗?感谢

我的参数如下:mu = 0.94,theta = 0.71,lamda = 1.85

dk = k * theta

ak = lam * dk

bk = s + dk + lam

我试图解决以下功能。假设在简单情况下b = 1。然后最后采用逆拉普拉斯变换

enter image description here

实际上,我想采用以下等式的反拉片。但在我尝试这个之前,我想首先尝试基础案例。

enter image description here

0 个答案:

没有答案