plot Vectors必须是相同的长度

时间:2014-05-23 22:26:33

标签: matlab plot figure

这是我的代码

po=0.21; %presuree of oxigen atm
ph=1;  %presurre of hydorgen atm
t=0.018; %mem tickness cm 
F=96487;   %C/mol
R=8.314471;      % gas confident J/K Mol
e1=-0.948;         %v act confident
e2=0.00312;         %v act confident
e3=7.6*(10^(-5));     %v act confident
e4=-1.93*(10^(-4));    %v act confident
n=2;      %number of electron
anda=14;   %landa
b=8;  %confident of V consentration cm^2/Amp
A=4; %cell active area cm^2 and i is current density Amp/Cm^2
r=0.2114
f=1;
j=1;
for T=333:10:363
    Co=((po)/(5.08*(10^(6))*exp((-498/T))))
for i=0:0.01:1
    v1(j,f)=-[(e1)+(e2*T)+(e3*T*log(Co))+(e4*T*log(i*A))]
    f=f+1
    end
    j=j+1
end
c=1;
h=1
for T=333:10:363
    z=(0.005139*(anda)-(0.00326))*exp((1268*((1/303)-(1/T))))
    for i=0:0.01:1
    v2(h,c)=i*(t/z)
    c=c+1
    end
h=h+1
end
d=1;
u=1;
for T=333:10:363
    a1=(1.1)*(10^(-4))-((1.2*10^(-6))*(T-273))
    for i=0:0.01:1
  v3(u,d)=a1*exp(b*i)
  d=d+1
    end
u=u+1
end
q=1;
for T=333:10:363
    E=1.229-(0.85*(10^(-3))*(T-298.15))+4.3085*(10^(-5))*T*([log(ph)+(1/2)*log(po)])
  V(q)=E-v1(j)-v2(h)-v3(u)
  q=q+1
end
T=333:10:363
i=0:0.01:1
plot(i,V,'-')

我希望有一个数字,X标签是i,Y标签是v,我们可以看到不同温度(T)中V的变化。但我面对的错误是"情节 矢量必须是相同的长度。"

如何解决此错误?

2 个答案:

答案 0 :(得分:0)

使用size(i) size(V)检查x,y向量的维度。我应该是一个向量,大小应该是[1 Len]或[Len 1]。确保V的大小也是[Len,xxx]或[xxx,Len],因此它们的长度相同,您可以绘制它。另外,确保我和V具有相同的长度' Len'在相同的维度中,否则您可以使用点引号运算符V.'来获得转置。

答案 1 :(得分:0)

史蒂文提到,你的尺寸不匹配。更熟悉代码中解释的几个Matlab数组运算符(:和。)可以缩短和澄清代码。

我们开始之前的家务管理:

clc % clear command window
close all % close all figure windows
clear all % clear all variables in workspace
dbstop if error % program stops in debugger if error occurs

声明所有变量:

    po=0.21; %presuree of oxigen atm
    ph=1;  %presurre of hydorgen atm
    t=0.018; %mem tickness cm 
    F=96487;   %C/mol
    R=8.314471;      % gas confident J/K Mol
    e1=-0.948;         %v act confident
    e2=0.00312;         %v act confident
    e3=7.6*(10^(-5));     %v act confident
    e4=-1.93*(10^(-4));    %v act confident
    n=2;      %number of electron
    anda=14;   %landa
    b=8;  %confident of V consentration cm^2/Amp
    A=4; %cell active area cm^2 and i is current density Amp/Cm^2
    r=0.2114;

将T用作1x4并首先执行此操作 所有这些都将是1x4之后         T = 333:10:3​​63; 请注意使用dot operator进行逐点操作

    Co = ((po)./(5.08e6*exp((-498./T))));
    z = (0.005139*(anda)-(0.00326))*exp((1268*((1/303)-(1./T))));
    a1 = (1.1)*(10^(-4))-((1.2*10^(-6))*(T-273));
    E = 1.229-(0.85*(10^(-3))*(T-298.15))+4.3085*(10^(-5))*T*([log(ph)+(1/2)*log(po)]);

现在让我们做所有涉及i的部分。 我们不是从i = 0开始,因为它给出了Nan / Inf结果         I = 0.01:0.01:1;

如果您愿意,可以使用矩阵乘法来执行此操作。它在这里用for循环实现,因为这更容易理解。

    for idx = 1:length(T)
        % each of these will be a 101x1 vector
        v1 =-(  e1 + (e2*T(idx)) + (e3*T(idx)*log(Co(idx))) + (e4*T(idx)*log(i*A))  );
        v2 = i*(t/z(idx));
        v3 = a1(idx)*exp(b*i);
        V(idx,:) = E(idx) - v1 - v2 - v3;
    end

V=(idx,:)行中,我们使用colon operator将101x1向量移入V的idx行。

现在我们可以绘制答案!

    plot(i,V,'-')
    % now we'll do a little labeling
    hYLabel = ylabel('V');
    hXLabel = xlabel('i');
    hTitle = title('Your title here');