Matlab错误:左侧已初始化,索引范围为空。但是,右侧返回一个或多个结果

Matlab错误:左侧已初始化,索引范围为空。但是,右侧返回一个或多个结果,matlab,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

我正在使用以前的开发人员编写的代码。他编写的代码可供我使用:

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的文件。有人告诉我他忘了提交,而且没有人有副本

我尝试过如下方式初始化该文件:

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;
storageModel{m_Z,1} = Z;
storageModel{m_dT,1} = T;
但是在运行它时,在我上面发布的第一段代码中,我得到了一个错误:

??? 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]。我还知道一个事实,这个代码存储模型{m_Z,1}=Z;之前工作过,所以Z的赋值不是错误的。我初始化光线的方式是错误的。您能否帮助找出正确的初始化方法,或者至少解释错误消息的含义?我用谷歌搜索了错误信息,但没有找到任何有用的信息

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

更新:我关于m_Z是[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;。初始化只需要这么多。代码的各个部分会自动添加更多行,如下所示:

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;
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就没有问题了;反之亦然,Z=storageModel{m_Z,1}

谢谢你,丹

如果m_Z是[0;0],那么storageModel{m_Z,1}在MATLAB中无效。。。所以你的一个事实是错误的。我只能通过尝试storageModel{[],1}=。。。换句话说,问题在于m_Z的值是空的,即,[]m_Z实际上是一个指示器,表明它是Z矩阵存储在storageModel中的位置。如果m_Z最初不应该是一个矩阵,那么我假设m_Z应该是一个整数,指示单元格数组的哪一行包含Z矩阵?基本上,我必须能够使用这个storageModel{m_Z,1}=Z,在任何时间、任何次数将Z矩阵分配给它;也可以随时得到Z矩阵,使用Z=storageModel{m_Z,1};因此,在得到错误后检查m_Z的值。我敢打赌是[]在这种情况下,就是你的错误。您需要修复分配给Mz的代码