我正在创建一个程序,按照以下算法使用 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/