Wolfram mathematica 我怎样才能摆脱Mathematica中令人恼火的前置因子?

Wolfram mathematica 我怎样才能摆脱Mathematica中令人恼火的前置因子?,wolfram-mathematica,algebra,Wolfram Mathematica,Algebra,我试图使用Mathematica将代数表达式精炼成一种方便的形式,以确保我不会掉符号或犯其他一些小错误。经过一番咒骂,我已经接受了这不是一个确定性的过程,我将不得不一步一步地去做,而且代数操作调色板是我的朋友。然而,还有一件事让我抓狂。有时,mathematica会用这些看似无关的引导词表达出来。例如,现在我正在看: 0.5*(1.*Log[-1.*a^2 + 1.*bigr^2] - 1.*Log[1.*a^2 - 2.*a*bigr + 1.*bigr^2]) 0.5*(Log[-a^2

我试图使用Mathematica将代数表达式精炼成一种方便的形式,以确保我不会掉符号或犯其他一些小错误。经过一番咒骂,我已经接受了这不是一个确定性的过程,我将不得不一步一步地去做,而且代数操作调色板是我的朋友。然而,还有一件事让我抓狂。有时,mathematica会用这些看似无关的引导词表达出来。例如,现在我正在看:

0.5*(1.*Log[-1.*a^2 + 1.*bigr^2] - 1.*Log[1.*a^2 - 2.*a*bigr + 1.*bigr^2])
0.5*(Log[-a^2 + bigr^2] - Log[a^2 - 2.*a*bigr + bigr^2])
当我更愿意看到:

0.5*(1.*Log[-1.*a^2 + 1.*bigr^2] - 1.*Log[1.*a^2 - 2.*a*bigr + 1.*bigr^2])
0.5*(Log[-a^2 + bigr^2] - Log[a^2 - 2.*a*bigr + bigr^2])
这不仅仅是一个表面问题,因为当我试图将它应用于上面表达式中一些明显的二次因式分解时,它混淆了因子[]。有干净的补丁吗

your = 0.5*(1.*Log[-1.*a^2 + 1.*bigr^2] - 1.*Log[1.*a^2 - 2.*a*bigr + 1.*bigr^2])
your  /. {1. -> 1, -1. -> -1}

(* -> 0.5 (Log[-a^2 + bigr^2] - Log[a^2 - 2. a bigr + bigr^2]) *)
1
后面的点告诉mathematica将数字视为非精确量。比如说

1. * 1/2
(* -> .5 *)
但是

如果需要精确的结果,请在计算中使用精确的数量(1,2,1/2)而不是十进制数字(1,2,0.5)

expr =  0.5*(1.*Log[-1.*a^2 + 1.*bigr^2] - 1.*Log[1.*a^2 - 2.*a*bigr + 1.*bigr^2]);
将所有近似数字转换为精确数字:

expr // Rationalize
选择性地:

expr /. x_ /; x == 1 -> 1

谢谢贝里萨利斯。有没有必要告诉Mathematica保持一切的精确形式,这样我就不必在每次操作后都这样做?@Dessie如果您在输入中使用精确数字,并且从不要求Mathematica计算数值结果(即,您总是执行代数操作),它将自动保留您的精确数字。如果由于某种原因您不能这样做,请检查帮助系统中的
Rationalize[]
0.5 (Log[-1. a^2 + bigr^2] - 1. Log[a^2 - 2. a bigr + bigr^2])