我正在处理前一位开发人员编写的代码。他编写的这段代码可供我使用:
xDim = 4; zDim = 2;
storageModel{m_Z,1} = Z;
storageModel{m_dT,1} = T;
if k==1, %---assign values for first scan
if monte==1,
storageEstimates = [];
storageHeadings = [];
end
storageModel{m_X, 1} = X;
initializeOnlyTimeDependentMatrices = 0;
storageModel{m_modelCode, 1} = mm_CV;
[storageModel] = InitializeMotionModel(storageModel, k, initializeOnlyTimeDependentMatrices, xDim, zDim);
else if previousT ~= T,
initializeOnlyTimeDependentMatrices = 1;
[storageModel] = InitializeMotionModel(storageModel, k, initializeOnlyTimeDependentMatrices, xDim, zDim);
end
end
[storageModel] = calculate(storageModel(:,1), stepCode);
X = storageModel{m_X, 1};
但版本控制中缺少初始化名为storageModel
的cellArray的文件。我告诉他忘记犯了它,没有人有副本。
我尝试像这样初始化cellArray:
m_Z = [0;0];
m_dT = [];
m_v = [0;0];
m_P = [0 0 0 0;0 0 0 0;0 0 0 0;0 0 0 0;];
storageModel{1,1} = m_Z;
storageModel{2,1} = m_dT;
storageModel{3,1} = m_v;
storageModel{4,1} = m_P;
但是在运行它时,在我上面发布的第一段代码中,我收到错误:
??? The left hand side is initialized and has an empty range of indices.
However, the right hand side returned one or more results.
Error in ==> CalculationHandler at 7
storageModel{m_Z,1} = Z;
我知道m_Z
和Z
应该是[0;0]
这一事实。我也知道这个代码storageModel{m_Z,1} = Z;
之前工作的事实,所以Z
的赋值不是错误的。这是我初始化cellArray错误的方式。你能帮忙找出初始化它的正确方法,或者至少在解释错误信息的含义时帮忙吗?我已经用Google搜索了错误消息,但没有任何帮助。
p.s:原作者试图将一堆矩阵存储在cellArray的一列中。每列中的矩阵表示特定运动模型所需的值。
更新:我的事实' m_Z
是[0; 0]矩阵,是错误的。
答案 0 :(得分:0)
事实证明,m_Z
等实际上只是普通数字,表示元素在单元格数组中的位置。所以我所要做的就是:
m_dT = 1;
m_X = 2;
m_F = 3;
m_G = 4;
m_v = 5;
m_P = 6;
m_Q = 7;
m_H = 8;
m_I = 9;
m_w = 10;
m_Z = 11;
正在代码的一部分中初始化单元数组,如storageModel{1,1} = 0;
。初始化只需要这么多。代码的各个部分会自动添加更多行,如下所示:
storageModel{m_Z,1} = Z;
storageModel{m_dT,1} = T;
就像Dan在评论中回答的那样,问题是m_Z
最初被指定为空矩阵,然后我试图将Z
分配给它,这是一个大小为2x1的矩阵。矩阵之间的大小不匹配是错误的原因:
??? The left hand side is initialized and has an empty range of indices.
However, the right hand side returned one or more results.
将正确大小的矩阵分配到storageModel
的第11行(11,因为我保留m_Z = 11;
),然后分配storageModel{m_Z,1} = Z;
或反之亦然{ {1}}。
谢谢Dan!