【问题标题】:How to obtain second derivative of generalized Laguerre polynomials with sympy?如何用 sympy 获得广义拉盖尔多项式的二阶导数?
【发布时间】:2019-09-24 06:32:14
【问题描述】:

我可以获得导数的表达式,但它不适用于 n = 0, 1,因为 n 应该 >= 0 并且在导数中有 L(n-2, 2, r)。考虑到 L 为显式形式时很容易得到,如何用 sympy 计算?

更新:我的代码。所以我不能用 l = 0 代替 chiLambdified。

import sympy as sym
from sympy.utilities.lambdify import lambdify
from sympy.functions.special.gamma_functions import gamma as SymG
from sympy import assoc_laguerre as SymL
from sympy import factorial as SymFactorial
from sympy import exp as SymExp

r, l, beta = sym.symbols('r, l, beta', real = True)

def chifD(r, l, beta):
    return sym.sqrt( SymFactorial(l)*beta**3/(SymG(3 + l))) * r * SymL(l,2, beta * r) * SymExp(- beta * r / 2 )

def chiD(r, l, beta):
    return sym.diff(chifD(r ,l, beta), r, r)

chiLambdified = sym.lambdify((r, l, beta), chiD(r, l, beta), 'sympy')

【问题讨论】:

  • 什么是L?您使用什么导入语句?请分享一些可重现的代码。
  • 我不确定我是否理解这里的问题:n
  • 你不知道如何获得0次或1次多项式的二阶导数?

标签: python sympy


【解决方案1】:

0 或 1 阶多项式的二阶导数为零。
可以如下展示。

# Calculating the third order differential of 
# a second order polynomial: yields a zero
diff(3*x**2 + 2, x, 3)

使用sympy 计算一阶和二阶导数。

from sympy import Symbol, Function, diff
x = Symbol("x")
dydx = diff(3*x**2 + 2, x, 1)
d2ydx2 = diff(3*x**2 + 2, x, 2)
dydx, d2ydx2

输出

(6*x, 6)

如果你想使用一个函数:

f = Function("f")(x)
n = 2 # order of derivative
d2ydx2 = diff(f, x, n).subs(f, 3*x**2 + 2).doit()

另一个使用特殊函数的例子:

import 
Lgr = sympy.polys.orthopolys.laguerre_poly
Lgr(2, x=x), diff(Lgr(2, x=x), x, 2), diff(Lgr(2, x=x), x, 3), diff(Lgr(1, x=x), x, 2)

输出

(3*x**2/2 - 1/2, 1, 0, 0)

【讨论】:

  • 它是零,但我需要在我的通用表达式中获取它。当然,我可以将零代入下一个函数(我已经完成了),但这很尴尬,我想代入二阶导数的一般表达式,如果 n = 0, 1,它将只是零。跨度>
  • 这就是显示的内容!一阶拉盖尔多项式的二阶导数为零 ==> diff(Lgr(1, x=x), x, 2) 返回
猜你喜欢
  • 2020-03-05
  • 2014-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
相关资源
最近更新 更多