错误:在赋值A(I)= B中,B和I中的元素数必须相同

时间:2016-05-19 19:12:09

标签: matlab

我在K2上遇到了这个错误:

  

在赋值A(I)= B中,B和中的元素数    我必须是一样的。

我运行了调试器,我发现h1 = 1*10^-6; h2 = (10:10:1500)*10^-6; a = 62.5*10^-6; b = a+h1; c = b+h2; alpha_1 = 0.55*10^-6; alpha_2 = 17.2*10^-6; alpha_3 = 14.2*10^-6; zeta = 6.3*10^-6; P11 = 0.121; P12 = 0.27; neff = 1.456; U1 = 0.17; U2 = 0.32; U3 = 0.31; E1 = 0.74*10^11; E2 = 1.08*10^11; E3 = 1.96*10^11; n = 1; while(n<=150) J1(n) = E2*(b^2-a^2)*(1-U1)-E1*a^2*(1-U2)-E1*b^2*(1+U2); J2(n) = 2*E1*b^2; J3(n) = E1*E2*(b^2-a^2)*(alpha_2 - alpha_1); J4(n) = 2*E3*(c(n)^2-b^2)*a^2; J5(n) = E2*(b^2-a^2)*(1-U3)*b^2+E2*(b^2-a^2)*(1+U3)*c(n)^2-E3*(c(n)^2-b^2)*(1+U2)*a^2-E3*(c(n)^2-b^2)*(1-U2)*b^2; J6(n) = E2*E3*(c(n)^2 - b^2)*(b^2-a^2)*(alpha_2-alpha_3); K1(n) = ((alpha_3-alpha_1)*E3*(c(n)^2-b^2)+(alpha_2-alpha_1)*E2*(b^2-a^2))/(E1*a^2+E2*(b^2-a^2)+E3*(c(n)^2-b^2)); K2(n) = (J2*J6-J3*J5)/(J2*J4-J1*J5); Sr(n) = (neff^2/2)*(P11+P12)*(((1-U1)*K2/E1)-U1*K1); Sz(n) = (1+P12)*(K1-(2*U2*K2/E1)); St(n) = alpha_1+zeta; Km(n) = St+Sz+Sr; n=n+1; end plot(h2,Km) 单独是一个向量,而其他变量都是标量。

如何解决此错误以获得情节?

这是我运行的代码。

 static inline void flush(void addr)
 {
     asm volatile("mcr p15, 0, %0, c7, c6, 1"::"r"(addr));                                              
 } 

2 个答案:

答案 0 :(得分:1)

回顾一下在一个答案中已经说过的内容,以下是我将如何修改代码:

h1 = 1e-6;
h2 = (10:10:1500)*1e-6;
a = 62.5*1e-6;
b = a+h1;
c = b+h2;
alpha_1 = 0.55*1e-6;
alpha_2 = 17.2*1e-6;
alpha_3 = 14.2*1e-6;
zeta = 6.3*1e-6;
P11 = 0.121; 
P12 = 0.27;
neff = 1.456;
U1 = 0.17;
U2 = 0.32;
U3 = 0.31;
E1 = 0.74*1e11;
E2 = 1.08*1e11;
E3 = 1.96*1e11;

% pre-allocate variables
J1 = zeros(size(h2));
J2 = zeros(size(h2));
J3 = zeros(size(h2));
J4 = zeros(size(h2));
J5 = zeros(size(h2));
J6 = zeros(size(h2));
K1 = zeros(size(h2));
K2 = zeros(size(h2));
Sr = zeros(size(h2));
Sz = zeros(size(h2));

for n=1:length(h2)
    J1(n) = E2*(b^2-a^2)*(1-U1)-E1*a^2*(1-U2)-E1*b^2*(1+U2);
    J2(n) = 2*E1*b^2;
    J3(n) = E1*E2*(b^2-a^2)*(alpha_2 - alpha_1);
    J4(n) = 2*E3*(c(n)^2-b^2)*a^2;
    J5(n) = E2*(b^2-a^2)*(1-U3)*b^2+E2*(b^2-a^2)*(1+U3)*c(n)^2-E3*(c(n)^2-b^2)*(1+U2)*a^2-E3*(c(n)^2-b^2)*(1-U2)*b^2;
    J6(n) = E2*E3*(c(n)^2 - b^2)*(b^2-a^2)*(alpha_2-alpha_3);

    K1(n) = ((alpha_3-alpha_1)*E3*(c(n)^2-b^2)+(alpha_2-alpha_1)*E2*(b^2-a^2))/(E1*a^2+E2*(b^2-a^2)+E3*(c(n)^2-b^2));
    K2(n) = (J2(n)*J6(n)-J3(n)*J5(n))/(J2(n)*J4(n)-J1(n)*J5(n));

    Sr(n) = (neff^2/2)*(P11+P12)*(((1-U1)*K2(n)/E1)-U1*K1(n));
    Sz(n) = (1+P12)*(K1(n)-(2*U2*K2(n)/E1));

end    

St = alpha_1+zeta;    
Km = Sz+Sr+St;

plot(h2,Km)

备注:

  • 我使用for循环确保向量长度与h2
  • 一致
  • 我已预先为速度分配变量
  • 我在方程式中添加了(n) K1K2J1J2等各种for,只进行了标量运算< / LI>
  • 我已经把东西从a %>% group_by(ID) %>% mutate(V2 = ifelse(row_number() == 1, 1, 0) + ifelse(row_number() > 1 & V1 <= 1000, 1, 0) + cumsum(ifelse(V1 >= 1000, 1, 0))) 循环移出了不需要在那里

这给出了以下图(在Octave中)

enter image description here

答案 1 :(得分:0)

我运行了您的代码,我发现用于计算K2的向量的维度不兼容,例如J2J6中的每一个都是1行2列向量,您无法将它们相乘。这也适用于其他乘法。根据您要计算的内容,您应该在每次乘法中转置其中一个。

仅供参考:J.'是MATLAB中J的转置版本。

workspace]