Как использовать счетчик внутри Parfor Matlab - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть следующий цикл, и я получаю сообщение об ошибке MachPoints: "Valid indices for MachPoints are restricted in PARFOR loops" и parfor cannot run due to the way the variable is used

some previous code declaring A,B,C..

if Case == 4
    rng(1);

Initial_Vx        = some number
Initial_Vy        = some number
Initial_Vz        = some number

Initial_X         = some number
Initial_Y         = some number
Initial_Z         = some number

WVelocity_X       = some number
WVelocity_Y       = some number
WVelocity_Z       = some number

WError_X          = some number
WError_Y          = some number
WError_Z          = some number

parfor Monte = 1:5


    Wind_Velocity     = [WVelocity_X WVelocity_Y WVelocity_Z];      
    Wind_Error        = [WError_X WError_Y WError_Z];               


    Launch_Error      = some number;                                                   

    Initial_Velocity  = [Initial_Vx Initial_Vy Initial_Vz]*(Launch_Error/100); 
    Initial_Position  = [Initial_X Initial_Y Initial_Z];                       

    Rotation          = 0.00;                                                 

    Global_Consts      = {A, B, C, D, E, F};
    Initial_Conditions = {Initial_Velocity, Initial_Position, Wind_Velocity, Wind_Error};


    Fig_Num = 1;
    k = 1;   
    for MachP = [0.5:0.01:0.95, 1.2:0.01:3.5]   
        if MachP < 1.2
            [Xcp_Total, Lift_Canard, MRoll_Canard, My_Canard, Sim_Parameters] = FIN_SUB(MachP);
        else
            [Xcp_Total, Lift_Canard, MRoll_Canard, My_Canard, Sim_Parameters] = FIN_SUP(MachP);
        end
        Cln_alpha_M(k)  = Sim_Parameters(1);
        Clc_alpha_M(k)  = Sim_Parameters(2);
        Clw_alpha_M(k)  = Sim_Parameters(3);
        Clb_alpha_M(k)  = Sim_Parameters(4);
        MachPoints(k)   = MachP;
        k = k + 1;
    end
    Parameters = Sim_Parameters(5:25);   
    [Position,Initial_Conditions,Tgo] = GFunction(MachPoints,Cln_alpha_M,Clc_alpha_M,Clw_alpha_M,Clb_alpha_M,Parameters);

    Final_Position(1,:) = Position{1,1}(end,:);
    Whole_Traj{Monte} =  Position{1,1};
    Miss(Monte) = sqrt(sum((Final_Position(1,:)).^2));

    Delta_X(Monte) = Final_Position(1,1) - 0;
    Delta_Y(Monte) = Final_Position(1,2) - 0;

    IC{Monte} = Initial_Conditions;
    Tgo_Data{Monte} = Tgo{1,1}(:,1);

end

Mean_Miss = mean(Miss);

end

Спасибо

...