Как мне рассказать Maxima о правильных аппроксимациях подвыражений большого выражения? - PullRequest
0 голосов
/ 09 января 2019

У меня довольно большое выражение, которое включает множество подвыражений вида (100*A^3 + 200*A^2 + 100*A)*x или (-A^2 - A)*y или (100*A^2 + 100*A)*z

Я знаю, но я не знаю, как сказать Максима, что в этом случае допустимо сделать приближение A+1 ~ A, тем самым эффективно удаляя все, кроме самой высокой степени * 1009. * в каждом коэффициенте.

Сейчас я ищу функции, инструменты или методы, которые я могу использовать, чтобы помочь Maxima отбрасывать различные термины, которые не важны.

Я пытался с subst, но это требует от меня указать каждый фактор отдельно, потому что:

subst([A+1=B], (A+2)*(A+1)*2);
subst([A+1=B], (A+2)*(A*2+2));
(%o1) 2*(A+2)*B
(%o2) (A+2)*(2*A+2)

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

Я пытался с ratsimp, но это слишком нетерпеливо, чтобы изменить каждый случай:

ratsubst(B, A+1, A*(A+1)*2);
ratsubst(B, A+1, A*(A*2+2));
(%o3) 2*B^2-2*B
(%o4) 2*B^2-2*B

что на самом деле не так просто, так как я бы предпочел, чтобы ответ был дан как 2*B^2.

В другом ответе (https://stackoverflow.com/a/22695050/5999883) были предложены функции let и letsimp для задачи подстановки значений, но я не могу заставить их действительно что-либо делать:

x:(A+1)*A;
let ( A+1, B );
letsimp(x);
(x)A*(A+1)
(%o6) A+1 --\> B
(%o7) A^2+A

Опять же, я хотел бы приблизить это выражение к A^2 (B^2, как бы оно ни называлось).

Я понимаю, что это, в общем, сложная проблема (например, A^2 + 10^8*A все еще можно аппроксимировать как A^2?), Но я думаю, что я ищу функцию или метод расчета, который бы быть немного умнее subst и может признать, что в выражении A^2+A можно выполнить ту же замену, что и в выражении 100*A^2+100*A или -A^2-A, вместо того, чтобы заставлять меня создавать список из трех (или двадцати) отдельных замены при звонке subst. «Хорошая» часть полного выражения, над которым я работаю, состоит в том, что каждый из этих A факторов имеет форму k*A^n*(A+1)^m для различных маленьких целых чисел n, m, поэтому я никогда не получаю упомянутый выше вырожденный случай.

(Я кратко думал о повторном выражении моего выражения как многочлена в A, но это не сработает, поскольку единственное действительное приближение выражения (A^3+A^2+A)*x + y равно A^3*x + y - я ничего не знаю об относительном размеры x и y.

...