使用Parfor从矢量创建矩阵

时间:2014-11-16 10:16:02

标签: c++ matlab for-loop iteration parfor

我是Matlab的新手,非常感谢任何可能的帮助!

我正在运行模拟,因此每次运行模拟结果都会有所不同。我想收集分析结果。

例如,在第一次模拟运行期间,血浆凝血因子的水平可能会在5小时内变化: R(1)= [1.0 0.98 0.86 0.96 0.89]

在第二轮中,每个时间段的水平可能略有不同,例如。 R(2)= [1.0 0.95 0.96 0.89 0.86]

我想(也许通过使用parfor函数)来创建矩阵,例如。 R = [1.0 0.98 0.86 0.96 0.89      1.0 0.95 0.96 0.89 0.86]

我遇到了一些问题,范围从“在赋值A(I)= B中,B和I中的元素数量必须相同”才能获得0或1的矩阵(取决于我用于预分配的内容) )。

我需要模拟运行大约10000次才能收集有意义的结果。

有人可以建议如何实现这一目标吗?对于像我这样熟悉Matlab的人,我们非常感谢详细的指导或(半)完整的代码。

提前致谢!

这是我的实际代码,正如您所看到的,有4个变量在744小时(31天)内变化,我想单独收集:

Iterations = 10000;
PGINR = zeros(Iterations, 744);
PGAmount = zeros(Iterations, 744);
CAINR = zeros(Iterations, 744);
CAAmount = zeros(Iterations, 744);

for iii = 1:Iterations
    [{PGINR(iii)}, {PGAmount(iii)}, {CAINR(iii)}, {CAAmount(iii)}] = ChineseTTRSimulationB();
end

filename = 'ChineseTTRSimulationResults.xlsx';
xlswrite(filename, PGINR, 2)
xlswrite(filename, PGAmount, 3)
xlswrite(filename, CAINR, 5)
xlswrite(filename, CAAmount, 6)

2 个答案:

答案 0 :(得分:0)

你正在寻找这样的东西吗? 我简化了一些代码以便更好地理解并添加了一些虚拟数据,函数。

<强>的main.m

Iterations  = 10;
PGINR       = zeros(Iterations, 2);
PGAmount    = zeros(Iterations, 2);

%fake data
x = rand(Iterations,1);
y = rand(Iterations,1);

parfor iii = 1:Iterations
    [PGINR(iii,:), PGAmount(iii,:)] = ChineseTTRSimulationB(x(iii), y(iii));
end

<强> ChineseTTRSimulationB.m

function [PGINRi, PGAmounti] = ChineseTTRSimulationB(x,y)
    PGINRi       = [x + y, x];
    PGAmounti    = [x*y, y];
end

答案 1 :(得分:0)

将每个parfor-result保存在单元格中,稍后再合并。

Iterations = 10000;
PGINR = cell(1, Iterations);
PGAmount = cell(1, Iterations);
CAINR = cell(1, Iterations);
CAAmount = cell(1, Iterations);

parfor i = 1:Iterations
    [PGINR{i}, PGAmount{i}, CAINR{i}, CAAmount{i}] = ChineseTTRSimulationB();
end

PGINR = cell2mat(PGINR); % 1x7440000 vector
%and so on...