我目前有一个包含许多形式
的大表达式Abs[-2 b + 2 d1 m + l Tan[\[Theta]]]
我知道,从问题的几何学来看,
-2 b + 2 d1 m + l Tan[\[Theta]] > 0
但是,当我尝试简化表达时,
Simplify[Abs[-2 b + 2 d1 m + l Tan[\[Theta]]], -2 b + 2 d1 m + l Tan[\[Theta]] > 0]
我回来了
Abs[-2 b + 2 d1 m + l Tan[\[Theta]]]
如何让Mathematica简化不必要的绝对值?
编辑1
我想要简化的完整表达是
-(1/(2 (m - Tan[\[Theta]])))
Sqrt[1 + m^2] (B2 Sqrt[(-2 b + 2 d1 m + l Tan[\[Theta]])^2] +
B4 Sqrt[(-2 b + 2 d2 m + l Tan[\[Theta]])^2] +
B5 Sqrt[(2 b + 2 d3 m + l Tan[\[Theta]])^2] +
B7 Sqrt[(2 b + 2 d4 m + l Tan[\[Theta]])^2] +
B1 Sqrt[(2 b - 2 (d1 + l) m + l Tan[\[Theta]])^2] +
B3 Sqrt[(2 b - 2 (d2 + l) m + l Tan[\[Theta]])^2] +
B6 Sqrt[(-2 (b + (d3 + l) m) + l Tan[\[Theta]])^2] +
B8 Sqrt[(-2 (b + (d4 + l) m) + l Tan[\[Theta]])^2])
已知每个基数下的平方项是正实数。
答案 0 :(得分:4)
以下是两个想法:
1)
Simplify[Abs[-2 b + 2 d1 m + l Tan[\[Theta]]],
0 < \[Theta] < \[Pi]/2 && l > 0 && 2 d1 m > 0 && -2 b > 0]
2)
f[e_] := 100 Count[e, _Abs, {0, Infinity}] + LeafCount[e]
Simplify[Abs[-2 b + 2 d1 m + l Tan[\[Theta]]], -2 b + 2 d1 m +
l Tan[\[Theta]] > 0, ComplexityFunction -> f]
复杂性函数f使得Abs比Times更昂贵。请参阅文档以简化。这有帮助吗?
答案 1 :(得分:4)
由于这些术语都是真实的和正面的,所以平方和取平方根只会给你相同的数字。因此,您可以执行类似
的操作expr /. Sqrt[(x___)^2] :> x
其中expr
是你上面的巨型表达。
答案 2 :(得分:1)
如果您只想删除绝对值的特定实例,您可以按照以下方式执行操作:
Clear[removeAbs]
removeAbs[expr_, r_] := expr /. {Sqrt[r^2] :> r, Abs[r] :> r}
这样它只会从你指定的任何表达式中删除绝对值:
In: removeAbs[Abs[x] + Abs[y], x]
Out: x + Abs[y]
我会看看我是否能找到比这更好看的解决方案。
答案 3 :(得分:1)
我经常被Abs[a]^2
之类的东西所激励,而像Assuming
使用a\[Element]Reals
之类的东西却无济于事。
我在WolframMathWorld - Absolute Square与ComplexExpand[Abs[a]^2, TargetFunctions -> {Conjugate}]
找到了一些帮助,但有时它仍会返回Conjugate[Sqrt[a^2 + b^2]]
之类的内容,而且我发现包裹了第二个ComplexExpand
(没有参数)周围有帮助。