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

Matlab 错误:在赋值A(I)=B中,B和I中的元素数必须相同,matlab,Matlab,我被K2卡住了,因为它导致了这个错误: 在赋值A(I)=B中,B和B中元素的数量 我一定是一样的 我运行了调试器,发现只有J4是一个向量,而其他变量都是标量 如何解决此错误以获得绘图 这是我运行的代码 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

我被K2卡住了,因为它导致了这个错误:

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

我运行了调试器,发现只有
J4
是一个向量,而其他变量都是标量

如何解决此错误以获得绘图

这是我运行的代码

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)
h1=1*10^-6;
h2=(10:10:1500)*10^-6;
a=62.5*10^-6;
b=a+h1;
c=b+h2;
α1=0.55*10^-6;
α2=17.2*10^-6;
α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;

虽然(n我运行了您的代码,发现用于计算
K2
的向量的维数不兼容,例如
J2
J6
中的每一个都是一行乘两列的向量,您不能将它们相乘。这也适用于其他乘法。根据您要计算的内容,您应该将它们转置r在每次乘法中取一个

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


为了重述一个答案中已经说过的话,我将如何修改代码:

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)
    K1
    K2
    J1
    J2
    ,等等,以便只进行标量运算
  • 我已经将不需要的东西移出了
    for
    循环
这给出了以下曲线图(以八度为单位)


我不相信你…J1,…J4,J5,J6都是相同的大小,无论是标量还是向量。在
(J2*J6-J3*J5)/(J2*J4-J1*J5)
中,你是想得到向量积,还是你的意思是
J2(n)*J6(n)
等等?对于点积,您需要将行向量乘以列向量。这不是问题的一部分,但可以尝试使用
For(n=1:150)
这样您就不需要计数器了?您可能还需要考虑
Sr,Sz,St
是否应该累加。否则,使用
Km(n)=St(n)+Sz(n)+Sr n;
(或者简单地在循环外进行完整的添加。).Btw,我喜欢人们正确定义他们的常数。这使它比方程式中的数字更具可读性。感谢你们的贡献和帮助。他们非常感激。我很感激。非常感谢@am304的巨大努力。这正是我试图实现的情节。我非常感激。很高兴提供帮助。如果答案有助于解决您的问题,请接受。这是一个巨大的问题,您让我度过了一个周末。当我想要获得相同的绘图,但具有不同的'h1(h1=1:12)值时,情况如何*1e-6'Hi@am304非常感谢您之前的支持。请允许我分析温度敏感性与其他材料参数(E1vsKm、U1vsKm、alpha_1 vs Km)的变化趋势。我尝试使用您使用的类似语法,但我在作业A(I)中发现此错误=B,B和I中的元素数必须相同。错误为==>39 J1(n)=E2*(B^2-a^2)*(1-U1)-E1*a^2*(1-U2)-E1*B^2*(1+U2);如果你能帮我解决至少一个问题,我将不胜感激。谢谢汉克先生的努力,我非常感谢你的贡献,我已经能够解决它了。Cheers@Comsol如果这对你有帮助,接受它作为回答