In rete: http://www.elegio.it/mc2/lorentz-2010.html

Aggiornato l'11 settembre 2010 e ritoccato il 7 gennaio 2015.
Ho usato solo caratteri UNICODE

La trasformazione di Lorentz è uno degli attrezzi fondamentali per effettuare calcoli di cinematica e dinamica relativistica e pertanto richiede particolare approfondimento della sua struttura e delle sue proprietà.
In letteratura si trova spesso definita in funzione delle componenti della velocità della particella calcolata in base al tempo dell'osservatore ( dal punto di vista relativistico NON costituiscono un vettore ! ). Viceversa, a mio parere, è molto meglio usare come parametri le componenti spaziali della velocità della particella espressa in funzione del tempo proprio della particella ( con la velocità del tempo dell'osservatore in funzione del tempo proprio della particella costituiscono un ortodosso quadrivettore ).
Passerò dunque in rassegna alcune delle varie possibili definizioni della matrice di trasformazione...

Trasformazioni di Lorentz

Metrica pseudoeuclidea nel SI, assumendo ç = 299792458 [m/s].
Tensore metrico covariante ( pedici sottolineati ):

gik =






 ç2 0 0 0





0  −1  0 0
0 0  −1  0
0 0 0  −1 

Tensore metrico controvariante ( pedici non sottolineati, per tradizione andrebbero scritti in alto ):

gik =







 1ç2  0 0 0






0  −1  0 0
0 0  −1  0
0 0 0  −1 

Ogni vettore quadrivelocità ha qnorma (norma quadratica) ç2.
Se uh è un generico vettore velocità controvariante ( dunque pedice non sottolineato), le sue componenti sono date dall'espressione:

uh = [ ( w2·( ux2 + uy2 + uz2 ) + ç2 )½ç, w·ux, w·uy, w·uz]

Se pertanto la particella è ferma ( w = 0 ) la sua quadrivelocità controvariante vale [1,0,0,0] ( e dunque la corrispondente velocità covariante, ossia uh, di scarso interesse pratico, vale [ ç2, 0, 0, 0 ] ).
La trasformazione di Lorentz basata sulle componenti direzionali della quadrivelocità ux, uy e uz e del fattore di scala w, è rappresentata dalla seguente matrice:

[1]

p = ç2 + ç·( w2·( ux2 + uy2 + uz2 ) + ç2 )½
L(ux, uy, uz, w) =










  pç2 −1   − ux·wç2  − uy·wç2  − uz·wç2









ux·w  ( ux·w)2 p   + 1 ux· uy·w2 p  ux· uz·w2 p 
uy·w ux· uy·w2 p   ( uy·w)2 p   + 1 uy· uz·w2 p 
uz·w ux· uz·w2 p  uy· uz·w2 p   ( uz·w)2 p   + 1 
Il quadrato della matrice di trasformazione, nel caso in cui si ponga w = 1 si ottiene ponendo:

wq = 2·( 1 + ( ux2 + uy2 + uz2 ) / ç2 )½

La radice quadrata della matrice di trasformazione rispetto a quella in cui si ponga w = 1 si ottiene ponendo:

wsq = 1 / ( 2·( 1 + ( ux2 + uy2 + uz2 ) / ç2 )½ + 2 )½

Un modo forse migliore di definire la matrice di Lorentz è quello di usare quantità adimensionali per definire le componenti spaziali del quadrivettore fermato dalla trasformazione.
Si ponga:

[2]

bx = ux ç  ;    by = uy ç  ;    bz = uz ç 
d = 11 + ( 1 + w2·( bx2 + by2 + bz2 ) )½
L( bx, by, bz, w ) =









  1 d − 1   − w·bxç   − w·byç   − w·bzç 








ç·w·bx   d·( w·bx )2 + 1  d·w2·bx·by  d·w2·bx·bz
ç·w·by   d·w2·bx·by  d·( w·by )2 + 1  d·w2·by·bz
ç·w·bz   d·w2·bx·bz  d·w2·by·bz  d·( w·bz )2 + 1
uh = [ ( 1 + w2·( bx2 + by2 + bz2 ) )½ , ç·w·bx, ç·w·by, ç·w·bz ]

Per ottenere la trasformazione quadrata e radice quadrata rispetto a quella in cui si assume w = 1   bisogna usare i seguenti valori:

wq = 2·( 1 + bx2 + by2 + bz2 )½
wsq = 1 / ( 2·( 1 + bx2 + by2 + bz2 )½ + 2 )½

Per effettuare verifiche numeriche suggerisco di usare i seguenti valori che producono espressioni esenti da radici quadrate:

bx by bz
4 4 4
76/128 95/128 152/128
66/512 165/512 198/512

Uso di funzioni trigonometriche iperboliche

Usando le funzioni trigonometriche iperboliche ossia il coseno iperbolico : cosh(w) = ( ew + 1/ew )/2 ed il seno iperbolico : sinh(w) = ( ew − 1/ew )/2 si ottiene una espressione della matrice da cui è immediatamente deducibile una sua qualsiasi potenza, quadrato e radice quadrata inclusa.
Il solo difetto di questa formulazione è il fatto che Maxima ha qualche problema a gestire le semplificazioni delle funzioni trigonometriche iperboliche ma questo nulla toglie alla utilità delle seguenti formule.

[3]

Lz(...) =












cosh(w)  − bx·sinh(w)ç·(bx2+by2+bz2)½  − by·sinh(w)ç·(bx2+by2+bz2)½  − bz·sinh(w)ç·(bx2+by2+bz2)½











− ç·bx·sinh(w)(bx2+by2+bz2)½   bx2·cosh(w)+by2+bz2 bx2+by2+bz2  bx·by·cosh(w) −bx·by bx2+by2+bz2  bx·bz·cosh(w) −bx·bz bx2+by2+bz2
− ç·by·sinh(w)(bx2+by2+bz2)½  bx·by·cosh(w) −bx·by bx2+by2+bz2   by2·cosh(w)+bx2+bz2 bx2+by2+bz2  by·bz·cosh(w) −by·bz bx2+by2+bz2
− ç·bz·sinh(w)(bx2+by2+bz2)½  bx·bz·cosh(w) −bx·bz bx2+by2+bz2  by·bz·cosh(w) −by·bz bx2+by2+bz2   bz2·cosh(w)+bx2+by2 bx2+by2+bz2

Va notato che in questa formula le grandezze bx, by, bz sono definite a meno di un fattore moltiplicativo arbitrario. Possono dunque essere considerate coincidenti con quelle date in precedenza o desumibili nel modo specificato in seguito...

Il quadrato della matrice si ottiene semplicemente usando 2·w in luogo di w mentre la radice quadrata della matrice si ottiene usando w/2 in luogo di w.

Il vettore quadrivelocità, in forma controvariante, fermato dalla trasformazione assume questa espressione:

U = [ ut, ux, uy, uz ] = [ cosh(w), ç·bx·sinh(w)(bx2+by2+bz2)½ , ç·by·sinh(w)(bx2+by2+bz2)½ , ç·bz·sinh(w)(bx2+by2+bz2)½ ]

ur = ( ux2+ uy2+ uz2 )½
w = log(( ur + ( ur2 + ç2)½ ) /ç)

Le tre componenti della velocità ordinaria possono essere espresse usando la tangente iperbolica ossia   tanh(w) = ( e2·w − 1 )/( e2·w + 1 )   in questo modo:

V = [ vx, vy, vz ] = [ ç·bx·tanh(w)(bx2+by2+bz2)½ , ç·by·tanh(w)(bx2+by2+bz2)½ , ç·bz·tanh(w)(bx2+by2+bz2)½ ]

vr = ( vx2+ vy2+ vz2 )½
w = log(( ç + vr )/( ç − vr))/2

bx = ux / ur = vx / vr ;    by = uy / ur = vy / vr ;    bz = uz / ur = vz / vr
βr = vr / ç ;    βx = vx / ç ;    βy = vx / ç ;    βz = vz / ç
w = log(( 1 + βr )/( ( 1 − βr ))/2

Per aggirare le difficoltà di verifica delle formule con Maxima è a volte utile fare verifiche numeriche. Maxima gestisce in modo esatto i numeri razionali per cui è utile disporre delle componente di versori di prova definibili in modo esatto con espressioni razionali. La norna euclidea dei seguenti vettori vale 1 per cui, in 3 dimensioni, sono dei versori...

Alcuni versori tridimensionali razionali ( la somma dei loro quadrati vale 1 )

1/32/32/3
2/73/76/7
3/134/1312/13
12/2515/2516/25
3/12580/12596/125
24/12580/12593/125
28/12575/12596/125
35/12572/12596/125
53/12560/12596/125

 

Versione semplificata per l'uso di dati solo razionali

In pratica usa lo schema della variante [2]

[4]

Lzr(bx, by, bz, w ) =










 1 + cm  −  sh·bxç −  sh·byç −  sh·bzç









ç·sh·bx  1 + cm·bx2   cm·bx·by  cm·bx·bz
ç·sh·by  cm·bx·by  1 + cm·by2   cm·by·bz
ç·sh·bz  cm·bx·bz  cm·by·bz  1 + cm·bz2 
  
w > 0
  
cm  =  1 2 ·( w + 1 w ) − 1
  
sh  =  1 2 ·( w 1 w )

Dove viene imposto il seguente vincolo che impone il calcolo di una radice quadrata per normalizzare per prudenza i dati di ingresso :

bx2 + by2 + bz2 = 1

Oppure ( e MOLTO MEGLIO ) vengono usati due parametri di natura angolare per definire i tre coefficienti spaziali:

bx = h·( 1 − f 2 ) ( 1 + h 2 )·( 1 + f 2 )
 
by = h·f ( 1 + h 2 )·( 1 + f 2 )
 
bz = 1 − h 2 1 + h 2

Formule in maximese

Maxima rappresenta un ottimo programma gratuito per fare calcolo simbolico. Purtroppo ha i suoi limiti di capacità di semplificazione delle espressioni per cui le formule qui proposte tengono in qualche modo in conto l'usabilità delle formule definite nel linguaggio di Maxima che scherzosamente chiamo maximese.

Quadrivelocità

Vettore u1 in funzione dei parametri w,ux,uy,uz:
u1:[sqrt(w^2*(ux^2+uy^2+uz^2)+ç^2)/ç,
    w*ux,w*uy,w*uz];
Per evitare che Maxima si preoccupi del fatto che ç possa essere negativo definisco il simbolo § come radice quarta di ç ossia

§ = 131.5846336684494782
ç = § 4

Espressione [1]

Con queste istruzioni costruisco la matrice e il vettore fermato dalla trasformazione usando § piuttosto che ç.
fp1:§^8+§^4*sqrt(§^8+w^2*(ux^2+uy^2+uz^2));

lz:matrix([fp/§^8-1,-ux*w/§^8,-uy*w/§^8,-uz*w/§^8],
[-ux*w,(ux*w)^2/fp+1,ux*uy*w^2/fp,ux*uz*w^2/fp],
[-uy*w,ux*uy*w^2/fp,(uy*w)^2/fp+1,uy*uz*w^2/fp],
[-uz*w,ux*uz*w^2/fp,uy*uz*w^2/fp,(uz*w)^2/fp+1]);

lz1:ratsimp(ev(lz,fp=fp1));

u1:ratsimp(ev([fp/§^8-1,w*ux,w*uy,w*uz],fp=fp1));
Per la trasformazione doppia ossia quadratica devo porre w = wq con:
wq:2*sqrt(1+(ux^2+uy^2+uz^2)/§^8);
Per la trasformazione dimezzata ossia radice quadrata devo porre w = wsq con:
wsq:1/sqrt(2*sqrt(1+(ux^2+uy^2+uz^2)/§^8)+2);
Per ottenere il vettore fermato dalla trasformazione raddoppiata uso questa funzione:
raddoppiolz(u):=block([v],
   v:[0,2*u[1]*u[2],2*u[1]*u[3],2*u[1]*u[4]],
   v[1]:sqrt(1+(v[2]^2+v[3]^2+v[4]^2)/§^8),
   radcan(v));
Notare che radcan(...) è una funzione disponibile in Maxima per semplificare radicali con maggiore efficienza di ratsimp(...)
Per ottenere il vettore fermato dalla trasformazione dimezzata uso questa funzione:
dimezzolz(u):=block([qt],
   qt:sqrt(2*u[1]+2),
   radcan([qt/2,u[2]/qt,u[3]/qt,u[4]/qt]));

Espressione [2]

Utilizzo bx,by e bz adimensionali...
qq:1/(1+sqrt(1+(bx^2+by^2+bz^2)*s^2));

lz:matrix(
[1/q-1,-(s*bx)/ç,-(s*by)/ç,-(s*bz)/ç],
     [-s*bx*ç,q*s^2*bx^2+1,q*s^2*bx*by,q*s^2*bx*bz],
     [-s*by*ç,q*s^2*bx*by,q*s^2*by^2+1,q*s^2*by*bz],
     [-s*bz*ç,q*s^2*bx*bz,q*s^2*by*bz,q*s^2*bz^2+1]);

lzqq:ev(lz,q=qq);

u:[sqrt(1+s^2*(bx^2+by^2+bz^2)),s*bx*ç,s*by*ç,s*bz*ç];
Per ottenere la matrice quadrata va posto:
squad:2*sqrt(1+bx^2+by^2+bz^2);
Mentre per ottenere la matrice radice quadrata va posto:
ssq:1/sqrt( 2*sqrt(1+bx^2+by^2+bz^2)+2);

Espressione [3]

Formule consigliate ! Usando le funzioni trigonometriche iperboliche...

llz: matrix([ch,
    -(bx*sh)/(sqrt(bz^2+by^2+bx^2)*ç),
    -(by*sh)/(sqrt(bz^2+by^2+bx^2)*ç),
    -(bz*sh)/(sqrt(bz^2+by^2+bx^2)*ç)],
   [-(bx*sh*ç)/sqrt(bz^2+by^2+bx^2),
     (bx^2*ch+bz^2+by^2)/(bz^2+by^2+bx^2),
     (bx*by*ch-bx*by)/(bz^2+by^2+bx^2),
     (bx*bz*ch-bx*bz)/(bz^2+by^2+bx^2)],
   [-(by*sh*ç)/sqrt(bz^2+by^2+bx^2),
     (bx*by*ch-bx*by)/(bz^2+by^2+bx^2),
     (by^2*ch+bz^2+bx^2)/(bz^2+by^2+bx^2),
     (by*bz*ch-by*bz)/(bz^2+by^2+bx^2)],
   [-(bz*sh*ç)/sqrt(bz^2+by^2+bx^2),
     (bx*bz*ch-bx*bz)/(bz^2+by^2+bx^2),
     (by*bz*ch-by*bz)/(bz^2+by^2+bx^2),
     (bz^2*ch+by^2+bx^2)/(bz^2+by^2+bx^2)]);

lz: ev(llz,ch=cosh(4*w),sh=sinh(4*w));

u: [cosh(4*w),
    (bx*sinh(4*w)*ç)/sqrt(bz^2+by^2+bx^2),
    (by*sinh(4*w)*ç)/sqrt(bz^2+by^2+bx^2),
    (bz*sinh(4*w)*ç)/sqrt(bz^2+by^2+bx^2)]
Si verifica la corretta definizione del vettore u con questa espressione:
transpose(trigsimp(lz.u))[1];
che dà come risultato [1, 0, 0, 0].

Ora mostro come ho programmato in Maximese le formule della trasformata solo con numeri razionali...

Per guardare un sorgente wxMaxima e ricopiarlo in un file con estensione .wxm cliccare il pulsante qua sotto...



Ecco la semplice funzione che sperimento qui

//
// Inversa modulare ( L'algoritmo di Euclide )
//
function inversamod(a,bprimo){
    var p,d,t,q;
    var x=0,y=1,z=0,v=1,w=0;
    p=Math.round(Math.abs(bprimo));
    t=p;
    d=Math.round(Math.abs(a))%p;
    while(t!=0){
        z=d%t; q=(d-z)/t; d=t; t=z;
        z=x; x=v-q*x; v=z;
        z=y; y=w-q*y; w=z;
        }
    return [d,(v+p)%p,w];
    }
Sono numeri primi 101 ( con zn_primroot(101) == 2 ) oppure 65537 ( con zn_primroot(65537) == 3 ) oppure 9999991 ( con zn_primroot(9999991) == 22 ) etc... ( usare Maxima per trovare numeri primi e le loro radici primitive con la funzione zn_primroot(...) ).

Per trovare l'inverso modulare di un intero rispetto ad un numero primo usato come modulo

...qui trascrivo i dati ( se Javascript funziona )...
...qui i risultati della inversamod(n,p) ...
...qui la verifica ( il risultato dovrebbe essere 1 se il modulo è veramente un numero primo )...
  • Per usare l'algoritmo di Euclide... http://www.elegio.it/doc/tn/lumodulare.html
  • http://www.elegio.it/doc/tn/lu-classica+invariante.html
  • http://www.elegio.it/doc/tn/esperimenti-lib-algebra-modulare.html
  • http://www.elegio.it/omnia/ht/ht20140120.html
  • http://www.elegio.it/calcolatrice/trucchivari-201412.html