【发布时间】:2021-07-27 10:41:03
【问题描述】:
我想写一个矩阵类。但是当我想处理行列式函数时,我遇到了麻烦。错误是行列式(下一个)。
template<typename T, int row, int column>
T determinant(const Mat<T, row, column>& current)
{
if (row == 1) return current[0][0];
if (row == 2) return current[0][0] * current[1][1] - current[0][1] * current[1][0];
T sum = 0;
for (int i = 0; i <= row - 1; i++)
{
T sign = 1;
if (i % 2 == 1) sign = -sign;
Mat<T, row -1, column - 1> next;
for (int j = 0, nextRow = 0; j <= row - 1; j++)
{
if (i == j) continue;
for (int k = 0; k <= row - 2; k++)
{
next[nextRow][k] = current[j][k + 1];
}
nextRow++;
}
sum += sign * current[i][0] * determinant(next);
}
return sum;
}
【问题讨论】:
-
错误是什么?你怎么称呼这段代码?
-
他可能达到了编译器递归限制。 @user15839305 请提供minimal reproducible example,您可以使用this。
-
我尝试重现问题,但根据 C++,您会遇到不同的问题。在 C++17 之前,在这种情况下,您需要部分特化才能进行递归,并且只有类可以这样做。在 C++17 的情况下,您需要在各个位置使用
constexpr关键字.. -
不相关:计算行列式的方式非常低效,仅适用于相当小的矩阵。
-
其实是错误的实现。