Шаблон для установки значения для DiscreteShift - PullRequest
3 голосов
/ 25 октября 2011

Я бы хотел установить значение для 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, но я также не могу заставить что-то там работать. Как правильно написать это?

Edit: Я постараюсь уточнить мою цель. Вот что я хочу сделать математически:

(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-оператор, который действует как дискретный сдвиг, и мы как бы перегружаем смысл умножения, чтобы заставить его работать с функцией. Я надеялся представить N f(n), используя DiscreteShift[f[n],n], а затем исправляя правило мощности для него.

1 Ответ

5 голосов
/ 26 октября 2011

Проблема в том, что DiscreteShift[f[n], n] в Power[DiscreteShift[f[n], n], 2] оценивается как 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 *)

Белизарский дал ссылка на метод , с помощью которого вы можете перехватить оценку встроенной функции, чтобы вставить свой собственный код.Тем не менее, я думаю, что было бы трудно объединить это с TagSet для DiscreteShift.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...