У меня довольно большое выражение, которое включает множество подвыражений вида (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
.