在结构中存储变量名称

时间:2015-03-11 16:29:05

标签: matlab

我正在处理一个相当大的优化问题(使用MOSEK)。为了提醒自己这个问题中的决策变量,我决定尝试将变量名存储在结构as desribed by MOSEK的单元格数组中。但是,我不确定如何做到这一点。我的代码的相关片段列在下面:

JiSet = 1:6; TiSet = [7 8]; nL = length(TiSet); 
P = struct;
P.names.var{1} = 'gamma_i(k+1)';    % my first constraint
P.names.var{2:1+nL,1} = cellstr(strcat('nu_',int2str(TiSet(:)),'(k+1)')); % a series of constraints of varying length

当我运行上面的代码时,我收到以下错误:

The right hand side of this assignment has too few values to satisfy the left hand side.

但是,如果我在命令窗口中输入strcat('nu_',int2str(TiSet(:)),'(k+1)'),它会显示ans变量,该变量是2x1单元格(根据需要)。如何将此单元格中的值分配给2:1+nL,1单元格中的P.names.var条目?

2 个答案:

答案 0 :(得分:2)

尝试使用圆括号( )的相同行,用于选择单元格集。

P.names.var(2:1+nL,1) = cellstr(strcat('nu_',int2str(TiSet(:)),'(k+1)'));

MyCell{1:2}指的是细胞的文字内容。

MyCell = {10,24,-60};
MyCell{1:2}

ans =

    10


ans =

    24

MyCell(1:2)指的是一组细胞。

MyCell(1:2)

ans = 

    [10]    [24]

由于cellstr(strcat('nu_',int2str(TiSet(:)),'(k+1)'));是一组细胞,您需要将其分配给一组细胞,P.names.var(2:1+nL,1);

答案 1 :(得分:2)

问题在于如何在最后一行构建作业。右侧创建单个值,即2x1单元阵列。但是,左手指的是两个单独的字段。此行为可能是由于单元阵列的性质导致的,可能除了每个单元格中的不同数据类型之外。设置单元阵列以将右侧的任何内容分配给左侧的单个单元。您可以通过简单的修改来解决这个问题:

P.names.var(2:1+nL,1) = cellstr(strcat('nu_',int2str(TiSet(:)),'(k+1)'));

这利用了"数组索引"而不是"细胞索引"。