我如何告诉Maxima大表达式的子表达式的有效近似值?

时间:2019-01-09 01:46:56

标签: maxima

我有一个相当大的表达式,其中涉及许多形式为(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)函数letletsimp用于替换值,但是我无法让它们真正地做任何事情:

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

同样,我想将此表达式近似为A^2B^2,不管它叫什么)。

我知道这通常是一个难题(例如A^2 + 10^8*A仍可以近似为A^2吗?)但我认为我要寻找的是函数或方法比subst聪明一点的计算方式,并且可以认识到可以在表达式A^2+A中进行与表达式100*A^2+100*A-A^2-A中相同的替换,而不是使我在调用subst时创建了三个(或二十个)个人替换的列表。我正在研究的完整表达式的“好”部分是,对于各种小整数Ak*A^n*(A+1)^m,这些n因子中的每一个都具有m的形式,所以我从未真正以上述简并的情况结束。

((我曾短暂地想过将表达式重新表达为A中的多项式,但这不能工作,因为表达式(A^3+A^2+A)*x + y的唯一有效近似是A^3*x + y-我对xy的相对大小一无所知。

0 个答案:

没有答案