Как задать константу в Mathematica?

svet_lana

Требуется задать скобку пуассона на многочленах в математике с помощью определяющих соотношений. Как задать так, чтобы скобка пуассона на константе равнялась нулю?

slsf

А после вычисления она у Вас чему равна?
Она и так будет 0 на константе, в чем затруднение?

svet_lana

Затруднение в том, что надо записать что-то типа pois[x_,a_Real]:=0
Функция задается определяющими соотношениями
(pois[f_, g_] := (-pois[g, f]
pois[f_ + g_, h_] := pois[f, h] + pois[g, h]
pois[f_, g_ + h_] := pois[f, g] + pois[f, h]
pois[f_*g_, h_] := f*pois[g, h] + g*pois[f,h]
pois[f_, g_*h_] := f*pois[g, h] + g*pois[f, h]
pois[g_, pois[f_, h_]] := (-pois[f, pois[h, g]]) - pois[h, pois[g, f]]
pois[s\_1, s\_1] := 0\[IndentingNewLine]
pois[s\_1, s\_2] := s\_3\[IndentingNewLine]
pois[s\_1, s\_3] := \(-s\_2\)\[IndentingNewLine]\[IndentingNewLine]
pois[s\_2, s\_1] := \(-s\_3\)\[IndentingNewLine]
pois[s\_2, s\_2] := 0\[IndentingNewLine]
pois[s\_2, s\_3] := s\_1\[IndentingNewLine]\[IndentingNewLine]
pois[s\_3, s\_1] := s\_2\[IndentingNewLine]
pois[s\_3, s\_2] := \(-s\_1\)\[IndentingNewLine]
pois[s\_3, s\_3] := 0\[IndentingNewLine]\[IndentingNewLine]\
\[IndentingNewLine]
pois[r\_1, s\_1] := 0\[IndentingNewLine]
pois[r\_1, s\_2] := r\_3\[IndentingNewLine]
pois[r\_1, s\_3] := \(-r\_2\)\[IndentingNewLine]\[IndentingNewLine]
pois[r\_2, s\_1] := \(-r\_3\)\[IndentingNewLine]
pois[r\_2, s\_2] := 0\[IndentingNewLine]
pois[r\_2, s\_3] := r\_1\[IndentingNewLine]\[IndentingNewLine]
pois[r\_3, s\_1] := r\_2\[IndentingNewLine]
pois[r\_3, s\_2] := \(-r\_1\)\[IndentingNewLine]
pois[r\_3, s\_3] := 0\[IndentingNewLine]\[IndentingNewLine]\
\[IndentingNewLine]\[IndentingNewLine]
pois[r\_1, r\_1] := 0\[IndentingNewLine]
pois[r\_1, r\_2] := 0\[IndentingNewLine]
pois[r\_1, r\_3] := 0\[IndentingNewLine]\[IndentingNewLine]
pois[r\_2, r\_1] := 0\[IndentingNewLine]
pois[r\_2, r\_2] := 0\[IndentingNewLine]
pois[r\_2, r\_3] := 0\[IndentingNewLine]\[IndentingNewLine]
pois[r\_3, r\_1] := 0\[IndentingNewLine]
pois[r\_3, r\_2] := 0\[IndentingNewLine]
pois[r\_3, r\_3] := 0\[IndentingNewLine]\[IndentingNewLine]
pois[x_, _Real] := 0\[IndentingNewLine]
pois[x_, \ _Integer] := 0\[IndentingNewLine]
pois[_Real, \ x_] := 0\[IndentingNewLine]
pois[_Integer, x_] := 0\[IndentingNewLine]
\)
Проблема в том теперь, что на
\!\(pois[s\_1, r\_1\^2]\)
выдается
$RecursionLimit::"
reclim"\ \(\(:\)\(\ \)\ "\<\"Recursion depth of
256\\) exceeded.
ButtonBox[\\\"More…\\\", ButtonStyle->\\\"RefGuideLinkText\\\", \
ButtonFrame->None, ButtonData:>\\\"$RecursionLimit::reclim\\\"]\\)\"\>"}]\)
и в итоге
-Hold[pois[r\_1\%2, s\_1]]
В общем, ругается на глубину какого-то цикла...

svet_lana

при вычислении
pois[s_1, r_1^2]
программа говорит, что недопустимо глубокий цикл
непонятно, с чего это цикл берется

slsf

) Уберите первую строку в своей программе:
pois[f_, g_] := -pois[g, f]
она задает бесконечный цикл.
2) Смените обозначения c s_1 на просто s1, использование подчеркивания это грубая ошибка в данном коде.
Ps: s_1 означает шаблон некоторой переменной s c заголовком 1, то есть Head[s]=1.
В общем, почеркивание в данном коде в таком контексте использовать нельзя.
Pps: после смены обозначений вызывайте свою функцию так: poison[s1,r1^2] а не poison[s_1,...]
Успехов.
Пишите.
.

svet_lana

Спасибо.
Подчеркивания появились после копирования из математики в форум - там используются индексы.
Тогда еще вопрос:
pois[f_*g_, h_] := f*pois[g, h] + g*pois[f, h]
pois[f_, g_*h_] := g*pois[f, h] + h*pois[f, g]
задание таким образом правила Лейбница должно работать?
Получается, что на аргументах r_1 и s_2^2 выдает
pois[r_1, s_2^2], то есть не применяется это самое правило.
Как можно исправить?
точнее, вопрос вот в чем.
Пусть задано
pois[f_*g_, h_] := f*pois[g, h] + g*pois[f, h]
тогда математика считает
pois[x*y,z],
но не хочет считать
pois[x^2,z]

slsf

Да, правило Лейбница заданное так будет работать.
x*x не равно x^2.
x*y это Times[x,y]
x^2 это Power[x,2]
Естественно, что под шаблон x*y последнее выражение не подходит, о чем и говорит результат.
Надо расширить область определения функции так же и на этот случай.

svet_lana

Нет, дело не в этом, смотри
на pois[x*x, x] выдает
pois[x^2, x]

slsf

Это потому что она заранее вычисляет аргумент x*x и преобразует его в x^2, а уже потом обращается к скобке пуассона. С x*y должно все работать.

svet_lana

Спасибо...
Из ситуации пришлось выходить заданием pois на степени:
pois[f_, g_^n_]:= n*g^(n - 1)*pois[f, g]
Оставить комментарий
Имя или ник:
Комментарий: