matlab如何把for循环生成的数据画在一张图上

问题描述:

matlab如何把for循环生成的数据画在一张图上
用matlab ode solver解了一组微分方程,想把两个因变量的结果绘制在一张图上.但hold不管写在哪里都hold 不住.代码如下:
for Tc = 2000:100:2100
for Tm = 1900:50:1900
cons = 365 * 24 * 3600;
[t,X] = mainU(Tm,Tc); %这里是ode solver得到的,t是自变量时间,范围一直都是0~4.5亿年(换算成 % 秒),但是因为使用了ode solver所以t的step是matlab ode solver自己选的
% 对于不同的Tc 和Tm,t的step是不同的.但范围不变.
title('Upper & Lower Mantle Temp (K)');
plot(t,X(:,1),'-.','color','r','LineWidth',2);
hold on
plot(t,X(:,2),'-','color','b','LineWidth',2);
hold on
%下面是legend和坐标轴设定之类应该不影响
legend('Tu','Tc');
ylabel('Tu & Tc (K)');xlabel('Time (Ga)');
set(gca,'XTick',[0 (10^9*cons) (2*10^9*cons) (3*10^9*cons) (4*10^9*cons) (4.5*10^9*cons)]);
set(gca,'XTickLabel',{'4.5','4','3','2','1','0'});
end
hold on
end
上面的3个hold on都不管用,每次Tc或者Tm变化的时候都会画在一张新的figure上.
在线等求解……………………
跪谢…………………………
1个回答 分类:综合 2014-10-25

问题解答:

我来补答
1.请问你的图上最终要保留几组曲线?我理解是,对每组(Tc,Tm),都能解出两条曲线,这称为一组.
2.plot(t,X); 这一句话就可以同时绘制出同一组内的两条曲线,不必分开画.
3.出于调试的方便,建议把legend那一段先去掉.
4.如果没有特殊的必要,建议把所有曲线全部计算完毕后,再另起一个for循环画图.这样一边算一边画效率会比较低.
再问: for Tc = 2000:100:2100 for Tm = 1900:50:1900 [t,X] = mainU(Tm,Tc); plot(t, X); hold on end hold on end 仍旧是每组(Tc,Tm)画出一个单独的图,因为是想看其他量变化时Tc Tm曲线整体的变化所以希望能把所有曲线画在同一图。不知是哪里出了问题?
再答: close all;
figure; hold on
for Tc = 2000:100:2100
    for Tm = 1900:50:1950
        [t,X] = mainU(Tm,Tc);
        plot(t, X);
    end
end
hold off另外还有一种可能,X们彼此完全重合。那么画出来也看起来只有一条线。

再问: 感谢,已经解决了。非常感谢!
再答: 祝贺~
 
 
展开全文阅读
剩余:2000