Hi all, I am writing a simulation code in MATLAB R2011b. I need it to run for at least 100,000 time steps, preferably more.
Here's the problem I am facing. I have a function call within my parent function. When I run the profiler, it shows that about 23.8% of the total time is spent CALLING the function. For one of my simulation models, the function gets called 715,903 times and the function call takes 174.432 seconds according to the profiler. The called function itself takes 195 seconds to run. My parent function takes 537 seconds.
This is what my function call looks like –
[C] = Decision(k,timeStep,MixedBuffer,c);
Is there any way I can reduce the 174.432 seconds (~3 minutes) which are taken by the function call? I hope I have been descriptive enough, but feel free to ask for more info.
Best, Sumant
Here's the relevant code –
function [C] = Decision(k,timeStep,MixedBuffer,c) %Returns serial number of chosen part.
global PartTableglobal ActivePartsglobal DemandArrivals if(c==1) %For machine 1
I = zeros(1,5); ChoiceMatrix = zeros(1,size(PartTable,2)); vertcat(ChoiceMatrix,PartTable(ActiveParts(serial,1),:)); ChoiceMatrix = vertcat(ChoiceMatrix,DemandArrivals); ChoiceMatrix(1,:) = []; if(isempty(ChoiceMatrix)==1) C(1,1) = timeStep; C(1,3) = 1; else [~,row] = min(ChoiceMatrix(:,1)); C = ChoiceMatrix(row,:); C(1,3) = C(1,3)+1; end C; else I = zeros(1,5); ChoiceMatrix = zeros(1,size(PartTable,2)); [serial,~] = find(ActiveParts(:,3)==k-1); ChoiceMatrix = vertcat(ChoiceMatrix,PartTable(ActiveParts(serial,1),:)); k; ChoiceMatrix(1,:) = []; ActiveParts; [~,row] = min(ChoiceMatrix(:,1)); C = ChoiceMatrix(row,:); endend
Best Answer