2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Вопрос по Mathematica
Сообщение12.05.2010, 12:30 


20/07/07
834
Можно ли как-то сделать, чтобы Mathematica выдавала результат в определенных функциях (и не выдавала в других)? Например, мне не нравится Порчхаммер, могу я настроить, чтобы результат всегда был представлен в виде Гамма-функций?

Еще математика часто выдает результат в виде полигаммы, но полигамма, встроенная в Математику - не балансированная, а балансированной там нет. Если я задам свою полигаммму (балансированную), можно сделать так, чтобы результаты были в ней?

 Профиль  
                  
 
 Re: Вопрос по Mathematica
Сообщение12.05.2010, 16:57 


01/12/06
463
МИНСК
Не знаю, как настроить, а выражение можно отредактировать с помощью ReplaceAll. Например, вот так:
Код:
myfunction[i_, x_] = EulerGamma[i*x];
ReplaceAll[BesselJ[1, x], BesselJ -> myfunction]

 Профиль  
                  
 
 Re: Вопрос по Mathematica
Сообщение12.05.2010, 21:29 


20/07/07
834
Ну тогда и выражения станут все неправильные. Ведь балансированная полигамма - это не то же самое, что та полигамма, которая в "Математике".

 Профиль  
                  
 
 Re: Вопрос по Mathematica
Сообщение12.05.2010, 22:49 


07/03/10
59
Для первого можно вызвать FullSimplify таким образом:
Код:
f[e_] := 10^9 Sum[
     Count[e, i, {0, Infinity}], {i, {_Pochhammer}}
] + LeafCount[e];
FullSimplify[Pochhammer[a, n], ComplexityFunction -> f ]

В фигурных скобках можно перечислить все функции, которые не нравятся.

Для второго действительно следует сделать Replace, только нужным образом переопределив свою функцию. Либо же можно переопределить встроенную,
Код:
Unprotect[PolyGamma];
PolyGamma[n_,a_]:=....

Но тут могут быть тонкости, нужно быть осторожным.

 Профиль  
                  
 
 Re: Вопрос по Mathematica
Сообщение12.05.2010, 23:08 


20/07/07
834
А можно этот Порчхаммер вообще удалить навсегда, и помешает ли это в дальнейшем автоматическому преобразованию выражений? А то иногда выдает вот такие курьезные результаты: [url]http://www.wolframalpha.com/input/?i=sum_%28x%3D1%29^n+log%28x%29[/url]

 Профиль  
                  
 
 Re: Вопрос по Mathematica
Сообщение13.05.2010, 04:33 


07/03/10
59
Удалить не получится принципиально --- на нём повязаны другие функции, например та жа сумма считает некоторые выражения через него. Но если его переопределить
Код:
Unprotect[Pochhammer];
Pochhammer[a_, n_] := Gamma[a + n]/Gamma[a]

то сумма
Код:
Sum[Log[i], {i, 1, n}]

автоматически посчитаеся в
Код:
Log[Gamma[1 + n]]

 Профиль  
                  
 
 Re: Вопрос по Mathematica
Сообщение13.05.2010, 09:48 


20/07/07
834
Во, вот это хорошее решение. Если ничего не поломает. А можно так сделать навсегда? Есть какой-то файл постоянных настроек?

 Профиль  
                  
 
 Re: Вопрос по Mathematica
Сообщение14.05.2010, 02:23 


07/03/10
59
В моей операционной системе есть файл
Код:
~/.Mathematica/Kernel/init.m

который и можно измять для того, что бы добавлять различные дополнительные определения. В вашей --- смотрите документацию, должно быть что-то похожее.

 Профиль  
                  
 
 Re: Вопрос по Mathematica
Сообщение14.05.2010, 07:21 


20/07/07
834
Спасибо! Отлично, с Порчхаммером работает!

А можно как-то ввести функцию, и сделать так, чтобы Математика отображала результаты в этой функции?

-- Пт май 14, 2010 08:47:46 --

Кстати, это мне кажется, что в Математике какая-то неправильная Зета?
В частности, вот тут должен быть график Гамма-функции, а имеем график ее модуля:
Изображение

Код:
Код:
npsi[x_, y_] := ((EulerGamma + PolyGamma[-x]) Zeta[1 + x, y] +
\!\(\*SuperscriptBox["Zeta",
TagBox[
RowBox[{"(",
RowBox[{"1", ",", "0"}], ")"}],
Derivative],
MultilineFunction->None]\)[1 + x, y])/Gamma[-x]
Plot[Exp[npsi[-1, x] + 1/2 Log[2 Pi]], {x, -4, 4},
AspectRatio -> Automatic, AxesOrigin -> {0, 0}]

 Профиль  
                  
 
 Re: Вопрос по Mathematica
Сообщение14.05.2010, 21:03 


07/03/10
59
Ввести новую функцию и встроить в систему малой кровью не получится. А собственно, зачем? Можно все расчёты делать во встроенных, а окончательный результат уже переводить в то, что нужно.

По поводу Zeta не знаю, но вот $\arcctg$ (он же ArcCot$ ) там точно неправильный (разрывный).

 Профиль  
                  
 
 Re: Вопрос по Mathematica
Сообщение14.05.2010, 21:28 


20/07/07
834
Цитата:
Можно все расчёты делать во встроенных, а окончательный результат уже переводить в то, что нужно.

Не получится. Она простым способом через имеющиеся не выражается (для нецелых аргументов). Определение - см. выше на скриншоте (npsi). Да и то, из-за неправильной зеты npsi получается неправильная для отрицательных аргументов.

Пример: надо упростить вот такое выражение

$$ -\frac{e^{\psi(-1,a+1)} \left(2^a \left(\psi\left(-a-1,\frac{x}{2}+\frac{1}{2}\right)+\psi\left(-a-1,\frac{x}{2}\right)\right)-\psi(-a-1,x)\right)}{\ln (2)}$$

не выходя за рамки функции пси, которая задается как показано выше на скриншоте.

 Профиль  
                  
 
 Re: Вопрос по Mathematica
Сообщение16.05.2010, 15:47 


07/03/10
59
Тогда нужно задать правила работы с функцией $\psi$ с помощью конструкции
Код:
....  ^:=   .....

или
Код:
Derivative /: Derivative[1][npsi][x_] := ...

, никак её не определния через другие функции.
Но это как раз и есть то решение, которое не малой кровью.

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

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



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

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


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

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