Некоторое время назад я написал пакет для тензорного исчисления в Общей теории относительности. Чтобы сделать его легкодоступным для других, его следует немного изменить.
Существуют такие функции, как, например, Кристоффель для вычисления символа Кристоффеля:
Christoffel[g_, xx_] :=
Block[{ig, res, n},
n = 4;
ig = Simplify[Inverse[g]];
res = Table[(1/2)*Sum[ig[[i,s]]*(-D[g[[j,k]], xx[[s]]] + D[g[[j,s]], xx[[k]]]
+ D[g[[s,k]], xx[[j]]]), {s, 1, n}], {i, 1, n}, {j, 1, n}, {k, 1, n}];
res
]
где g и xx - метрический тензор и координаты соответственно, которые я определяю в сеансе Mathematica после прямой загрузки пакета, помещая, например, анзац для статического сферически-симметричного пространства-времени:
Этот способ связан с недостатками, поскольку диапазоны индексов равны {1, 2, 3, 4}
, в то время как обычная практика в релятивистской физике предлагает ставить {0, 1, 2, 3}
, где 0 обозначает временную координату, а {1, 2, 3}
обозначает пространственно подобную.
Чтобы проиллюстрировать проблему, давайте определим таблицу, где индексы начинаются с 0, т.е.
V = Table[i - j, {i, 0, 3}, {j, 0, 3}]
{{0, -1, -2, -3}, {1, 0, -1, -2}, {2, 1, 0, -1}, {3, 2, 1, 0}}
но когда я оцениваю
V[[0, 0]]
Я получаю Symbol
- глава V,
в то время как для V[[1, 2]]
я получаю -1
, как и должно быть.
Мои вопросы:
- Как я мог переопределить V, чтобы можно было оценить "табличный" компонент
[0, 0]
?
- Какой самый удобный способ представить матрицу g с ее индексами, начинающимися с 0?
- Поскольку я вынужден отказаться от использования
Part
для доступа к тензорным компонентам 0,0
как ввести в пакет свободу выбора диапазонов индексов других объектов, таких как Christoffel (скажем, по умолчанию диапазоны индексов - {0, 1, 2, 3}
или, если предпочитают - {1, 2, 3, 4}
)?
Хотя эти вопросы на первый взгляд кажутся тривиальными, но любые исчерпывающие ответы приветствуются. Любой, кто использует пакет, не должен беспокоиться о тонкостях Mathematica.