简化 Mathematica 中的绝对值

发布于 2024-12-20 01:33:06 字数 1007 浏览 0 评论 0原文

形式的术语

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])

每个根号下的平方项已知是正实数。

I currently have a large expression with many terms of the form

Abs[-2 b + 2 d1 m + l Tan[\[Theta]]]

I know, from the geometry of my problem, that

-2 b + 2 d1 m + l Tan[\[Theta]] > 0

However, when I try to simplify my expression,

Simplify[Abs[-2 b + 2 d1 m + l Tan[\[Theta]]], -2 b + 2 d1 m + l Tan[\[Theta]] > 0]

I just get back

Abs[-2 b + 2 d1 m + l Tan[\[Theta]]]

How can I make Mathematica simplify out the unnecessary absolute value?

EDIT 1

The full expression which I'm trying to simplify is

-(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])

The terms being squared under each of the radicals is known to be a positive real number.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

鲜血染红嫁衣 2024-12-27 01:33:06

由于已知这些项都是实数和正数,因此平方和取平方根只会得到相同的数字。因此,您可以执行类似的操作

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

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

Since the terms are all known to be real and positive, squaring and taking the square-root will only give you the same number. Hence, you could do something like

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

where expr is your giant expression above.

预谋 2024-12-27 01:33:06

这里有两个想法:

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 更昂贵。请参阅文档以了解简化。这有帮助吗?

Here are two ideas:

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]

Th complexity function f makes Abs more expensive than Times. See docu for Simplify. Does that help?

南城追梦 2024-12-27 01:33:06

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

Clear[removeAbs]
removeAbs[expr_, r_] := expr /. {Sqrt[r^2] :> r, Abs[r] :> r}

这样它只会从您指定的任何表达式中删除绝对值:

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

我将看看是否可以找到比这更好的解决方案。

If you only wish to remove specific instances of absolute value, you could do something along these lines:

Clear[removeAbs]
removeAbs[expr_, r_] := expr /. {Sqrt[r^2] :> r, Abs[r] :> r}

That way it only removes the absolute value from any expressions you specify:

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

I'll see if I can find a nicer looking solution than this.

宫墨修音 2024-12-27 01:33:06

我经常被诸如 Abs[a]^2 之类的东西所刺激,而诸如使用 Assuminga\[Element]Reals 之类的东西则不会。没有帮助。

我在这里找到了一些帮助WolframMathWorld - 绝对平方
ComplexExpand[Abs[a ]^2,目标函数-> {Conjugate}],但有时它仍然返回诸如 Conjugate[Sqrt[a^2 + b^2]] 之类的内容,并且我发现包装了第二个 ComplexExpand (不带参数)周围有帮助。

I'm constantly stimied by things like Abs[a]^2, and stuff like using Assuming with a\[Element]Reals doesn't help.

I found some help here WolframMathWorld - Absolute Square with
ComplexExpand[Abs[a]^2, TargetFunctions -> {Conjugate}], but sometimes it still returns stuff like Conjugate[Sqrt[a^2 + b^2]] and I've found wrapping a second ComplexExpand (without parameters) around that helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文