Matlab错误:左侧被初始化并且具有空索引范围。但是,右侧返回了一个或多个结果

时间:2015-11-17 06:16:14

标签: matlab

我正在处理前一位开发人员编写的代码。他编写的这段代码可供我使用:

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_ZZ应该是[0;0]这一事实。我也知道这个代码storageModel{m_Z,1} = Z;之前工作的事实,所以Z的赋值不是错误的。这是我初始化cellArray错误的方式。你能帮忙找出初始化它的正确方法,或者至少在解释错误信息的含义时帮忙吗?我已经用Google搜索了错误消息,但没有任何帮助。

p.s:原作者试图将一堆矩阵存储在cellArray的一列中。每列中的矩阵表示特定运动模型所需的值。

更新:我的事实' m_Z是[0; 0]矩阵,是错误的。

1 个答案:

答案 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!