Канонические формы в Максима - PullRequest
0 голосов
/ 27 июня 2018

Фон

Работая в Maxima, я получил два выражения, которые, как я знал, были эквивалентны, но Maxima так не думал.

(Это началось с вопроса о точности с плавающей запятой в Maxima, но я застрял на чем-то немного более фундаментальном: как сделать так, чтобы выражения были "нормализованы", если это вообще возможно.)

Проблемное занятие

При решении уравнения с использованием solve() я получил ответ (a), включающий рациональные числа и рациональные показатели. У меня также было «справочное решение» (b) в другой форме. Из проверки не очевидно, что эти цифры идентичны:

(%i1) a:(311647*2181529^(1/5))/(63360*17424^(1/5))$
(%i2) b:(7^(7/5)*211^(12/5))/(40*11^(7/5)*12^(12/5))$

Я хотел посмотреть, были ли они, поэтому я попробовал несколько вещей:

(%i3) a=b,pred;
(%o3)                                false
(%i4) a-b,numer;
(%o4)                         1.4210854715202E-14
(%i5) ratsimp(a-b);
                      2/5   2/5        1/5    7/5    12/5      1/5
             311647 11    12    2181529    - 7    211     17424
(%o5)        -----------------------------------------------------
                                7/5   12/5      1/5
                           40 11    12     17424

Ух ты, это полный рот! Очевидно, я сделал что-то не так, но я не сдамся. Я пробую разные вещи, пока не найду:

(%i6) radcan(a-b);
(%o6)                                  0
(%i7) radcan(a)=radcan(b),pred;
(%o7)                               true

Бинго! radcan() удалось преобразовать его в каноническую форму, которую затем можно было бы упростить.

Вопрос

radcan() было необходимо в этом случае, потому что выражение включало радикалы, но сначала я этого не знал - при разработке чего-то вы не всегда знаете, в какой форме решение. Существует ли стандартный набор функций, которые можно применить, чтобы «канонизировать» универсальное выражение в Maxima, или я злоупотребляю здесь Maxima?

...