Код:
HirotaD[a_[x_], b_[x_], n_] := Module[{}, sol = D[a[x + y]*b[x - y], {y, n}] /. y -> 0]
Я бы удивился, что
a_[x_] вообще хоть иногда срабатывает.
Для использования с выражениями и переменными обычно переменную указывают отдельно (посмотрите например на
FourierTransform или
Convolve — там и «входная», и «выходная» переменные указываются пользователем). Тогда можно написать такое:
Код:
HirotaD[a_, b_, {x_, n_}] := Module[{v, s}, D[(a /. x -> v + s) (b /. x -> v - s), {s, n}] /. {s -> 0, v -> x}]
HirotaD[a_, b_, x_] := HirotaD[a, b, {x, 1}]
Проверяем, даёт такое:
Код:
In[4]:= HirotaD[Sin[x], Cos[x], x]
Out[4]= Cos[x]^2 + Sin[x]^2
In[5]:= HirotaD[Sin[x]/x, Exp[x], x]
Out[5]= (E^x Cos[x])/x - (E^x Sin[x])/x^2 - (E^x Sin[x])/x
(
Module защищает на всякий случай от ошибок, если использовать переменные
v или
s в исходных выражениях.)
-- Вт фев 23, 2021 19:25:11 --В принципе я зря перестраховался с
v, вот это работает точно так же:
Код:
HirotaD[a_, b_, {x_, n_}] := Module[{s}, D[(a /. x -> x + s) (b /. x -> x - s), {s, n}] /. s -> 0]