我正在尝试使用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 :(得分:6)
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 * 1/2
(* -> 1/2 *)
如果您需要精确的结果,请在计算中使用精确数量(1,2,1 / 2)而不是十进制数(1.,2.,0.5)
答案 1 :(得分:2)
expr = 0.5*(1.*Log[-1.*a^2 + 1.*bigr^2] - 1.*Log[1.*a^2 - 2.*a*bigr + 1.*bigr^2]);
将所有近似数字转换为精确数字:
expr // Rationalize
1/2 (Log[-a^2 + bigr^2] - Log[a^2 - 2 a bigr + bigr^2])
选择性:
expr /. x_ /; x == 1 -> 1
0.5 (Log[-1. a^2 + bigr^2] - 1. Log[a^2 - 2. a bigr + bigr^2])