3

我正在尝试使用 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])

这不仅仅是一个外观问题,因为当我尝试将其应用于上述表达式中的一些明显的二次因式分解时,它会混淆 Factor[]。任何干净的修复?

4

2 回答 2

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)

于 2012-09-25T15:06:50.197 回答
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])
于 2012-09-26T10:05:48.990 回答