关于for循环,读取数据和绘图的MATLAB查询

时间:2010-12-24 19:27:27

标签: matlab

我是使用matlab的完全新手,如果有一种方法可以优化我的代码,我正在努力解决问题。基本上我有来自模型输出的数据,我需要使用matlab绘制它们。此外,我有参考数据(95%置信区间),我在同一图表上绘制,以了解模型输出和参考数据的接近程度。

就模型输出而言,我有几千个文件(数字顺序),我在循环和绘图中打开。我遇到的问题是,我是否可以预处理数据然后稍后绘图 - 以节省时间。我尝试这个问题时似乎遇到的问题是,我有一个不会出现或不准确的传奇。

我的代码(如果它不优雅就会道歉):

   fn= xlsread(['tbobserved' '.xls']); 
   time= fn(:,1); 
   totalreference=fn(:,4);  
   totalreferencelowerci=fn(:,6);  
   totalreferenceupperci=fn(:,7);  
   figure  
   plot(time,totalrefrence,'-', time, totalreferencelowerci,'--', time, totalreferenceupperci,'--');  
   xlabel('Year');  
   ylabel('Reference incidence per 100,000 population');  
   title ('Total');  
   clickableLegend('Observed reference data', 'Totalreferencelowerci',  'Totalreferenceupperci','Location','BestOutside');  
   xlim([1910 1970]);  
   hold on  
   start_sim=10000;  
   end_sim=10005;  
   h = zeros (1,1000);  
   for i=start_sim:end_sim %is there any way of doing this earlier to save time?  
   a=int2str(i);  
   incidenceFile =strcat('result_', 'Sim', '_', a, 'I_byCal_total.xls');  
   est_tot=importdata(incidenceFile, '\t', 1);  
   cal_tot=est_tot.data;  
   magnitude=1;  
   t1=cal_tot(:,1)+1750;  
   totalmodel=cal_tot(:,3)+cal_tot(:,5);  
   h(a)=plot(t1,totalmodel);  
   xlim([1910 1970]);  
   ylim([0 500]);  
   hold all  
   clickableLegend(h(a),a,'Location','BestOutside')    
   end  

基本上我希望有一种方法可以读取数据然后稍后绘制 - 即。优化代码。

我希望你能帮忙。

感谢。

熔点

1 个答案:

答案 0 :(得分:2)

关于您的问题

  

我有一个传说要么没有   出现或不准确。

查看代码中的以下摘录。

...
h = zeros (1,1000);  
...   
a=int2str(i);  
...
h(a)=plot(t1,totalmodel);  
...

您使用字符数组作为索引。您应该使用h(a)而不是h(i)。 MATLAB似乎将字符数组 a转换为double,如以下示例所示a = 10;

>> double(int2str(10))
ans = 49    48

而不是h(10),情节句柄将被分配给h([49 48]),这不是您的意图。