c - 我的 for 循环不起作用?

标签 c linear-algebra

我正在创建一个程序,按照以下算法使用 Gauss-Jordan 方法求解线性系统:

for each row ri of the matrix (i from 1 to n)
        replace ri with ri / rii
        for each row rk of the matrix (k!=i)
                replace rk with rk - rki * ri

显然我做的不对,因为只有行中的第一个元素被自身分开。我还是 C 的新手,所以任何帮助将不胜感激。谢谢!

for (k = 0; k < n; k++) {
    for (m = 0; m < n+1; m++) {
        if (matrix[k][m] < TOLERANCE) {
            printf("Error, pivot is 0\n");
            exit(0);
        }
        matrix[k][m] = matrix[k][m] / matrix[k][k];
    }

    for (l = 0; l != k; l++) {
        printMatrix(n, n+1, matrix);
        for (o = 0; o < n+1; o++) {
            matrix[l][o] = matrix[l][o] - matrix[l][k] * matrix[k][o];
        }
    }
}

还有其他输入吗?它仍然不太正确,我正在拔头发哈哈

最佳答案

首先,内部循环中的 l != k 是一个继续条件。换句话说,当 l 等于 k 时,该循环将退出

这不是它在原始代码中的工作方式。它会继续寻找 l 的所有其他值。

您可以改用这样的东西:

for(l = 0; l < n; l++) {
    if (l != k) {
        printMatrix(n, n+1, matrix);
        for (o = 0; o < n+1; o++) {
            matrix[l][o] = matrix[l][o] - matrix[l][k] * matrix[k][o];
        }
    }
}

而且,顺便说一句,您可能应该尝试远离单字母变量名,尤其是 l,它会在您第一次使用时给您带来严重的伤害把它误认为是 1 :-)

关于c - 我的 for 循环不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5149566/

相关文章:

c - 在c : string cutting with respect to its contents中解析shell命令

c++ - 在编译时验证参数是 c/c++ 预处理宏中的 ARRAY 类型

c - 如何开始使用 MSVC 运行

julia - 如何在 Julia 中执行向量的逐元素平方根?

algorithm - 有没有快速的矩阵求幂方法?

machine-learning - 如何使用截断的 SVD 减少全连接 (`"InnerProduct"`) 层

c - For 循环不遵守带有数组的 if 语句

c - 在 C 中解析简单数字 (ASCII) 文件不起作用

python - Python中的快速整数矩阵零空间?

python - 寻找行减少矩阵python的解决方案