[英]My for loop doesn't work?
我正在創建一個程序,通過遵循以下算法,使用高斯-喬丹方法求解線性系統:
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
時可能會嚴重咬住您:-)
您將自己除以matrix[k][k]
(因此將其設置為1),然后將行的其余部分除以1。使用臨時變量存儲原始數據透視表,而不是使用matrix[k][k]
編輯:雖然以上是代碼中的錯誤,但可能不會導致您遇到的問題,正如其他人指出的那樣,您還需要使用continue
,而不是在l=k
時終止循環。
你應該更換
for(l = 0; l != k; l++){
同
for(l = 0; l < n; l++){
if (l == k) continue;
當l
到達k
,第一個停止,因此僅處理行0..k-1
。 第二個處理除行k
之外的行0..n-1
(它適合您的偽代碼“ for each row rk of the matrix (k!=i)
”)
也:
for(m = 0; m < n+1; m++){
這意味着您有一個包含n行和n + 1列的矩陣,對嗎? 如果可以的話,據我所知,其他一切看起來都不錯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.