максима возвращает неверный результат при использовании подписок - PullRequest
0 голосов
/ 25 апреля 2018

Я использую WxMaxima для некоторых вычислений, чтобы я мог экспортировать результаты прямо в мой файл LaTeX.У меня есть некоторые греческие переменные с греческими подписками, которые вызывают у меня головную боль.Раньше в Maxima я использовал подписи в скобках [].Но я заметил, что обычный синтаксис LaTeX _ также работает.За исключением того, что это не работает для греческих букв:

enter image description here

Так что я должен использовать скобки один [], когда я хочу, чтобы вставить греческие буквыс греческими буквами.Но это вызывает некоторые ошибки в вычислениях.

Например, рассмотрим две простые функции:

%epsilon[r](r):=c[1]-c[2]/r^2;
%epsilon[%theta](r):=c[1]+c[2]/r^2;

Теперь, если я запустил:

fullratsimp(%epsilon[r](r)+%nu*%epsilon[%theta](r));

, это даст мне:

((c[1]*%nu+c[1])*r^2+c[2]*%nu+c[2])/r^2

enter image description here

Что явно неверно, поскольку правильный результат можно рассчитать по формуле:

fullratsimp((c[1]-c[2]/r^2)+%nu*(c[1]+c[2]/r^2));

enter image description here

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

1 Ответ

0 голосов
/ 25 апреля 2018

Проблема в том, что foo[x1](y) := ... и foo[x2](y) := ... определяют только одну функцию foo, а второе определение перекрывает первую, так что определяется только foo[x2](y) := ....

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

(%i1) %epsilon[r](r):=c[1]-c[2]/r^2 $
(%i2) %epsilon[%theta](r):=c[1]+c[2]/r^2 $
(%i3) %epsilon[r];
                                  c
                                   2
(%o3)                 lambda([r], -- + c )
                                   2    1
                                  r
(%i4) %epsilon[%theta];
                                  c
                                   2
(%o4)                 lambda([r], -- + c )
                                   2    1
                                  r
(%i5) kill(%epsilon) $
(%i6) %epsilon[r] : lambda([r], c[1]-c[2]/r^2) $
(%i7) %epsilon[%theta] : lambda([r], c[1]+c[2]/r^2) $
(%i8) %epsilon[r];
                                       c
                                        2
(%o8)                 lambda([r], c  - --)
                                   1    2
                                       r
(%i9) %epsilon[%theta];
                                       c
                                        2
(%o9)                 lambda([r], c  + --)
                                   1    2
                                       r
(%i10) fullratsimp(%epsilon[r](r)+%nu*%epsilon[%theta](r));
                                2
                 (c  %nu + c ) r  + c  %nu - c
                   1        1        2        2
(%o10)           ------------------------------
                                2
                               r

Обратите внимание, что foo[x](y) := ... также создает лямбда-выражения, но вам нужно обеспечить здесь собственное определение, а не определение, которое автоматически создается Maxima.

...