gpt4 book ai didi

C:需要将二维数组的某些部分写入新的二维数组

转载 作者:行者123 更新时间:2023-11-30 15:44:09 25 4
gpt4 key购买 nike

因此,我正在递归计算可变大小数组的行列式。因此,如果您熟悉如何计算行列式,下面的图片显示了我正在做的事情:

我无法发布图片,因为我没有足够的代表。这是一个链接:

http://i.stack.imgur.com/gIW1D.png

所以,让我极其困惑的是制作更小的 2x2 矩阵。 (请记住,我将其编码为适用于任何大小的数组,而不仅仅是 3x3)。

所以我并不是真正问如何计算行列式,而是如何获取上面显示的 3x3 数组,并且只访问显示的部分。

最佳答案

因此,要计算 NxN 矩阵的行列式,您需要删除第一行,然后逐一删除列,并计算所得 (N-1)x(N-1) 矩阵的行列式。要计算这些行列式,您需要删除较小矩阵的第一行(这将是原始矩阵的第二行),然后逐一删除其他列,依此类推。

因此,很容易弄清楚如何处理每个递归级别的行:在级别 0 处,您将遍历第 0 行;在级别 1 处,您将遍历级别 1,依此类推。

但是列涉及更多。如果在级别 0 删除了第 7 行,在级别 1 删除了当前矩阵的第 12 行(这将是原始矩阵的第 13 行)并且在在级别 2 中,您删除了当前矩阵的第 10 行,这也是上一级矩阵的第 10 行,也就是两级矩阵的第 11 行up,这是原始矩阵...很难确定在较低递归级别访问原始矩阵的哪一列。

当然可以复制整个矩阵,不删除应删除的列,并将副本传递到递归级别。但这会相当浪费。

删除列数字比删除列本身更优雅。为了实现这一点,我们创建一个列号的一维数组。最初它应该按顺序包含数字 0..(N-1)。当您准备计算每个子矩阵行列式时,您可以复制该数组,从副本中删除一个列索引,然后将其传递给递归计算。

所以你的递归函数看起来大约像这样(伪代码)

float recursive_determinant (int N, float[N][N] matrix, 
int[N] column_array, int level)

if level == N-1
return matrix[level][column_array[0]]

result = 0
for each i in 0 .. N - level
copy_of_column_array = column_array
copy_of_column_array.remove_element(i)
subdeterminant = recursive_determinant (N, matrix,
copy_of_column_array, level+1)
result = result + subdeterminant *
matrix[level][column_array[i]] * (-1)^(i+1)
return result


float determinant (int N, float[N][N] matrix)
result = recursive_determinant (N, matrix, {0, 1, ..., N-1}, 0)

关于C:需要将二维数组的某些部分写入新的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19621029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com