function dLL = fLLGARCH(vPara,vY,mX)
%Diese Funktion berechnet den negativen Log-Likelihood-Wert eines
%GARCH-X(1,1)-Modells. Es gilt den negativen Wert zu berechnen, da der
%Optimierer fmincon nach dem Minimum sucht

%Input:
%   vPara: (K+3)x1 Vektor, der K exogene Variablen enthält (inkl.
%   Konstante)
%           (K+1): Konstante des GARCH(1,1)-Prozesses
%           (K+2): Koeffizient des GARCH(1,1)-Prozesses
%           (K+3): Koeffizient des ARCH(1,1)-Prozesses
%
%   vY:     Tx1 Vektor der empirischen Daten der abhängigen Variable
%   mX:     T*K Vektor der empirischen Daten der unabhängigen Variablen

%Bestimmen der Anzahl der Perioden(Beobachtungen)
AnzPerioden = size(vY,1);

%Berechnen der Residuen sowie quadrierten Residuen
vResid = vY - mX * vPara(1:end-3);
vResid2 = vResid.^2;

%Varianz der Residuen berechnen
%   Anlegen der Ergebnistabelle
vResidVar = zeros(AnzPerioden,1);
%   Startwert festlegen
vResidVar(1) = sum(vResid2) / AnzPerioden;
%   Setzen der Varianz-Koeffizienten
dOmega = vPara(end-2);
dGamma = vPara(end-1);
dPhi=vPara(end);

%   Berechnen der zeitabhängigen Varianzen
for t=2:AnzPerioden
    vResidVar(t) = dOmega + dGamma * vResidVar(t-1) + dPhi * vResid2(t-1);
end

%Wert der Log-Likelihood-Funktion berechnen
%Wenn der Wert der Varianzresiduen kleiner als 0 ist (Varianz darf nicht
%negativ sein) soll der Wert ersetzt werden
if any(vResidVar <= 0)
    dLL = realmax;
else
    dLL = AnzPerioden * log(sqrt(2*pi)) + sum(log((vResidVar).^0.5)) +...
        0.5*sum(vResid2 ./ vResidVar);
end
end


