【问题标题】:Maxima. How to prevent degree calculations千里马。如何防止度数计算
【发布时间】:2020-06-25 03:43:52
【问题描述】:
是否有可能阻止幂数表达式中的所有计算?也许通过预处理表达式或添加tellimp规则?还是其他方式?
例如,到
distrib (10 ^ 10 * (x + 1));
产生:
1000000000 x + 1000000000
改为发出:
10 ^ 10 * x + 10 ^ 10
同样
factor (10 ^ 10 * x + 10 ^ 10);
返回:
10 ^ 10 * (x + 1);
就像
factor(200);
2^3*5^2
代表数字的力量,只是永久的?
【问题讨论】:
标签:
numbers
calculation
maxima
simplification
【解决方案1】:
有趣的问题,虽然我没有看到一个好的解决方案。这是我作为实验尝试的东西,即以因子形式显示整数。我正在使用 Maxima 5.44.0 + SBCL。
(%i1) :lisp (defun integer-formatter (x) ($factor x))
INTEGER-FORMATTER
(%i1) :lisp (setf (get 'integer 'formatter) 'integer-formatter)
INTEGER-FORMATTER
(%i1) (x + 1000)^3;
3 3 3
(%o1) (x + 2 5 )
(%i2) 10^10*(x + 1);
2 5 2 5
(%o2) (2 5 ) (x + 1)
这只是对显示的修改;内部表示只是一个整数。
(%i3) :lisp $%
((MTIMES SIMP) 10000000000 ((MPLUS SIMP) 1 $X))
这似乎有点笨拙,因为例如2^(2*5)*5^(2*5) 并不比 10000000000 更容易理解。
另一个问题是10^10 上的算术是否可以被抑制,因此它实际上保持为10^10,并且在内部不表示为10000000000。我很确定那会很困难。不幸的是,Maxima 不太擅长收回应用的身份,尤其是用于执行算术和其他操作的内置身份。