gpt4 book ai didi

wolfram-mathematica - 为 DiscreteShift 设置上值的模式

转载 作者:行者123 更新时间:2023-12-04 08:04:27 24 4
gpt4 key购买 nike

我想为 DiscreteShift 设置一个上值,它会改变被提升为幂的规则:

Unprotect[DiscreteShift];
DiscreteShift /: Power[DiscreteShift[f_, i_], r_] := DiscreteShift[f, {i, r}];
Protect[DiscreteShift];
Power[DiscreteShift[f[n], n], 2] === DiscreteShift[f[n], {n, 2}]

但是我收到了这些错误信息:

Rule::rhs: "Pattern i_ appears on the right-hand side of rule i_->1+i_. "
TagSetDelayed::tagnf: "Tag DiscreteShift not found in (1+Pattern[f_,_])^r_."

它似乎不喜欢 DiscreteShift 参数的模式,但我也无法在那里工作。正确的写法是什么?

编辑:我会尽力阐明我的目标。这是我想在数学上做的事情:

(N + n) f(n) = N f(n) + n f(n)
= f(n+1) + n f(n)

(N + n)^2 f(n) = (N^2 + Nn + nN + n^2) f(n)
= N^2 f(n) + Nn f(n) + nN f(n) + n^2 f(n)
= f(n+2) + (n+1) f(n+1) + n f(n+1) + n^2 f(n)
= f(n+2) + (2n+1) f(n+1) + n^2 f(n)

所以我有一个有趣的 N 运算符,它充当离散移位,我们有点重载乘法的含义,让它对函数进行运算。我曾希望通过使用 DiscreteShift[f[n],n] 来表示 N f(n),然后为它修正幂规则。

最佳答案

问题是 Power[DiscreteShift[f[n], n], 2] 中的 DiscreteShift[f[n], n] 求值为 f[1 + n] 在任何其他事情发生之前。这会影响您创建规则的尝试,以及 Power[DiscreteShift[f[n], n], 2] 的实际执行。

比较你的结果:

Unprotect[DiscreteShift];
DiscreteShift /: Power[HoldPattern[DiscreteShift[f_, i_]], r_] :=
DiscreteShift[f, {i, r}];

Power[Unevaluated@DiscreteShift[f[n], n], 2] === DiscreteShift[f[n], {n, 2}]
(* Out[] = True *)

belisarious 给了 a link to a method通过它您可以拦截内置函数的评估以插入您自己的代码。但是,我认为很难将它与 TagSet 结合到 DiscreteShift。

关于wolfram-mathematica - 为 DiscreteShift 设置上值的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7892945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com