metric4calc.red 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. % calculation of metric tensor (4-dim space-time)
  2. off echo;
  3. on revpri;
  4. n:=4;
  5. array f(n+1), dfdt(n+1), dfdl0(n+1), dfdl1(n+1), dfdl2(n+1)$
  6. array g(n,n)$
  7. operator x$
  8. x(0):=t; x(1):=lambda0; x(2):=lambda1; x(3):=lambda2;
  9. % rules
  10. trig1:={sin(~x)^2=>(1-cos(x)^2)}$ let trig1$
  11. % procedures
  12. procedure scalprod(a,b); begin
  13. integer n; n:=first(length(a))-1;
  14. result:=for i:=0:n-1 sum a(i)*b(i);
  15. return result end;
  16. procedure showmatrix(mm);begin integer m,n;l:=length(mm);m:=first(l)-1;n:=second(l)-1;matrix hm(m,n);for i:=0:m-1 do for j:=0:n-1 do hm(i+1,j+1):=mm(i,j); write hm end;
  17. procedure showvector(vv);begin integer n;n:=first(length(vv))-1; matrix hv(n,1); for i:=0:n-1 do hv(i+1,1):=vv(i); write hv end;
  18. % current radius
  19. a:=a0*sqrt(1-t^2);
  20. % surface of hyper sphere in t and lambda
  21. f(0):=a*cos(lambda0)*cos(lambda1)*cos(lambda2);
  22. f(1):=a*cos(lambda0)*cos(lambda1)*sin(lambda2);
  23. f(2):=a*cos(lambda0)*sin(lambda1);
  24. f(3):=a*sin(lambda0);
  25. f(4):=a0*t;
  26. for i:=0:n do dfdt(i):=df(f(i),x(0))$
  27. for i:=0:n do dfdl0(i):=df(f(i),x(1))$
  28. for i:=0:n do dfdl1(i):=df(f(i),x(2))$
  29. for i:=0:n do dfdl2(i):=df(f(i),x(3))$
  30. g(0,0):=scalprod(dfdt,dfdt)$
  31. g(0,1):=scalprod(dfdt,dfdl0)$
  32. g(0,2):=scalprod(dfdt,dfdl1)$
  33. g(0,3):=scalprod(dfdt,dfdl2)$
  34. g(1,0):=scalprod(dfdl0,dfdt)$
  35. g(1,1):=scalprod(dfdl0,dfdl0)$
  36. g(1,2):=scalprod(dfdl0,dfdl1)$
  37. g(1,3):=scalprod(dfdl0,dfdl2)$
  38. g(2,0):=scalprod(dfdl1,dfdt)$
  39. g(2,1):=scalprod(dfdl1,dfdl0)$
  40. g(2,2):=scalprod(dfdl1,dfdl1)$
  41. g(1,3):=scalprod(dfdl1,dfdl2)$
  42. g(3,0):=scalprod(dfdl2,dfdt)$
  43. g(3,1):=scalprod(dfdl2,dfdl0)$
  44. g(3,2):=scalprod(dfdl2,dfdl1)$
  45. g(3,3):=scalprod(dfdl2,dfdl2)$
  46. write "f = "; showvector(f);
  47. write "df/dt = "; showvector(dfdt);
  48. write "g = "; showmatrix(g);
  49. off revpri;
  50. on echo;
  51. end;