Упростить абсолютное значение в Mathematica - PullRequest
6 голосов
/ 08 декабря 2011

В настоящее время у меня есть большое выражение со многими терминами вида

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 упростить ненужное абсолютное значение?

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

Термины, возводимые в квадрат под каждым из радикалов, известны как положительное действительное число.

Ответы [ 4 ]

4 голосов
/ 09 декабря 2011

Поскольку все термины известны как реальные и положительные, возведение в квадрат и получение квадратного корня даст только одно и то же число. Следовательно, вы можете сделать что-то вроде

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

где expr - ваше гигантское выражение выше.

4 голосов
/ 08 декабря 2011

Вот две идеи:

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 голос
/ 18 декабря 2015

Меня постоянно вдохновляют такие вещи, как Abs[a]^2, и такие вещи, как использование Assuming с a\[Element]Reals, не помогают.

Я нашел некоторую помощь здесь WolframMathWorld - Абсолютный квадрат с
ComplexExpand[Abs[a]^2, TargetFunctions -> {Conjugate}], но иногда он по-прежнему возвращает такие вещи, как Conjugate[Sqrt[a^2 + b^2]], и я обнаружил обтекание второй ComplexExpand (без параметров ) вокруг это помогает.

1 голос
/ 12 декабря 2011

Если вы хотите удалить только определенные экземпляры абсолютного значения, вы можете сделать что-то вроде следующего:

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

Таким образом, он удаляет только абсолютное значение из любых указанных выражений:

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

Я посмотрю, смогу ли я найти более приятное решение, чем это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...