2010-10-23 28 views
0

FullSimplify ne reconnaît pas que:Mathematica Aide: FullSimplify ne pas utiliser les identités conjugués

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

J'ai quelques équations très complexes qui pourraient être grandement simplifiées si Mathematica pourrait reconnaître cette identité simple,

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

Voir, Mathematica ne finira pas de résoudre mes équations lorsqu'il est écrit en

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

mais je pourrais au moins écrire mes équations finales dans une forme extrêmement descriptive et compacte si Mathematica le reconnaissait. Les expressions réelles ressemblent:

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

je ferais moi-même, mais il y a 16 de ces expressions et ils forment 4 ensembles de systèmes couplés. Puisqu'une erreur de signe rendrait mon travail inutile, je préférerais fortement un processus automatisé.

Répondre

0

Votre identité est-elle correcte? Je reçois différents nombres pour deux côtés

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

Premier passage: utilisez ComplexExpand [].

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

Pour plus de plaisir, regardez ComplexityFunction, même si je trouve que beaucoup d'essais et d'erreurs est impliqué dans le réglage FullSimplify.

+2

Soyez prudent avec ComplexExp et. Comme expliqué dans sa documentation (http://reference.wolfram.com/mathematica/ref/ComplexExpand.html), il suppose explicitement que toutes les variables sont réelles. Ceci est souvent très utile, mais ce n'est pas une hypothèse correcte dans ce cas. –

+2

@Andrew Moylan: Bien que vrai, le second argument de ComplexExpand est une liste de symboles à traiter en tant que Complexe. Ainsi le {a, b}, ci-dessus. –

+0

Ah tout à fait raison, mon erreur. Je n'ai pas lu votre message avec soin, désolé. –

4

L'identité que vous avez donné, b Conjugate[a] + a Conjugate[b] == 2 Re[a b], est vrai que si au moins l'un des a et b est réel:

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

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

Si cette condition supplémentaire est en fait vrai dans votre application, vous pouvez donner à simplifier ou FullSimplify comme hypothèse, comme deuxième argument. Par exemple:

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

Out[14]= 0 

Par ailleurs, voici un exemple, lorsque l'identité est pas vrai:

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

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

Dans M'ma 7, j'ai trouvé que supposer [{...}, _sequence_of_simplification_functions [_stuff_]] est beaucoup moins gênant que de passer des hypothèses à chacune des fonctions de simplification. (Et nettement moins enclins à couper/coller des erreurs.) –

+0

Bien sûr, vous pouvez également définir global '$ Assumptions' – Simon

1

Je pense que l'identité correcte devrait être:

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

Il est toujours vrai :

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

Out[1]= True