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

2 views (last 30 days)
Mats Heller
Mats Heller on 12 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

Answers (1)

Zenin Easa Panthakkalakath
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

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by