【问题标题】:How to find a function's rth derivative when r is symbolic in Mathematica?当 r 在 Mathematica 中是符号时,如何找到函数的 r 次导数?
【发布时间】:2011-11-26 12:22:24
【问题描述】:

我有一个函数f(t)=2/(2-t)。在不使用 Mathematica 的情况下,在 t=0(即2^(-r)*r!)处获得 rth 导数并不难。在 Mathematica 计算的情况下,当 r=4 时,我可以像这样得到 r 次导数:D[2/(2-t), {t, 4}]。但是,当 r 是任何整数时,如何在 Mathematica 中获得 t=0 处的 r 次导数?我尝试使用这个表达式,但它没有按预期工作:

Simplify[D[2/(2 - t), {t, r}], Assumptions -> Element[r, Integers]]  /. {t->0}

是否可以像我们人类一样在 Mathematica 中象征性地进行上述数学运算?

【问题讨论】:

  • 好像 Maple 可以做到:diff(x^4, x$n); 结果为pochhammer(5-n,n)*x^(4-n)diff(sin(x), x$n);sin(x+1/2*n*Pi)

标签: wolfram-mathematica symbolic-math


【解决方案1】:

对于分析函数,您可以使用 SeriesCoefficient。

nthDeriv[f_, x_, n_] := n!*SeriesCoefficient[f[x], {x, x, n}]

你的例子:

f[t_] := 2/(t - 2)

nthDeriv[f, t, n]
(*
-> Out[39]= n!*Piecewise[{{-2*(2 - t)^(-1 - n), n >= 0}}, 0]
*) 

【讨论】:

  • +1 事实上,SeriesCoefficient 文档的“更多信息”部分写道:“在形式 SeriesCoefficient[f,{x,Subscript[x, 0],n}] 中,顺序n 可以是符号的。” 两个问题:1)为什么这个符号评估能力保留给SeriesCoefficient而不授予D? 2) 我不确定我是否理解{x, x, n} 表格。第二个参数通常用于 x0,即围绕其展开系列的点,导致展开式中的 (x-x0) 术语。但是(x-x) 是什么意思?在Series 你不能这样做。
  • 似乎它不适用于 any 分析乐趣。查看(例如)f[t_]:= Sin@Sin@t 会发生什么
  • @belisarius 我应该将分析性作为必要条件。据我所知,获得一般的第 n 项依赖于与符号闭合形式相关的属性。
  • @Sjoerd (1) D 不做任何假设,而 Series 和 SeriesCoefficient 在某些地方“假设”某种形式的系列表示确实存在。尽管有些笨拙,但有一些方法可以巧妙地利用这种假设。此外,SeriesCoefficient 包含了一些从符号求和能力中借来的通用“第 n 项”技术。我怀疑尝试将其中任何一个改进到 D 中是否有意义(可能会产生比它解决的问题更多的问题)。
  • @Sjoerd (2) 在 Series 中,至少在输出形式中是没有意义的,因为 Series 使用 (x-x0) 的幂,因此当 x 和 x0 重合时它们会为零。从 SeriesCoefficient 的角度来看,两者都是形式变量,而且碰巧它们甚至可以是相同的。
【解决方案2】:
f = FindSequenceFunction[Table[D[2/(2 - t), {t, n}], {n, 1, 5}], r]

(*
-> -((2 (2 - t)^-r Pochhammer[1, r])/(-2 + t))
*)
g[r_, t_] := f
FullSimplify@FindSequenceFunction[Table[g[r, t], {r, 1, 5}] /. t -> 0]

 (*
 -> 2^-#1 Pochhammer[1, #1] &
 *)

编辑

或者只是

FindSequenceFunction[Table[D[2/(2 - t), {t, n}], {n, 1, 5}], r] /. t -> 0
(*
-> 2^-r Pochhammer[1, r]
*)

*编辑 *

注意:虽然FindSequenceFunction[] 适用于这种简单的情况,但不要在更一般的情况下押注。

编辑

要获得用阶乘函数表示的结果,只需执行以下操作:

FunctionExpand@FindSequenceFunction[Table[D[2/(2-t),{t, n}],{n,1,5}], r] /.t->0
(*
-> 2^-r Gamma[1 + r]
*)

【讨论】:

  • 我有点不同意 mma 的输出格式,我会写成((1~Divide~(2 - t))~Power~#1 1~Pochhammer~-1 + #1) & :)
  • @acl 让我们保持文明:)
  • @acl 我会送你回来的,你等着。 ;^p
  • 一个很好的解决问题的间接方法!谢谢!另一个小问题:为什么 Mathematica 没有以“2^-r r!”的形式显示输出即使我将您的 FunctionExpand 与 Assumptions -> Element[r, Integers] 一起应用?我知道 Gamma[1+r] = r!对于任何 r,但对于整数,我更喜欢 r!由于它的常见用途。
  • Mma 中的@jscoot 函数转换是一门艺术,可能不值得努力。
【解决方案3】:

还有另一种有时效果更好的方法(给出封闭形式的表达式而不是递归关系):

In[1]:= InverseFourierTransform[(-I k)^n FourierTransform[1/(1 + x^2)^Log[2], x, k] , k, x]
Out[1]= (2^(-1 + n - 1/2 Log[1/x^2])
      Abs[x]^-Log[2] ((-I)^
      n ((1 + n) x Gamma[(1 + n)/2] Gamma[
      n/2 + Log[2]] Hypergeometric2F1[(1 + n)/2, n/2 + Log[2], 1/
      2, -x^2] (n + Log[4]) - 
    2 I Gamma[1 + n/2] Gamma[
      1/2 (1 + n + Log[4])] ((1 + x^2) Hypergeometric2F1[(2 + n)/
         2, 1/2 (1 + n + Log[4]), -(1/2), -x^2] - 
       Hypergeometric2F1[(2 + n)/2, 1/2 (1 + n + Log[4]), 1/
         2, -x^2] (1 + x^2 (3 + 2 n + Log[4])))) + 
 I^n ((1 + n) x Gamma[(1 + n)/2] Gamma[
      n/2 + Log[2]] Hypergeometric2F1[(1 + n)/2, n/2 + Log[2], 1/
      2, -x^2] (n + Log[4]) + 
    2 I Gamma[1 + n/2] Gamma[
      1/2 (1 + n + Log[4])] ((1 + x^2) Hypergeometric2F1[(2 + n)/
         2, 1/2 (1 + n + Log[4]), -(1/2), -x^2] - 
       Hypergeometric2F1[(2 + n)/2, 1/2 (1 + n + Log[4]), 1/
         2, -x^2] (1 + x^2 (3 + 2 n + Log[4]))))))/((1 + n) 
       Sqrt[Pi] x Gamma[Log[2]] (n + Log[4]))

它还可以用于查找重复的反导数。

【讨论】:

    【解决方案4】:

    其他答案让我怀疑我是否不理解潜在的问题,但我认为您应该查看 Derivative 而不是 D 来解决此类问题。

    In[1]:= Remove[f, fD]
    f = 2/(2 - #) &;
    fD[r_Integer, EvaluatedAt_] := Derivative[r][f][#] &[EvaluatedAt]
    

    现在我们有了一个可以轻松评估任何 r 和值的函数。

    In[4]:= fD[#, 0] & /@ {1, 2, 3, 4, 5, 6}
    
    Out[4]= {1/2, 1/2, 3/4, 3/2, 15/4, 45/4}
    

    【讨论】:

    • 您的解决方案仅适用于实际整数 r,我相信 OP 正在寻找一种适用于符号整数 r 的解决方案。
    • @Simon - OP 请求“...当 r 为任意整数时。”以为我已经确定了那部分:),尽管我(想我)现在明白了其他答案在哪里试图找到底层的序列函数。这让我想知道插值函数是否是另一种方法。顺便说一句,我想尽快让我的打字跟上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多