我有一个相当大的表达式,其中涉及许多形式为(100*A^3 + 200*A^2 + 100*A)*x
或(-A^2 - A)*y
或(100*A^2 + 100*A)*z
的子表达式
我知道,但是我不知道该如何告诉Maxima,在这种情况下,使近似值A+1 ~ A
有效,从而有效地去除除最高幂之外的任何东西每个系数中A
的整数。
我现在正在寻找可用于指导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
的相对大小一无所知。