MATLAB Answers

0

How can i calculate the integral for the elang loss function?

Asked by Mats Heller on 12 May 2019
Latest activity Answered by Zenin Easa Panthakkalakath on 15 May 2019
Hello evrybody,
I got a problem calculating the erlang loss function for the hayward fredericks approximation.
Matlab tells me everytime that there is an error calculation the integral.
Thank you so much for your help :)
My code looks like this:
s = [6 4 6] %Aufteilung der Mitarbeiter auf die Gruppen
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Initialisierung %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
lambda = [1.5 2]; %Angaben der prognostizierten Arbeitsauslastung
my = [0.18 0.6 ; 0.16 0.5]; %Angaben der unterscheidlichen Bearbeitungsraten in Abhängigkeit von Skill und Gruppe
i=1; %Betrachtung der ersten Mitarbeitergruppe
j=1; %Betrachtung für den ersten Skill
E=2; %Anzahl Skills
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if-Schleife %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if s(3)> 0 %Falls die Mitarbeiteranzahl der Generalistengruppe größer als 0 ist führe folgendes aus:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% while-Schleife %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
while j<=E %Solange j kleiner ist als die Anzahl der Skills E führe folgendes durch:
a(j) = lambda(j)/my(1,j); %Berechne den mittleren Bestand im System auf der ersten Ebene
syms k;
m(j) = a(j)*(a(j)^s(i))/factorial(s(i))/symsum ((a(j)^k)/factorial(k), k, 0, s(i)); %Berechne den mittleren Überflussverkehr des jeweiligen Gruppe
Z(j) = 1 - m(j) + (a(j)/(s(i)+1 + m(j) - a(j))); %Berechne die Peakedness Z für die jeweilige Gruppe
v(j) = m(j) * Z(j); %Berechne die Varianz des Überflussverkehrs für die jeweilige Gruppe
j = j+1; %Erhöhe j um 1, um den nächsten Skill zu betrachten
i=i*1; %Erhöhe i um 1, um die Gruppe zu betrachten, die sich mit Skill j+1 beschäftigt
end %Beendung der while-Schleife
%%%%%%%%%%%%%%%%%%%%%%%% Ende while-Schleife %%%%%%%%%%%%%%%%%%%%%%%%%
ME = sum (m); %Berechne die Summe des mittleren Überflussverkehr über alle Gruppen
V = sum(v); %Berechne die Summe der Varainzen über alle Gruppen
Z = V/ME; %Berechne die Peakedness Z für die Generalistengruppe
%Die Generalistengruppe wird nun in Z Subgruppen unterteilt
N_h= s(3)/Z %Berechne die Anzahl der Server für jede Subgruppe
a_h= ME/Z %Berechne den mittleren Verkehr für jede Subgruppe
f = @(x) ((x^N_h) *exp(-x)) %Integralrechnung vorbereitung (Funktion des Integrals angeben)
E_B= a_h^(N_h) * exp(-(a_h)) /(integral(f,4,Inf,0)) %Berechne die Erlang B-Formel für nicht ganzzahlige Zahlen mit den vorher berechneten Angaben
BL = 1-E_B; %Berechnung der Blockierwahrscheinlichkeit durch die Gegenwahrscheinlichkeit
end %der in Erang B berechneten Wahrscheinlchkeit
%The results of running this code looks like this
>> HaywardFredericks
s =
6 4 6
N_h =
1491219364111474069568897398473517173592830626077215796404528821044638492757950162402698854400/408321038457492148615739859965116895567901794853528038196114778601512621900942979938065084661
a_h =
903429268219527034311315757495664943102673266116826176607292528082245486666220119743526276875/408321038457492148615739859965116895567901794853528038196114778601512621900942979938065084661
f =
function_handle with value:
@(x)((x^N_h)*exp(-x))
Error using integralParseArgs (line 11)
Expected a string scalar or character vector for the parameter name.
Error in integral (line 87)
opstruct = integralParseArgs(varargin{:});
Error in HaywardFredericks (line 51)
E_B= a_h^(N_h) * exp(-(a_h)) /(integral(f,4,Inf,0))
%Berechne die Erlang B-Formel für nicht ganzzahlige Zahlen mit den vorher berechneten Angaben

  0 Comments

Sign in to comment.

1 Answer


Hi Mats,
It appears to be that the function 'integral' is being called with 4 arguments in the code provided above. According to the syntax for the function, the following are the signatures that are supported:
q = integral(fun,xmin,xmax)
q = integral(fun,xmin,xmax,Name,Value)
Have a look into the following documentation for more information about the function.
Regards,
Zenin

  0 Comments

Sign in to comment.