簡體   English   中英

我的for循環不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM