2012-02-27 44 views
-4

我在Stackfriends的幫助下更正了代碼,如果其他人有類似的堆棧,請參閱粗體部分。算術,我應該把w = 1,爲什麼讓我w = 2?非常感謝,for循環的基礎知識

X=linspace(0,10,6); 
Y=linspace(0,20,5); 
    Xstar=0; 
    Ystar=0; 
    **p=0;** 
    for i=1:length(X)-1 
     for j=1:length(Y)-1 
       if (Ystar==Y(j)) && (Xstar==X(i)) 
        w=1; 
       else 
        w=2; 
       end 
       **p(i,j)=w** 
     end 
    end 
+1

你的問題是什麼? – YXD 2012-02-27 15:59:45

+0

我的問題仍然在代碼之上。我想知道爲什麼我得到一個數學上不正確的輸出?可能的話,錯誤留在if循環中。 – user1018331 2012-02-27 16:09:05

+0

你必須解釋你期待什麼樣的輸出。我們如何猜測「數學不正確」意味着沒有任何信息? – YXD 2012-02-27 16:12:08

回答

2

只是一個猜測,但我想你想通過向後循環數組。您應該使用調試器並逐步查看它。

試試這個:

... 
    for i=length(X):-1:1 
     for j=length(Y):-1:1 
       if (Ystar==Y(j)) && (Xstar==X(i)) 
        w=1; 
       else 
        w=2; 
       end 
     end 
    end 

這裏是你應該做些什麼來解決這個問題。

  • 設置斷點在循環的開始(克利克在MATLAB編輯器窗口旁邊的源代碼,一個紅色的點應該出現)
  • F5啓動你的腳本,它會停在你的斷點
  • F10讓您的腳本一行一行走,同時您可以檢查變量的值例如在工作區窗口

(我希望這些指令仍然有效,我有一個相當舊版本的MATLAB)

+0

然後我得到w = 0,但我想我看到了這個想法。謝謝你的迴應。 – user1018331 2012-02-27 16:30:22

+1

@ user1018331:執行此操作後,'w'應該是'1'。 – Lucas 2012-02-27 16:34:15

+0

再次感謝,我的幫助:) – user1018331 2012-02-27 16:37:02

1

分配w=1;是隻在第一循環中完成;每次之後,X(i)Y(j)不等於0,因此顯示。循環完成後,您將看到的所有內容都是w=2,因爲您沒有存儲所有迭代的值。