抱歉,我是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);
答案 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
请注意,结果不是 a
和b
的元素和的十元素向量。当您的输入不同(但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的字符数组。