Je suis nouvel utilisateur de XCAS (ou plutôt de QCAS). je cherche à utiliser ce logiciel pour m'aider à calculer des expressions analytiques pour les amplitudes des différents termes de décomposition d'un tenseur quelconque auquel est appliqué une rotation quelconque. Je travaille sous Debian jessie, avec qcas.
Je tombe très rapidement sur de gros soucis pour tout ce qui concerne les expressions trigonométriques. Déjà, lorsque je veux définir une fonction exponentielle complexe, par exemple f(x):=exp(i*x), le rappel de la fonction avec un argument non défini fait disparaître i : pour a non défini dans la feuille de calcul f(a) retourne e^a. Par contre, curieusement, f(pi/2*a) retourne bien e^{i a \frac{pi}{2}}.
Il me suffit donc de "tricher" en n'utilisant que des arguments multiples de pi/2... J'ai donc défini mes matrices de rotation de cette manière, et les ai appliquées à des tenseurs d'ordre 2. Hormis la forme (sous forme de somme d'exponentielle complexe, exp2trig ne donnant rien de bien utile), les résultats me paraissaient justes jusqu'à ce que je tombe sur un autre résultat inexact. Je joins ici les entrées de la feuille de calcul pour que vous puissiez en juger, mais ma question est la suivante : y a-t-il quelque chose que je devrais faire pour éviter ces soucis.
Je précise que je ne suis pas mathématicien, donc il y a sans doute un certain manque de rigueur dans tout ce qui va suivre. Le contexte est le suivant : je veux calculer la modulation de certains termes dans un Hamiltonien d'interaction entre deux spins lorsque j'applique des rotations sur ces spins.
Première entrée : définition des matrices des observables projection du moment cinétique suivant un axe de 2 spins I et S
Code : Tout sélectionner
Iz:=1/2*[[1,0,0,0],[0,1,0,0],[0,0,-1,0],[0,0,0,-1]];
Ix:=1/2*[[0,0,1,0],[0,0,0,1],[1,0,0,0],[0,1,0,0]];
Iy:=1/2*[[0,0,-i,0],[0,0,0,-i],[i,0,0,0],[0,i,0,0]];
Sz:=1/2*[[1,0,0,0],[0,-1,0,0],[0,0,1,0],[0,0,0,-1]];
Sx:=1/2*[[0,1,0,0],[1,0,0,0],[0,0,0,1],[0,0,1,0]];
Sy:=1/2*[[0,-i,0,0],[i,0,0,0],[0,0,0,-i],[0,0,i,0]];
Code : Tout sélectionner
T20:=sqrt(2/3)*(2*Iz*Sz-Ix*Sx-Iy*Sy);
T2p1:=-1*(Iz*Sx+Ix*Sz+i*(Iz*Sy+Iy*Sz));
T2m1:=(Iz*Sx+Ix*Sz-i*(Iz*Sy+Iy*Sz));
T2p2:=(Ix*Sx-Iy*Sy+i*(Iy*Sx+Ix*Sy));
T2m2:=(Ix*Sx-Iy*Sy-i*(Iy*Sx+Ix*Sy));
Code : Tout sélectionner
Rp90x:=simplify(eval(exp(-i*pi/2*Ix)))*simplify(eval(exp(-i*pi/2*Sx)));
Rm90x:=simplify(eval(exp(i*pi/2*Ix)))*simplify(eval(exp(i*pi/2*Sx)));
Rp90y:=simplify(eval(exp(-i*pi/2*Iy)))*simplify(eval(exp(-i*pi/2*Sy)));
Rm90y:=simplify(eval(exp(i*pi/2*Iy)))*simplify(eval(exp(i*pi/2*Sy)));
Code : Tout sélectionner
Rpz(c):=[[exp(-i*c),0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,exp(i*c)]];
Rpy(c):=Rm90x*[[exp(-i*c),0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,exp(i*c)]]*Rp90x;
Rpx(c):=Rp90y*[[exp(-i*c),0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,exp(i*c)]]*Rm90y;
Cinquième entrée : évaluation sur un exemple facile à calculer à la main :
Code : Tout sélectionner
simplify(dotprod(Rpy(c*pi/2)*(Ix*Sx)*Rpy(-c*pi/2),(Ix*Sz+Iz*Sy))
Code : Tout sélectionner
\frac{(e^{i c pi/2})^4-i}{16(e^{i c pi/2})^2}
J'espère que tout ceci n'est qu'une bévue de ma part, mais je vous saurais gré de m'éclairer là dessus, cordialement.