2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Оператор Хироты в Wolfram Mathematica
Сообщение23.02.2021, 16:24 
Аватара пользователя


05/04/13
528
Доброго времени суток!

Пытаюсь опеределить в wolfram-e билинейный оператор Хироты:
$$D_x^n f\cdot g=\left.\frac{\partial^n}{\partial s ^n} f(x+s)g(x-s)\right|_{s=0}$$
То есть
$D_x^1 f\cdot g=g(x) f'(x)-f(x) g'(x)$

$D_x^2 f\cdot g=g(x) f''(x)-2 f'(x) g'(x)+f(x) g''(x)$

$D_x^3 f\cdot g=g(x) f'''(x) -3g'(x) f''(x) +3  g''(x) f'(x)-g'''(x)f(x) $

Написал
Код:
HirotaD[a_[x_], b_[x_], n_] :=  Module[{}, sol = D[a[x + y]*b[x - y], {y, n}] /. y -> 0]


Вроде как бы и работает,
Код:
In: HirotaD[Sin[x], Cos[x], 1]

Код:
Out: Cos[x]^2 + Sin[x]^2

и как бы и нет
Код:
In: HirotaD[Sin[x]/x,Exp[x],1]

Код:
Out:HirotaD[Sin[x]/x, E^x, 1]

Как я понял она не может определить аргумент.
Кто ладит с функ. языком wolfram, подскажите.

 Профиль  
                  
 
 Re: Оператор Хироты в Wolfram Mathematica
Сообщение23.02.2021, 16:51 


14/01/11
2677
Вот так вроде срабатывает.
Код:
HirotaD[x_, n_] :=  (D[#1[x + y]*#2[x - y], {y, n}] /. y -> 0)&; FullSimplify[HirotaD[x, 1][Sin[#]/#&, Exp[#]&]]

 Профиль  
                  
 
 Re: Оператор Хироты в Wolfram Mathematica
Сообщение23.02.2021, 17:22 
Заслуженный участник


27/04/09
28128
TelmanStud в сообщении #1506191 писал(а):
Код:
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]

 Профиль  
                  
 
 Re: Оператор Хироты в Wolfram Mathematica
Сообщение23.02.2021, 17:35 
Аватара пользователя


05/04/13
528
Sender
Спасибо! Однако хотелось указывать функции в явном виде в аргументах у оператора.
arseniiv

Спасибо! Сняли вопрос.

(Оффтоп)

arseniiv
Потихоньку вхожу в список ваших должников))

 Профиль  
                  
 
 Re: Оператор Хироты в Wolfram Mathematica
Сообщение23.02.2021, 17:51 
Заслуженный участник


27/04/09
28128
Ой, могут быть проблемы, если внутри будет использоваться какое-нибудь интегрирование по выбранной переменной: /. позаменяет всё без разбору. Но может быть у вас такое не встретится. Кажется, чтобы проблем в таких случаях не было, надо накрутить что-то хитрое, и если вдруг понадобится, подумаем. (Может, Aritaborian тогда был бы в курсе.)

(Оффтоп)

TelmanStud в сообщении #1506202 писал(а):
Потихоньку вхожу в список ваших должников))
Да мне в первую очередь приятно, если совет оказывается полезным и чем-то помогает. :-)

 Профиль  
                  
 
 Re: Оператор Хироты в Wolfram Mathematica
Сообщение26.02.2021, 05:09 


08/03/11
186
Можно обойтись без замен, если использовать Derivative[]:

Код:
ClearAll[hirota] ;
hirota[n_Integer][f_, g_][x_] := Derivative[n][f[x + #]*g[x - #] &][0]
hirota[1][f, g][x]
hirota[1][Sin, Cos][x]
hirota[1][1/#*Sin[#] &, Exp][x]


Или можно напрямую собрать:

Код:
ClearAll[hirota] ;
hirota[n_Integer][f_, g_][x_] := Times[
   (-1)^Range[1, n +1]*(-1)^(n-1),
   Map[Apply[Multinomial], FrobeniusSolve[{1, 1}, n]],
   NestList[D[#, x] &, f[x], n],
   Reverse[NestList[D[#, x] &, g[x], n]]
] // Total ;
hirota[1][f, g][x]
hirota[1][Sin, Cos][x]
hirota[1][1/#*Sin[#] &, Exp][x]

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: maxal, Toucan, PAV, Karan, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group