2011-09-07 93 views
0

我有一個關於在MATlab中做一個簡單的陰謀的快速問題。我之前做過這些,但由於某種原因,它已停止工作,我想要的圖表不再出現。MATLAB的循環圖

我不確定需要多少信息才能回答此問題,請讓我知道是否應該添加更多信息。

我有一個ODE系統,我在循環中使用下面的參數作爲變量之一。

A4bar = NaN; 
for eta_p = 0.0:.1:7; 
A3bar=x(size(t,1),3); 
A4bar= [A4bar;A3bar]; 
hold on 
plot(eta_p,A4bar,'-k','linewidth',1); 

當我使用上面的代碼時,我的圖形出現了一堆未連接的繪製點。

當我使用我以前工作的原始代碼時,我使用了這個。

A4bar = NaN; 
for eta_p = 0.0:.1:7; 
A3bar=x(size(t,1),3); 
A4bar= [A4bar;A3bar]; 
place_holder_eta_p = 0:.1:7.1; 
hold on 
plot(place_holder_eta_p,A4bar,'-k','linewidth',1); 

我得到的原始代碼的錯誤是矢量的不相等。我試圖設置place_holder_eta_p以與eta_p匹配,並且不起作用。它過去只使用上面的代碼,所以我不確定發生了什麼。

任何想法或建議?也許更重要的是,讓我知道是否有任何額外的信息,我應該提供。

謝謝大家。

+0

請發佈一個更完整的例子 - 至少包括整個循環直到'結束'。 –

+0

這是什麼,你期望在第一個例子中發生,沒有發生?在第二個例子中,正如你所說'place_holder_eta_p'具有不同的長度,那麼爲什麼你要這麼做呢? – carlpett

回答

2

我懷疑你不需要for循環來做你想做的事情。事實上,這是因爲您將每個單獨的點繪製爲自己的圖形,以便在圖形中獲得不相關的點。在任何情況下,您都沒有顯示在循環中如何使用變化的變量eta_p

的代碼應該是什麼樣子的基本結構是這樣的:

eta_p = 0:0.1:7; 
N  = length(eta_p); 
A4bar = Zeros(1, N);  % same length as eta_p 
% set up your other variables 

% calculate the values in A4bar 
% it might look like 
% for i = 1:length(eta_p) 
%  A4bar(i) = interesting_function(eta_p(i), A3bar, x, t); 
% end 

plot(eta_p, A4bar, '-k', 'linewidth', 1); 

我不知道如何設置你的其他變量A3barxt,我不能告訴你需要在中間部分計算A4bar的值,而不需要任何附加信息。

重要的事情需要注意的是

  1. eta_pA4bar都是大小[1 N](用於plot命令所需)
  2. plot命令發生一次任何循環,而不是在它裏面,以後你已經計算出全部的值爲A4bar
+0

+1。請注意,如果for for循環非常緩慢,並且想要查看計算進度(請參閱一個接一個地點),則您可以*在循環中有'plot'。從「eta_P」和「A4bar」開始,都是[1 N]個NaN數組,然後逐步填充數據。確保*不*使用'全部持有'或'持有'的圖形,然後''繪圖'總是替換上一個繪圖。您還需要在循環內的plot之後添加'drawnow'以實際看到任何東西... –

+1

繼@Jonas評論之後,您實際上可以更新現有的繪圖,而不是使用set(h,'XDataSource',' eta_p','YDataSource','A4bar');'然後調用'refreshdata(h);'當你更新'A4bar'時。在開始計算'A4bar'的循環之前,應該調用變量'h = plot(eta_p,A4bar,'-k','linewidth',1);'如果N非常大(這種情況下它不是太大),這比製作新的圖更快。 –

+0

非常感謝大家的幫助,尤其是對@Brian L.我非常感謝您花費在此上的時間來幫助我 – Tim