在MATLAB中绘制FOR循环中的多行

时间:2012-04-30 03:19:29

标签: matlab

好的,所以这听起来很容易,但无论我尝试了多少次,我仍然无法正确绘制。我在同一个图表上只需要3行,但仍有问题。

iO = 2.0e-6;
k = 1.38e-23;
q = 1.602e-19;


for temp_f = [75 100 125]
    T = ((5/9)*temp_f-32)+273.15;
        vd = -1.0:0.01:0.6;
        Id = iO*(exp((q*vd)/(k*T))-1);
        plot(vd,Id,'r',vd,Id,'y',vd,Id,'g');
        legend('amps at 75 F', 'amps at 100 F','amps at 125 F');    

end;       

ylabel('Amps');
xlabel('Volts');
title('Current through diode');

现在我知道目前正在使用的绘图功能不起作用,并且某种变量需要设置如(vd,Id1,'r',vd,Id2,'y',vd,Id3,'g “);但是我真的无法理解改变它的概念并且正在寻求帮助。

1 个答案:

答案 0 :(得分:3)

您可以使用“保持”功能使每个绘图命令在与最后一个窗口相同的窗口上绘制。

最好跳过for循环,然后只需一步完成。

iO = 2.0e-6; 
k = 1.38e-23; 
q = 1.602e-19; 

temp_f = [75 100 125];
T = ((5/9)*temp_f-32)+273.15;

vd = -1.0:0.01:0.6;
% Convert this 1xlength(vd) vector to a 3xlength(vd) vector by copying it down two rows.
vd = repmat(vd,3,1);

% Convert this 1x3 array to a 3x1 array.
T=T';
% and then copy it accross to length(vd) so each row is all the same value from the original T
T=repmat(T,1,length(vd));

%Now we can calculate Id all at once.
Id = iO*(exp((q*vd)./(k*T))-1);

%Then plot each row of the Id matrix as a seperate line. Id(1,:) means 1st row, all columns.
plot(vd,Id(1,:),'r',vd,Id(2,:),'y',vd,Id(3,:),'g');
ylabel('Amps'); 
xlabel('Volts'); 
title('Current through diode');

这应该得到你想要的。