基于高斯的二元向量线性独立检验

时间:2017-12-20 16:24:16

标签: c++ matrix gaussian independent-set gauss

我编写了一个高斯消除版本来验证一组二元向量线性独立性。它输入一个矩阵(mxn)来评估并返回:

  • True (线性独立):未找到零行。
  • 错误(线性相关):如果最后一行为零。

它似乎总是很好,或者至少差不多。我发现当矩阵在最后一行有两个重复的向量时,它不起作用:

For i = 0 To lastArrayIndex
    thisString = columnsDataInThisLine(i)
    theFirstStringSymbol = Left(thisString, 1)
    If theFirstStringSymbol = """" Then
        'Replace double double quotes in the string beginning and _
        'the end into single double quotes
        thisString = Mid(thisString, 2, Len(thisString) - 2) 
    End If
    columnsDataInThisLine(i) = thisString
Next i

该函数表示矩阵是"线性无关"因为没有找到零行,结果确实存在任何行。但是调试我发现在某个时刻某行变为,但在一些行操作之后,它会回到"正常&# 34。

我仔细检查了代码,使其工作的唯一方法是返回" false"当一个"零行"在>过程结束之前,更准确地说,在行操作期间找到

std::vector<std::vector<int>> A = {
    {1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1 },
    {0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0 },
    {0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0 },
    {0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0},   // <---- duplicated
    {0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0},}; // <---- duplicated
gaussianElimination_binary(A);

我想知道这是否正确,或者我是否只是修补&#34;一个糟糕的代码。

谢谢!

以下full code

// perform XOR in "k-th" row against "row-th" row
    for (int k = 0; k <= max_row; ++k) //k=col_pivot?
    {
        if ( (k != row)   )
        {
            int check_zero_row = 0; // <---- APPLIED PATCH
            for (std::size_t j = 0; j <= max_col; j++) {
                B[k][j] = B[k][j] ^ B[row][j];
                check_zero_row = check_zero_row | B[k][j];
            }
            if (check_zero_row == 0 ) // <---- APPLIED PATCH
            {
                return false;
            }
        }
    }

0 个答案:

没有答案