行列式(Determinant):通过高斯消元将矩阵化为上三角,行列式为对角线元素乘积并考虑行交换符号;数值实数版用部分主元选取提升稳定性,模数域下用逆元代替除法。复杂度 O(n^3)。

Description: Compute det(A) via Gaussian elimination (partial pivoting). Over reals: floating-point with row swaps tracking sign. Over mod prime: use modular inverses. For exact integer determinant prefer Bareiss or CRT. Time: O(n^3) Status: tested

  • 函数/接口(据实现)

    • double/long double det(vector<vector<double/long double>> A)
    • long long detMod(vector<vector> A, long long P)(P 为素数,结果规约到 [0,P))
    • 注意:整数精确行列式建议使用 103-数值算法-整数行列式(Bareiss 或多模 CRT)。
  • 核心思路(高斯消元 + 行交换)

    1. sgn = 1;ans = 1;对列 c=0..n-1:
      • 选取从行 r≥c 中 |A[r][c]| 最大者作为主元行 p;若 A[p][c]≈0(或 ≡0 mod P),则行列式为 0。
      • 若 p ≠ c,则交换第 p 与第 c 行,sgn = −sgn。
      • 令 piv = A[c][c];实数版将第 c 行右侧元素除以 piv;模数版将其乘以 inv(piv)(模逆)。
      • 对所有 r>c:用 A[r][c] 消去第 c 列(A[r][*] -= A[r][c]A[c][])。
    2. 最终 ans = sgn · ∏ A[i][i](实数版乘原始主元;若实现中做了行归一,需相应累积/还原)。
    • 数值稳定性:采用部分主元(按列最大值选行)显著降低误差;阈值 EPS 判断“近 0”。
  • 输出语义

    • 实数版:返回 double/long double,受浮点误差影响(规模大时优先 long double)。
    • 模数版:返回 det(A) mod P,位于 [0,P);要求 P 为素数,并为每个非零主元存在逆元。
  • 复杂度

    • 时间 O(n^3),空间 O(1) 额外(原地操作);对于稀疏或超大矩阵可考虑分块/并行或专门库。
  • 使用与注意

关联节点