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, Супермодераторы



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

Сейчас этот форум просматривают: wrest


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

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