7#include <Eigen/Eigenvalues>
24 : metric_fn_(std::move(metric_fn)) {}
37 Eigen::FullPivLU<MetricMatrix> lu(g);
44 if (!lu.isInvertible()) {
56 "[srfm::tensor::MetricTensor::inverse] WARNING: singular metric "
57 "detected at x = (%.4g, %.4g, %.4g, %.4g); applying Tikhonov "
58 "regularization λ = %.2e\n",
64 Eigen::FullPivLU<MetricMatrix> lu_reg(g_reg);
65 if (!lu_reg.isInvertible()) {
69 return lu_reg.inverse();
80 Eigen::SelfAdjointEigenSolver<MetricMatrix> solver(g,
81 Eigen::EigenvaluesOnly);
85 const auto& ev = solver.eigenvalues();
96 return (neg == 1) && (pos == 3);
103 return dx.dot(g * dx);
109 double spatial_scale) {
112 g(0, 0) = -(time_scale * time_scale);
113 g(1, 1) = (spatial_scale * spatial_scale);
114 g(2, 2) = (spatial_scale * spatial_scale);
115 g(3, 3) = (spatial_scale * spatial_scale);
121 const std::array<double, 3>& vol) {
124 g(0, 0) = -(time_scale * time_scale);
125 for (
int i = 0; i < 3; ++i) {
126 g(i + 1, i + 1) = vol[i] * vol[i];
133 const Eigen::Matrix3d& cov) {
136 g(0, 0) = -(time_scale * time_scale);
137 g.block<3, 3>(1, 1) = cov;
double spacetime_interval(const SpacetimePoint &x, const FourVelocity &dx) const
std::optional< MetricMatrix > inverse(const SpacetimePoint &x) const
bool is_lorentzian(const SpacetimePoint &x) const
static MetricTensor make_from_covariance(double time_scale, const Eigen::Matrix3d &cov)
static MetricTensor make_diagonal(double time_scale, const std::array< double, 3 > &vol)
static MetricTensor make_minkowski(double time_scale=1.0, double spatial_scale=1.0)
MetricMatrix evaluate(const SpacetimePoint &x) const
MetricTensor(MetricFunction metric_fn)
Construct from an arbitrary position-dependent metric function.
Physical and financial constants for the SRFM system.
static constexpr double METRIC_SINGULARITY_EPSILON
Epsilon for metric invertibility check (det(g) must exceed this).
static constexpr double TIKHONOV_CONDITION
Relative pivot threshold below which inverse() regularizes the metric.
std::function< MetricMatrix(const SpacetimePoint &)> MetricFunction
static constexpr double TIKHONOV_LAMBDA
Eigen::Vector< double, SPACETIME_DIM > FourVelocity
A tangent vector at a spacetime point (four-velocity: dx^μ/dτ).
Eigen::Matrix< double, SPACETIME_DIM, SPACETIME_DIM > MetricMatrix
The covariant metric tensor g_μν: a 4×4 symmetric matrix.
Eigen::Vector< double, SPACETIME_DIM > SpacetimePoint
static constexpr int SPACETIME_DIM
Dimensionality of the financial spacetime manifold (1 time + 3 assets).
Tensor Calculus & Covariance Engine — AGT-04 public API.