我只是想知道在每次迭代后是否有一种干净的方式来存储矩阵并使用不同的名称?我希望能够以不同的名称存储每个矩阵(uMatrix),具体取决于我在哪个仿真上,例如Sim1,Sim2等。等等。这样,首先运行Sim1 = uMatrix,然后运行Sim2 = uMatrix第二遍。这样,每次我可以为每个不同的模拟存储不同的uMatrix。

任何帮助将不胜感激,如果这真是一个愚蠢的问题,我们将深表歉意。同样,关于是否可以清除此代码的任何指针也将很不错

我在下面使用的代码

d = 2;
kij = [1,1];
uMatrix = [];
RLABEL=[];
SimNum = 2;

for i =1:SimNum
    Sim = ['Sim',num2str(i)] %Simulation number
    for j=1:d
        RLABEL = [RLABEL 'Row','',num2str(j) ' '];
        Px = rand;
        var = (5/12)*d*sum(kij);
        invLam = sqrt(var);
        u(j) = ((log(1-Px))*-invLam)+kij(1,j);
        uMatrix(j,1) = j;
        uMatrix(j,2) = u(j);
        uMatrix(j,3) = kij(1,j);
        uMatrix(j,4) = Px;
        uMatrix(j,5) = invLam;
        uMatrix(j,6) = var;
    end
    printmat(uMatrix,'Results',RLABEL,'SECTION u kij P(Tij<u) 1/Lambda Var')
end

最佳答案

确实有太多选择。下面介绍以下几种方法中的数据放入和获取数据:

用变量名编码

我确实非常不喜欢这种方法,但这似乎正是您特别要求的。要将uMatrix保存为变量Sim5(第5次运行),请在循环末尾将以下内容添加到您的代码中:

eval([Sim ' = uMatrix;']);  %Where the variable "Sim" contains a string like 'Sim5'


访问数据

listOfStoredDataNames = who('Sim*')
someStoredDataItem = eval(listOfStoredDataNames {1})  %Ugghh
%or of you know the name already
someStoredDataItem = Sim1;


现在,请不要这样做。让我尝试说服您,还有更好的方法。

使用结构

要执行相同的操作,请使用称为(例如)simResults的结构

simResults.(Sim) = uMatrix;


甚至更好

simResults.(genvarname(Sim)) = uMatrix;


访问数据

listOfStoredDataNames = fieldnames(simResults)
someStoredDataItem = simResults.(listOfStoredDataNames{1})
%or of you know the name already
someStoredDataItem = simResults.Sim1


这避免了总是有问题的eval语句,更重要的是使附加代码更易于编写。例如,您可以轻松地将所有simResults传递给函数以进行进一步处理。

使用地图

要使用地图进行相同的存储,请首先初始化地图

simResults = containers.Map('keyType','char','valueType','any');


然后在每次迭代时将值添加到地图

simResults(Sim) = uMatrix;


访问数据

listOfStoredDataNames = simResults.keys
someStoredDataItem = simResults(listOfStoredDataNames{1})
%or of you know the name already
someStoredDataItem = simResults('Sim1')


地图在可用于命名的字符串中稍微灵活一些,如果您愿意的话,它可能是一个更好的解决方案。

使用单元格数组

简单,无意义的结果存储

simResults{i} = uMatrix;


访问数据

listOfStoredDataNames = {};  %Names are Not available using this method
someStoredDataItem = simResults{1}


或者,使用少量的废话

simResults{i,1} = Sim;      %Store the name in column 1
simResults{i,2} = uMatrix;  %Store the result in column 2


访问数据

listOfStoredDataNames = simResults(:,1)
someStoredDataItem = simResults{1,2}

关于matlab - MATLAB在每次迭代中更改矩阵的名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15438464/

10-13 05:43