/* Prove varie di http://maxima.sourceforge.net/ */ /* Innanzi tutto estendo il path in modo che sia accessibile anche la cartella C:\zmaxima\ che ovviamente devo avere definita e riempita con file di mio interesse Notare che in Maxima non si deve usare la controbarra ma la barra... */ (if atom(path_iniziale) then path_iniziale:file_search_maxima)$ file_search_maxima : cons( sconcat("C:/zmaxima/###.{lisp,mac,mc}"), path_iniziale); /* Uso il pacchetto ctensor per studiare la metrica di Schwarzschild. */ ( if atom(lg) then load(ctensor) ); /* Uso una delle metriche preconfezionate ossia appunto quella di Schwarzschild. */ ct_coordsys(exteriorschwarzschild); /* Il tensore metrico covariante pertanto, in base alle convenzioni della ctensor, è questo: */ lg; /* Il tensore metrico covariante lg è memorizzato come una matrice ovviamente simmetrica. Verifichiamolo: */ matrixp(lg); /* La numerazione delle matrici parte da 1 per cui, per esempio, si ha: */ lg[1,1]; dependencies; /* Quali simboli usa come variabili del tensore metrico. */ ct_coords; /* Calcolo ug ( il tensore metrico controvariante) */ cmetric(); ug; /* I simboli di Christoffel di prima e seconda specie. Specificando all li visualizzo tutti. */ christof(all); /* Chiedo informazioni sulla array lcs ( simboli di Christoffel di prima specie) */ arrayinfo(lcs); /* Chiedo informazioni sulla array mcs ( simboli di Christoffel di seconda specie ) ATTENZIONE ! Usa la convenzione di scrivere il termine controvariante come ultimo e non come primo dei tre indici. Come è noto gli altri indici sono simmetrici per cui qui [1,2,0] è identico a [2,1,0] */ arrayinfo(mcs); xlista:listarray(mcs); ch1: matrix( [ mcs[1,1,1],mcs[1,2,1],mcs[1,3,1],mcs[1,4,1]], [ mcs[2,1,1],mcs[2,2,1],mcs[2,3,1],mcs[2,4,1]], [ mcs[3,1,1],mcs[3,2,1],mcs[3,3,1],mcs[3,4,1]], [ mcs[4,1,1],mcs[4,2,1],mcs[4,3,1],mcs[4,4,1]]); ch2: matrix( [ mcs[1,1,2],mcs[1,2,2],mcs[1,3,2],mcs[1,4,2]], [ mcs[2,1,2],mcs[2,2,2],mcs[2,3,2],mcs[2,4,2]], [ mcs[3,1,2],mcs[3,2,2],mcs[3,3,2],mcs[3,4,2]], [ mcs[4,1,2],mcs[4,2,2],mcs[4,3,2],mcs[4,4,2]]); ch3: matrix( [ mcs[1,1,3],mcs[1,2,3],mcs[1,3,3],mcs[1,4,3]], [ mcs[2,1,3],mcs[2,2,3],mcs[2,3,3],mcs[2,4,3]], [ mcs[3,1,3],mcs[3,2,3],mcs[3,3,3],mcs[3,4,3]], [ mcs[4,1,3],mcs[4,2,3],mcs[4,3,3],mcs[4,4,3]]); ch4: matrix( [ mcs[1,1,4],mcs[1,2,4],mcs[1,3,4],mcs[1,4,4]], [ mcs[2,1,4],mcs[2,2,4],mcs[2,3,4],mcs[2,4,4]], [ mcs[3,1,4],mcs[3,2,4],mcs[3,3,4],mcs[3,4,4]], [ mcs[4,1,4],mcs[4,2,4],mcs[4,3,4],mcs[4,4,4]]); /* Ora calcolo il tensore di Riemann a quattro indici, visualizzandone solo quelli di valore non nullo. */ riemann(true); /* Calcola il tensore di Ricci che dovrebbe essere identicamente nullo ma siccome non fa semplificazioni viene cosi'.... */ ricci(true); /* Trasformo l'array ric in una lista per vederla in modo convenzionale */ listarray(ric); /* Ricopio l'array in una matrice. Notare che la numerazione degli elementi della array potrebbe partire da zero ma gli indici con zero non vengono usati per cui il tensore di Ricci è questo: */ matricci: 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]]); /* Se semplifico le espressioni....tutto diventa zero, come deve essere. */ ratsimp(matricci); /* L'array ric è di tipo hashed ossia sparsa perché non vengono definiti gli indici della riga 0 e della colonna 0. */ arrayinfo(ric); /* Questa e' la verifica della metrica di Schwarzschild */