赋值具有比非单例下标更多的非单例rhs维度

时间:2017-04-10 16:13:33

标签: matlab

抱歉,我是matlab的新手,想知道是否有人可以帮助我,

我正在写代码,

    M= inital_conditions
time_vals = start_time:delta_t:end_time;
for iidx = 1 : length(time_vals)
  i = time_vals(iidx);

  new_conc = old_conc +  delta_t*EQN(old_conc);
  k(:,iidx)= new_conc;
  old_conc=new_conc;
end

我不断得到错误Assignment的非单例rhs维度比非单例下标更多。

我使用了size()并且意识到k(:,iddx)是1 X 9而new_conc是1 x 8.有没有人可以建议我可以平衡双方?

由于

EQN脚本

function output= EQN(M)

M = [90 90 90 90 90 90 90 90 90 90 90 90 90 90 90];
k1=1;
k2=1;
k3=1;
k4=1;
k5=1;
k6=1;
k7=1;
k8=1;
k9=1;
k10=1;
k11=1;
k12=1;
k13=1;
k14=1;
%k15=1;


output(1,1) = k14-k5*M(1)*M(2)-k4*M(1)*M(4)%-k1*M(5)*M(6)));
output(2,1) = -k5*M(1)*M(2);
output(3,1) = k5*M(1)*M(2);
output(4,1) = k13*M(14)-k3*M(9)*M(4)-k3*M(9)*M(4);
output(5,1) = k4*M(1)*M(4)- k1*M(5)*M(6);
output(6,1) = k10-k1*M(5)*M(6);
output(7,1) = k1*M(5)*M(6)-k2*M(7);
output(8,1) = k2*M(7)-k14*M(8);
output(9,1) = k11-k3*M(9)*M(4);
output(10,1) = k3*M(9)*M(4);
output(11,1) = 0;
output(12,1) = k6*M(10)*M(11)-k7*M(12);
output(13,1) = k7*M(12)-k12*M(13);
output(14,1) = k12*M(13)-k13*M(14);
output(15,1) = k12*M(13);

1 个答案:

答案 0 :(得分:0)

看来您的主要问题是您是意外automatic implicit expansion的受害者,这是MATLAB R2016b中添加的内容。考虑这个例子:

>> a = 1:10;      % Row vector, 1-by-10
>> b = (1:10).';  % Column vector, 10-by-1
>> c = a+b

c =

     2     3     4     5     6     7     8     9    10    11
     3     4     5     6     7     8     9    10    11    12
     4     5     6     7     8     9    10    11    12    13
     5     6     7     8     9    10    11    12    13    14
     6     7     8     9    10    11    12    13    14    15
     7     8     9    10    11    12    13    14    15    16
     8     9    10    11    12    13    14    15    16    17
     9    10    11    12    13    14    15    16    17    18
    10    11    12    13    14    15    16    17    18    19
    11    12    13    14    15    16    17    18    19    20

请注意,结果不是 ab的元素和的十元素向量。当您的输入不同(但compatible)尺寸时,MATLAB会自动复制必要的尺寸以使它们匹配。在以前的版本中,这只会抛出一个错误,告诉您由于它们的大小不同而无法添加行向量和列向量。

修复?确保您对EQN(当前显示为行向量old_conc)的输入与输出(当前是列向量)的大小相同。将old_conc(1乘15矢量)添加到EQN的输出(15 x 1矢量)会使结果new_conc成为15 x 15矩阵。 如果您想避免隐式扩展,您必须非常小心地检查您的阵列在较新版本的MATLAB中是否具有匹配的大小!

...您还有一个问题,即您使用的size功能错误。如果您想要变量new_conc的大小,则为size(new_conc)。如果键入size new_conc,则会得到命令行参数字符串“new_conc”的大小,这是一个1乘8的字符数组。