Wolfram mathematica 数学中绝对值的简化

Wolfram mathematica 数学中绝对值的简化,wolfram-mathematica,Wolfram Mathematica,我现在有一个很大的表达形式,有很多术语 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[\[T

我现在有一个很大的表达形式,有很多术语

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])
已知每个根下平方的项是正实数。

这里有两个想法:

(一)


复杂度函数f使Abs的价格比倍高。有关简化,请参阅文档。这有帮助吗?

因为大家都知道这些项都是实的和正的,所以平方和平方根只能得到相同的数字。因此,您可以执行以下操作

expr /. Sqrt[(x___)^2] :> x

其中,
expr
是上面的巨型表达式。

如果您只希望删除绝对值的特定实例,您可以按照以下方式执行操作:

Clear[removeAbs]
removeAbs[expr_, r_] := expr /. {Sqrt[r^2] :> r, Abs[r] :> r}
这样,它只会从指定的任何表达式中删除绝对值:

In: removeAbs[Abs[x] + Abs[y], x]
Out: x + Abs[y]

我会看看是否能找到比这更好的解决方案。

我经常被
Abs[a]^2
之类的东西所刺激,而像使用
假设
a\[Element]Reals
这样的东西也没用


我在这里找到了一些关于ComplexExpand[Abs[a]^2,TargetFunctions->{Conjugate}]
的帮助,但有时它仍然返回类似于
Conjugate[Sqrt[a^2+b^2]]
的内容,我发现在其周围包装第二个
ComplexExpand
(不带参数)会有所帮助。

这两种解决方案都是单独处理这个术语的,但当它是完整表达的一部分时就不是了。我将在我的问题中添加完整的表达,希望能让事情变得更清楚。实际上,我已经按照你的建议做了。然而,我很好奇是否有更好的方法来处理它,以防我得到一个只有一些部首可以安全地取消的混合表达式。加上1+1对于GiantExpr现在不包含Abs-是正确的吗?是正确的。我已经包括了原始的Sqrt术语,简化后将简化为Abs。
Clear[removeAbs]
removeAbs[expr_, r_] := expr /. {Sqrt[r^2] :> r, Abs[r] :> r}
In: removeAbs[Abs[x] + Abs[y], x]
Out: x + Abs[y]