2*sqrt(2)
默认返回输出
2^(3/2)
如何让 Maxima 返回 2*sqrt(2) ?
(我在 tex() 函数中使用它。)
据我所知,没有办法阻止 Maxima 将
2*sqrt(2)
简化为 2^(3/2)
,有两个可能难以使用的例外:
(1) 完全关闭简化。但这会禁用所有简化,例如
1 + 1
简化为 2
。但如果你想尝试一下:只需输入simp : false;
.
(2) 通过
sqrt(2)
禁用2^(1/2)
到:lisp (setf (get '%sqrt 'operators) nil)
的简化但是Maxima在大多数情况下不知道如何处理sqrt
.
我不推荐其中任何一个。
你可以尝试类似的东西
simp: false;
tex(2*sqrt(2));
block code...;
simp: true;
这样你就不必永久禁用简化。
你可以这样做:
(%i1) matchdeclare(n_, integerp,m_, integerp)$
tellsimp(n_*sqrt(m_), n_*sqrt(box(m_)))$
之后:
(%i3) 2*sqrt(2);
(%o3) 2 √2
(%i4) sqrt(3)*9;
(%o4) 9 √3
你会注意到输出中平方根符号下的数字是红色的,因为 box()。但是如果你选择 wxMaxima 中的表达式,然后弹出“Copy LaTeX”,你会得到你想要的,e。 g.
\[2\,\sqrt{2}\]
不幸的是,如果您尝试 tex(2*sqrt(2)) 来获取 TeX 代码,您将得到
$$2\,\sqrt{\boxed{2}}$$
。
另一个技巧是使用非交换乘法
.
而不是 *
并关闭 dotconstrules
:
(%i1) texput(".", " ", nary)$
(%i2) 2 . sqrt(2), dotconstrules: false;
(%o2) 2 . sqrt(2)
(%i3) tex(%)$
$$2 \sqrt{2}$$
我认为这个解决方案可能有用,因为您可以避免在表达式的一部分进行简化,而在另一部分仍然像往常一样简化:
(%i4) 2 . sqrt(2) * sqrt(4) / 2, dotconstrules: false;
(%o4) 2 . sqrt(2)