Modello di linearizzazione della RG
Giampaolo Bottoni - 11 aprile 2010
Propongo un modo innovativo per linearizzare ( in modo NON lineare ) le
equazioni della Relatività Generale.
Con questo modello potrei studiare le interazioni gravitazionali tra buchi
neri ed il pregio del modello è che, nel caso in cui uno solo dei buchi neri
sia nettamente prevalente su tutti gli altri, le equazioni ottenute
tendono ad essere quelle esatte ossia tali per cui il tensore di
Ricci risulti ovunque nullo.
Nelle vicinanze di un singolo buco nero l'azione del buco nero è
nettamente prevalente rispetto a quelle di tutti gli altri e dunque
questo modello fornisce una ottima approssimazione delle equazioni della
RG tanto migliore quanto più la RG si discosta dal classico modello
gravitazionale newtoniano.
(%i1)
(if atom(lg) then load(ctensor));
Inizializzo la libreria ctensor di Maxima.
(%i2)
init_ctensor();
Definisco una funzione del tutto generica delle coordinate oltre alla funzione
di servizio rq.
(%i3)
rq:x^2+y^2+z^2;
La funzione U(x,y,z) del tutto generica è ricavata dalla classica funzione
potenziale newtoniana. Specifico genericamente le variabili da cui dipende.
(%i4)
depends(U,[x,y,z]);
La funzione b mi serve solo per semplificare l'input.
(%i5)
b:U/(U-1);
(%i6)
lgmia: matrix (
[ 1-U, 0,0,0 ],
[ 0,-1+b*x^2/rq,b*x*y/rq, b*x*z/rq ],
[ 0,b*x*y/rq,-1+b*y^2/rq,b*y*z/rq ],
[ 0,b*x*z/rq,b*y*z/rq,-1+b*z^2/rq]);
Dichiaro alla libreria ctensor che faccio uso di coordinate cartesiane
(%i7)
ct_coords: [t,x,y,z];
In base alle esigenze della libreria ctensor di cui ho fatto il
load, inizializzo il tensore metrico covariante che si deve chiamare lg.
(%i8)
lg:ratsimp(lgmia);
Calcolo la metrica ovvero il tensore metrico controvariante
che deve essere la matrice inversa del tensore metrico
covariante.
(%i9)
cmetric();
(%i10) uug:ug$
Cerco di semplificare il piu' possibile l'espressione del
tensore metrico controvariante
(%i11)
ug:ratsimp(uug);
Anche se non serve ora faccio vedere che lg ed ug sono una la matrice
inversa dell'altra
(%i12)
ratsimp(ug . lg);
Ora calcolo i simboli di christoffel di prima e seconda specie
visualizzandoli tutti. Attenzione alle regole della libreria ctensor che
mette come terzo indice quello che di solito viene scritto come
primo indice.
(%i13)
christof(all);
Provo a semplificare una delle componenti del simbolo di Christoffel
di seconda specie.
(%i61)
ratsimp(mcs[2,2,2]);
Creo il tensore di Riemann sopprimendo l'output che probabilmente sarebbe
troppo lungo per essere stampato.
(%i62)
riemann(false);
Ora faccio lo stesso calcolando il tensore di Ricci.
(%i63)
ricci(false);
Ora trasformo il tensore di Ricci in matrice.
(%i64)
mat_ricci: ratsimp( matrix(
[ ric[1,1],ric[1,2],ric[1,3],ric[1,4]],
[ ric[2,1],ric[2,2],ric[2,3],ric[2,4]],
[ ric[3,1],ric[3,2],ric[3,3],ric[3,4]],
[ ric[4,1],ric[4,2],ric[4,3],ric[4,4]]))$
Innanzi tutto controllo che i termini non diagonali della
prima riga e colonna siano degli zeri.
(%i65)
forsezeri: [ratsimp(ric[2,1]),ratsimp(ric[3,1]),ratsimp(ric[4,1]),
ratsimp(ric[1,2]),
ratsimp(ric[1,3]),
ratsimp(ric[1,4])];
Controllo che il tensore di ricci e' un tensore simmetrico... come da manuale
ma se uno vuol fare il san Tommaso...
(%i66)
certozeri: [ratsimp(ric[2,3]-ric[3,2]), ratsimp(ric[2,4]-ric[4,2]),
ratsimp(ric[3,4]-ric[4,3]) ];
Questi non sono zeri ma se la funzione U(x,y,z) assume
dei valori adeguati lo debbono diventare...
Intanto li stampo...
(%i67)
ratsimp(ric[1,1]);
(%i68)
ratsimp(ric[2,2]);
(%i69)
ratsimp(ric[3,3]);
(%i70)
ratsimp(ric[4,4]);
(%i71)
ratsimp(ric[2,3]);
(%i72)
ratsimp(ric[2,4]);
(%i73)
ratsimp(ric[3,4]);
Ora mi preparo a specificare cosa deve valere la funzione U(x,y,z) per fare
in modo che la metrica sia quella di un buco nero neutro ossia sia la metrica
di Schwarzschild.
(%i74)
v0n:2*m/rq^(1/2);
Specifico tutte le derivate di primo e secondo ordine.
(%i75)
vxn:ratsimp(diff(v0n,x));
(%i76) vyn:ratsimp(diff(v0n,y))$
(%i77) vzn:ratsimp(diff(v0n,z))$
(%i78)
vxxn:ratsimp(diff(vxn,x));
(%i79) vyyn:ratsimp(diff(vyn,y))$
(%i80) vzzn:ratsimp(diff(vzn,z))$
(%i81)
vxyn:ratsimp(diff(vxn,y));
(%i82) vxzn:ratsimp(diff(vxn,z))$
(%i83) vyzn:ratsimp(diff(vyn,z))$
Ora sostituisco alle derivate alcuni simboli ossia uso v0, vx, vy, vz, vxx,
vxy, vzz, vxy, vxz, vyz.
Inizio la procedura con ric[1,1]
(%i84)
rics:ratsimp(ric[1,1]);
(%i85) ric1:ratsimp(subst(vx,diff(U,x),rics))$
(%i86) ric2:ratsimp(subst(vy,diff(U,y),ric1))$
(%i87) ric3:ratsimp(subst(vz,diff(U,z),ric2))$
(%i88) ric4:ratsimp(subst(vxx,diff(U,x,2),ric3))$
(%i89) ric5:ratsimp(subst(vyy,diff(U,y,2),ric4))$
(%i90) ric6:ratsimp(subst(vzz,diff(U,z,2),ric5))$
(%i91) ric7:ratsimp(subst(vxy,diff(diff(U,x),y),ric6))$
(%i92) ric8:ratsimp(subst(vxz,diff(diff(U,x),z),ric7))$
(%i93) ric9:ratsimp(subst(vyz,diff(diff(U,y),z),ric8))$
(%i94)
rica:ratsimp(subst(v0,U,ric9));
Ora sostituisco ai simboli le vere funzioni dedotte a partire da v0n.
(%i95) ric1n:ratsimp(subst(vxn,vx,rica))$
(%i96) ric2n:ratsimp(subst(vyn,vy,ric1n))$
(%i97) ric3n:ratsimp(subst(vzn,vz,ric2n))$
(%i98) ric4n:ratsimp(subst(vxxn,vxx,ric3n))$
(%i99) ric5n:ratsimp(subst(vyyn,vyy,ric4n))$
(%i100) ric6n:ratsimp(subst(vzzn,vzz,ric5n))$
(%i101) ric7n:ratsimp(subst(vxyn,vxy,ric6n))$
(%i102) ric8n:ratsimp(subst(vxzn,vxz,ric7n))$
(%i103) ric9n:ratsimp(subst(vyzn,vyz,ric8n))$
(%i104) rican:ratsimp(subst(v0n,v0,ric9n))$
Ecco il test cruciale: sostituendo e sostituendo alla fine viene zero
o cosa vien fuori ?
(%i105)
ratsimp(rican);
Ripeto tutta la procedura con ric[2,2]
(%i106)
rics:ratsimp(ric[2,2]);
(%i107) ric1:ratsimp(subst(vx,diff(U,x),rics))$
(%i108) ric2:ratsimp(subst(vy,diff(U,y),ric1))$
(%i109) ric3:ratsimp(subst(vz,diff(U,z),ric2))$
(%i110) ric4:ratsimp(subst(vxx,diff(U,x,2),ric3))$
(%i111) ric5:ratsimp(subst(vyy,diff(U,y,2),ric4))$
(%i112) ric6:ratsimp(subst(vzz,diff(U,z,2),ric5))$
(%i113) ric7:ratsimp(subst(vxy,diff(diff(U,x),y),ric6))$
(%i114) ric8:ratsimp(subst(vxz,diff(diff(U,x),z),ric7))$
(%i115) ric9:ratsimp(subst(vyz,diff(diff(U,y),z),ric8))$
(%i116)
rica:ratsimp(subst(v0,U,ric9));
Ora sostituisco ai simboli le vere funzioni dedotte a partire da v0n.
(%i117) ric1n:ratsimp(subst(vxn,vx,rica))$
(%i118) ric2n:ratsimp(subst(vyn,vy,ric1n))$
(%i119) ric3n:ratsimp(subst(vzn,vz,ric2n))$
(%i120) ric4n:ratsimp(subst(vxxn,vxx,ric3n))$
(%i121) ric5n:ratsimp(subst(vyyn,vyy,ric4n))$
(%i122) ric6n:ratsimp(subst(vzzn,vzz,ric5n))$
(%i123) ric7n:ratsimp(subst(vxyn,vxy,ric6n))$
(%i124) ric8n:ratsimp(subst(vxzn,vxz,ric7n))$
(%i125) ric9n:ratsimp(subst(vyzn,vyz,ric8n))$
(%i126) rican:ratsimp(subst(v0n,v0,ric9n))$
Ecco il test cruciale: sostituendo e sostituendo alla fine viene zero
o cosa vien fuori ?
(%i127)
ratsimp(rican);
Ripeto tutta la procedura con ric[3,3]
(%i128)
rics:ratsimp(ric[3,3]);
(%i129) ric1:ratsimp(subst(vx,diff(U,x),rics))$
(%i130) ric2:ratsimp(subst(vy,diff(U,y),ric1))$
(%i131) ric3:ratsimp(subst(vz,diff(U,z),ric2))$
(%i132) ric4:ratsimp(subst(vxx,diff(U,x,2),ric3))$
(%i133) ric5:ratsimp(subst(vyy,diff(U,y,2),ric4))$
(%i134) ric6:ratsimp(subst(vzz,diff(U,z,2),ric5))$
(%i135) ric7:ratsimp(subst(vxy,diff(diff(U,x),y),ric6))$
(%i136) ric8:ratsimp(subst(vxz,diff(diff(U,x),z),ric7))$
(%i137) ric9:ratsimp(subst(vyz,diff(diff(U,y),z),ric8))$
(%i138)
rica:ratsimp(subst(v0,U,ric9));
Ora sostituisco ai simboli le vere funzioni dedotte a partire da v0n.
(%i139) ric1n:ratsimp(subst(vxn,vx,rica))$
(%i140) ric2n:ratsimp(subst(vyn,vy,ric1n))$
(%i141) ric3n:ratsimp(subst(vzn,vz,ric2n))$
(%i142) ric4n:ratsimp(subst(vxxn,vxx,ric3n))$
(%i143) ric5n:ratsimp(subst(vyyn,vyy,ric4n))$
(%i144) ric6n:ratsimp(subst(vzzn,vzz,ric5n))$
(%i145) ric7n:ratsimp(subst(vxyn,vxy,ric6n))$
(%i146) ric8n:ratsimp(subst(vxzn,vxz,ric7n))$
(%i147) ric9n:ratsimp(subst(vyzn,vyz,ric8n))$
(%i148) rican:ratsimp(subst(v0n,v0,ric9n))$
Ecco il test cruciale: sostituendo e sostituendo alla fine viene zero
o cosa vien fuori ?
(%i149)
ratsimp(rican);
Ripeto tutta la procedura con ric[4,4]
(%i150)
rics:ratsimp(ric[4,4]);
(%i151) ric1:ratsimp(subst(vx,diff(U,x),rics))$
(%i152) ric2:ratsimp(subst(vy,diff(U,y),ric1))$
(%i153) ric3:ratsimp(subst(vz,diff(U,z),ric2))$
(%i154) ric4:ratsimp(subst(vxx,diff(U,x,2),ric3))$
(%i155) ric5:ratsimp(subst(vyy,diff(U,y,2),ric4))$
(%i156) ric6:ratsimp(subst(vzz,diff(U,z,2),ric5))$
(%i157) ric7:ratsimp(subst(vxy,diff(diff(U,x),y),ric6))$
(%i158) ric8:ratsimp(subst(vxz,diff(diff(U,x),z),ric7))$
(%i159) ric9:ratsimp(subst(vyz,diff(diff(U,y),z),ric8))$
(%i160)
rica:ratsimp(subst(v0,U,ric9));
Ora sostituisco ai simboli le vere funzioni dedotte a partire da v0n.
(%i161) ric1n:ratsimp(subst(vxn,vx,rica))$
(%i162) ric2n:ratsimp(subst(vyn,vy,ric1n))$
(%i163) ric3n:ratsimp(subst(vzn,vz,ric2n))$
(%i164) ric4n:ratsimp(subst(vxxn,vxx,ric3n))$
(%i165) ric5n:ratsimp(subst(vyyn,vyy,ric4n))$
(%i166) ric6n:ratsimp(subst(vzzn,vzz,ric5n))$
(%i167) ric7n:ratsimp(subst(vxyn,vxy,ric6n))$
(%i168) ric8n:ratsimp(subst(vxzn,vxz,ric7n))$
(%i169) ric9n:ratsimp(subst(vyzn,vyz,ric8n))$
(%i170) rican:ratsimp(subst(v0n,v0,ric9n))$
Ecco il test cruciale: sostituendo e sostituendo alla fine viene zero
o cosa vien fuori ?
(%i171)
ratsimp(rican);
Ora verifico anche i termini NON DIAGONALI che possono essere diversi
da zero se la funzione non possiede le opportune caratteristiche.
(%i172)
rics:ratsimp(ric[2,3]);
(%i173) ric1:ratsimp(subst(vx,diff(U,x),rics))$
(%i174) ric2:ratsimp(subst(vy,diff(U,y),ric1))$
(%i175) ric3:ratsimp(subst(vz,diff(U,z),ric2))$
(%i176) ric4:ratsimp(subst(vxx,diff(U,x,2),ric3))$
(%i177) ric5:ratsimp(subst(vyy,diff(U,y,2),ric4))$
(%i178) ric6:ratsimp(subst(vzz,diff(U,z,2),ric5))$
(%i179) ric7:ratsimp(subst(vxy,diff(diff(U,x),y),ric6))$
(%i180) ric8:ratsimp(subst(vxz,diff(diff(U,x),z),ric7))$
(%i181) ric9:ratsimp(subst(vyz,diff(diff(U,y),z),ric8))$
(%i182)
rica:ratsimp(subst(v0,U,ric9));
Ora sostituisco ai simboli le vere funzioni dedotte a partire da v0n.
(%i183) ric1n:ratsimp(subst(vxn,vx,rica))$
(%i184) ric2n:ratsimp(subst(vyn,vy,ric1n))$
(%i185) ric3n:ratsimp(subst(vzn,vz,ric2n))$
(%i186) ric4n:ratsimp(subst(vxxn,vxx,ric3n))$
(%i187) ric5n:ratsimp(subst(vyyn,vyy,ric4n))$
(%i188) ric6n:ratsimp(subst(vzzn,vzz,ric5n))$
(%i189) ric7n:ratsimp(subst(vxyn,vxy,ric6n))$
(%i190) ric8n:ratsimp(subst(vxzn,vxz,ric7n))$
(%i191) ric9n:ratsimp(subst(vyzn,vyz,ric8n))$
(%i192) rican:ratsimp(subst(v0n,v0,ric9n))$
Ecco il test cruciale: sostituendo e sostituendo alla fine viene zero
o cosa vien fuori ?
(%i193)
ratsimp(rican);
Verifico anche il termine NON DIAGONALE r[2,4] che puo' essere diverso
da zero se la funzione non possiede le opportune caratteristiche.
(%i194)
rics:ratsimp(ric[2,4]);
(%i195) ric1:ratsimp(subst(vx,diff(U,x),rics))$
(%i196) ric2:ratsimp(subst(vy,diff(U,y),ric1))$
(%i197) ric3:ratsimp(subst(vz,diff(U,z),ric2))$
(%i198) ric4:ratsimp(subst(vxx,diff(U,x,2),ric3))$
(%i199) ric5:ratsimp(subst(vyy,diff(U,y,2),ric4))$
(%i200) ric6:ratsimp(subst(vzz,diff(U,z,2),ric5))$
(%i201) ric7:ratsimp(subst(vxy,diff(diff(U,x),y),ric6))$
(%i202) ric8:ratsimp(subst(vxz,diff(diff(U,x),z),ric7))$
(%i203) ric9:ratsimp(subst(vyz,diff(diff(U,y),z),ric8))$
(%i204)
rica:ratsimp(subst(v0,U,ric9));
Ora sostituisco ai simboli le vere funzioni dedotte a partire da v0n.
(%i205) ric1n:ratsimp(subst(vxn,vx,rica))$
(%i206) ric2n:ratsimp(subst(vyn,vy,ric1n))$
(%i207) ric3n:ratsimp(subst(vzn,vz,ric2n))$
(%i208) ric4n:ratsimp(subst(vxxn,vxx,ric3n))$
(%i209) ric5n:ratsimp(subst(vyyn,vyy,ric4n))$
(%i210) ric6n:ratsimp(subst(vzzn,vzz,ric5n))$
(%i211) ric7n:ratsimp(subst(vxyn,vxy,ric6n))$
(%i212) ric8n:ratsimp(subst(vxzn,vxz,ric7n))$
(%i213) ric9n:ratsimp(subst(vyzn,vyz,ric8n))$
(%i214) rican:ratsimp(subst(v0n,v0,ric9n))$
Ecco il test cruciale: sostituendo e sostituendo alla fine viene zero
o cosa vien fuori ?
(%i215)
ratsimp(rican);
Ora verifico anche il termine NON DIAGONALE r[3,4] che potrebbe essere diverso
da zero se la funzione non possiede le opportune caratteristiche.
(%i216)
rics:ratsimp(ric[3,4]);
(%i217) ric1:ratsimp(subst(vx,diff(U,x),rics))$
(%i218) ric2:ratsimp(subst(vy,diff(U,y),ric1))$
(%i219) ric3:ratsimp(subst(vz,diff(U,z),ric2))$
(%i220) ric4:ratsimp(subst(vxx,diff(U,x,2),ric3))$
(%i221) ric5:ratsimp(subst(vyy,diff(U,y,2),ric4))$
(%i222) ric6:ratsimp(subst(vzz,diff(U,z,2),ric5))$
(%i223) ric7:ratsimp(subst(vxy,diff(diff(U,x),y),ric6))$
(%i224) ric8:ratsimp(subst(vxz,diff(diff(U,x),z),ric7))$
(%i225) ric9:ratsimp(subst(vyz,diff(diff(U,y),z),ric8))$
(%i226)
rica:ratsimp(subst(v0,U,ric9));
Ora sostituisco ai simboli le vere funzioni dedotte a partire da v0n.
(%i227) ric1n:ratsimp(subst(vxn,vx,rica))$
(%i228) ric2n:ratsimp(subst(vyn,vy,ric1n))$
(%i229) ric3n:ratsimp(subst(vzn,vz,ric2n))$
(%i230) ric4n:ratsimp(subst(vxxn,vxx,ric3n))$
(%i231) ric5n:ratsimp(subst(vyyn,vyy,ric4n))$
(%i232) ric6n:ratsimp(subst(vzzn,vzz,ric5n))$
(%i233) ric7n:ratsimp(subst(vxyn,vxy,ric6n))$
(%i234) ric8n:ratsimp(subst(vxzn,vxz,ric7n))$
(%i235) ric9n:ratsimp(subst(vyzn,vyz,ric8n))$
(%i236) rican:ratsimp(subst(v0n,v0,ric9n))$
Ecco il test cruciale: sostituendo e sostituendo alla fine viene zero
o cosa vien fuori ?
(%i237)
ratsimp(rican);
Per finire ristampo il tensore metrico covariante che ho usato
per trovare la metrica del buco nero neutro in coordinate
cartesiane.
(%i238)
lg;
E per riepilogo ecco anche il tensore metrico in forma controvariante:
(%i239)
ug;
Una caratteristica fondamentale di questa metrica è il fatto che
il determinante vale -1 ossia è identico a quello della metrica
pseudoeuclidea.
(%i240)
ratsimp(determinant(lg));
(%i241)
ratsimp(determinant(ug));