2011-09-07 56 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