0

FullSimplify не признает, что:Mathematica Help: FullSimplify не использует сопряженные тождества

a*Conjugate[b] + b*Conjugate[a] = 2 Re[a*b] 

У меня есть некоторые очень сложные уравнения, которые могут быть упрощены в значительной степени, если Mathematica может признать эту простую идентичность

(and that a*Conjugate[b] - b*Conjugate[a] = 2 Im[a*b]). 

См., Mathematica не закончит решение моих уравнений, если они написаны в

a*Conjugate[b] +b*Conjugate[a] form, 

, но я мог бы, по крайней мере, написать мои окончательные уравнения в чрезвычайно описательной и компактной форме, если Mathematica это признает. Фактические выражения выглядит следующим образом:

-((I q1 + q2)/(I q0 + Sqrt[-q0^2 + q1^2 + q2^2 + q3^2])) - 
(Conjugate[q1] + I Conjugate[q2])/ 
(Conjugate[q0] + I Conjugate[Sqrt[-q0^2 + q1^2 + q2^2 + q3^2]]) 

Я хотел бы сделать это сам, но есть 16 таких выражений, и они образуют 4 набора связанных систем. Поскольку одна ошибка признака сделает мою работу бесполезной, я бы предпочел автоматизированный процесс.

ответ

0

Ваша личность правильная? Я получаю разные цифры для двух сторон.

{a*Conjugate[b] + b*Conjugate[a], 2 Re[a*b]} /. {a -> RandomComplex[],b -> RandomComplex[]}
1

Первый проход: используйте ComplexExpand [].

 
    In := Simplify[ ComplexExpand[ a Conjugate[b] + b Conjugate[a], {a, b} ] ] 
    Out = 2 (Im[a] Im[b] + Re[a] Re[b]) 

Для большего удовольствия, смотрите на ComplexityFunction, хотя я считаю, что много проб и ошибок участвует в настройке FullSimplify.

+2

Будьте осторожны с ComplexExp а также. Как поясняется в его документации (http://reference.wolfram.com/mathematica/ref/ComplexExpand.html), он явно предполагает, что все переменные являются реальными. Это часто очень полезно, но в данном случае это неверное предположение. –

+2

@Andrew Moylan: В то время как true, второй аргумент ComplexExpand - это список символов, которые нужно рассматривать как Complex. Таким образом, {a, b}, выше. –

+0

Ах, совершенно верно, моя ошибка. Извините, я не читал ваш пост. –

4

Идентичность вы дали, b Conjugate[a] + a Conjugate[b] == 2 Re[a b], это справедливо, только если по крайней мере один из а и Ь реально:

In[7]:= Simplify[ 
Reduce[a*Conjugate[b] + b*Conjugate[a] == 2 Re[a*b], {a, b}]] 

Out[7]= Im[a] == 0 || Im[b] == 0 

Если это дополнительное условие, на самом деле верно в вашем приложении, то вы могли бы дать ему упростить или FullSimplify как предположение, как их второй аргумент. Например:

In[14]:= FullSimplify[Im[a*Conjugate[b] + b*Conjugate[a]], 
Im[a] == 0 || Im[b] == 0] 

Out[14]= 0 

Кстати, вот один пример, когда личность не так:

In[1]:= FindInstance[ 
a*Conjugate[b] + b*Conjugate[a] != 2 Re[a*b], {a, b}] 

Out[1]= {{a -> -I, b -> -I}} 
+0

В M'ma 7 я обнаружил, что предположение [{...}, _sequence_of_simplification_functions [_stuff_]] гораздо менее раздражает то, что в каждую из упрощающих функций передаются предположения. (И существенно менее подвержен ошибкам вырезания/вставки.) –

+0

Конечно, вы также можете установить глобальные '$ Assumptions' – Simon

1

Я думаю, что правильный идентичность должна быть:

a*Conjugate[b] + b*Conjugate[a] == 2 Re[Conjugate[a]*b] 

Это всегда верно :

In[1]:= FullSimplify[a*Conjugate[b] + b*Conjugate[a] == 2 Re[Conjugate[a]*b]] 

Out[1]= True