matlab 如何在for循环中运行函数10000次并记录3个单独的输出

4bbkushb  于 2022-11-30  发布在  Matlab
关注(0)|答案(1)|浏览(516)

我在MATLAB工作,我对它还很陌生。
我试图导入一个函数,并在for循环中运行它10,000次。该函数产生3个独立的输出,我需要保存10,000次试验中的每一次输出,这样我就可以从每一次试验中得出平均值。然而,我的代码只是为每一次试验产生一个输出。

`for trials = 1:10000
[S,M,L] = crayonBreak(); % function to run
Sl = [S; trials]; % list for all S values
Ml = [M; trials]; % list for all M values
Ll = [L; trials]; % list for all L values
end`
`

这是我现在使用的for循环,我不认为我在列表中记录的值是正确的,但是我不知道我做错了什么。

gwbalxhn

gwbalxhn1#

首先,让我们创建一个虚拟函数,以便正确测试

crayonBreak = @()deal(rand,rand,rand);  %This is just a function that will generate three outputs.

原始代码在每次循环时覆盖Sl值,因此最终值是crayonBreal的最后结果加上数字10000。

for trials = 1:10000
    [S,M,L] = crayonBreak(); % function to run
    Sl = [S; trials]; % list for all S values
    Ml = [M; trials]; % list for all M values
    Ll = [L; trials]; % list for all L values
end

%>> Sl
%Sl =
%         0.477917969692359
%                     10000

这个代码的最小的调整是在每次循环中将最近的结果和之前的结果连接起来。看起来像这样。

Sl=[];  %Iniitalize the outputs to an emmpty array
Ml=[];
Ll=[];
for trials = 1:10000
    [S,M,L] = crayonBreak(); % function to run
    Sl = [Sl; S]; % At leash loop, concatenate the new value to the growing array
    Ml = [Ml; M]; % 
    Ll = [Ll; L]; % 
end

%>> Sl
%ans =
%         0.920537104151778
%          0.83184440865223
%         0.567461009088077
%         ...

一个更好的实现是首先预分配输出,然后在执行时插入结果。

nTrials = 10000;
Sl=nan(nTrials,1);  %Iniitalize the outputs to a properly sized array of NaNs
Ml=nan(nTrials,1);
Ll=nan(nTrials,1);
for trials = 1:10000
    [S,M,L] = crayonBreak(); % function to run
    Sl(trials) = S; % At leash loop, insert the value into the output
    Ml(trials) = M; % 
    Ll(trials) = L; % 
end

%>> Sl(1:5)
%ans =
%         0.779202300519089
%         0.510303051476698
%         0.415940683606639
%         ...

相关问题