Matematik

Angående matlab optimeringsalgoritme

16. marts 2011 af Madsst (Slettet) - Niveau: Universitet/Videregående

Hejsa.

Jeg har et Matlab program der gør vrøvl. Jeg skal finde maksimum på en meget ikke-lineær funktion i temmeligt mange dimensioner. Jeg har forsøgt mig med matlab optimeringsalgoritmen "fminunc", men som jeg har opstillet problemet og med den nuværende opsætning formår programmet sjældent at finde maksimum.

Findes der nogen med kendskab til optimeringsalgoritmer i matlab som kan hjælpe mig på vej?

Tak 


Brugbart svar (0)

Svar #1
17. marts 2011 af andershorsted (Slettet)

Hvad er funktionsudtrykket for den funktion, du vil finde maksimum for? Og kan du eventuelt uploade/vise din matlab-kode?



Svar #2
17. marts 2011 af Madsst (Slettet)

Det er følgende funktion der skal minimeres mht. parametervektoren "startingparameters". Det er forsøgt gjort ved at give funktionen som input til "fminunc".

data: inputmatrix af dimension T x N. N2 er en skalar der holder styr på parameterpositioner i startingparameters.

Følgende opsætning er forsøgt benyttet på fminunc:

%% setting for fminunc

options = optimset('fminunc');
options = optimset(options , 'Display' , 'off');
options = optimset(options , 'Diagnostics' , 'off');
options = optimset(options , 'LargeScale' , 'off');
options = optimset(options , 'TolX',1e-6,'TolCon',1e-6,'TolFun',1e-6) ;
options = optimset(options , 'maxiter' , 1000, 'DiffMinChange',1e-2) ;
options.MaxFunEvals= 5000;
 

%% funktion der skal minimeres

function [LLF,likelihoods,Ht,errors]=diagonal_bekk_mvgarch_in_mean_likelihood(startingparameters,data,N,N2,T)

C = startingparameters(1:N2);
A = startingparameters(N2+1:N2+N);
B = startingparameters(N2+N+1:N2+2*N);
mu = startingparameters(N2+2*N+1:N2+3*N) ;
delta = startingparameters(N2+3*N+1) ;

tempA=zeros(N,N);
tempB=zeros(N,N);
tempA(:,:)=diag(A(1:N));
tempB(:,:)=diag(B(1:N));
A=tempA;
B=tempB;
C=ivech(C);
C=tril(C);
const=C*C';

uncond=cov(data);
Ht=zeros(N,N,T);
Ht(:,:,1)=uncond;
errors(1,:)=sqrt(diag(uncond))';
LLF=0;
likelihoods=zeros(T-1,1);

for t = 2 : T;
Ht(:,:,t) = const;
Ht(:,:,t) = Ht(:,:,t)+A(:,:)*(errors(t-1,:))'*(errors(t-1,:))*A(:,:)';
Ht(:,:,t) = Ht(:,:,t)+B(:,:)*Ht(:,:,t)*B(:,:)';
errors(t,:) = data(t,:)-(mu'+(Ht(:,N,t)*delta)') ;
likelihoods(t) = N*log(2*pi)+(log(det(Ht(:,:,t)))+errors(t,:)*Ht(:,:,t)^(-1)*errors(t,:)');
LLF=LLF+likelihoods(t);
end
LLF=0.5*(LLF);
likelihoods=0.5*likelihoods(2:T);
Ht=Ht(:,:,:);
if isnan(LLF)
LLF=1e6;
end


Svar #3
17. marts 2011 af Madsst (Slettet)

 hov - jeg skal nævne at: 

C = ivech(C)
C = tril(C) 

Laver vektoreren C af dimension N * (N-1) / 2 om til en "lower triangular" matrix af dimension NxN. 
 


Brugbart svar (0)

Svar #4
17. marts 2011 af andershorsted (Slettet)

Av.

Ja det er jo ikke ligefrem et 2. grads polynomium du prøver at minimere :) Tror desværre ikke jeg kan hjælpe dig. En lille detalje der ikke hjælper på dit problem... Så vidt jeg lige kan se, kan du erstatte

tempA=zeros(N,N);
tempB=zeros(N,N);
tempA(:,:)=diag(A(1:N));
tempB(:,:)=diag(B(1:N));
A=tempA;
B=tempB;

Med

A = diag(A)
B = diag(B)

og resultat vil blive det samme?

En anden detalje. Har du set at der findes funktionen garchfit i econometrics toolboxen til matlab, som du måske kan bruge?


Svar #5
17. marts 2011 af Madsst (Slettet)

Tak for hjælpen.

4 linier mindre er aldrig skidt :-)

Garch pakken til matlab er desværre kun skrevet til univariate modeller og endda ikke engang til garch-in-mean univariat. . 


Skriv et svar til: Angående matlab optimeringsalgoritme

Du skal være logget ind, for at skrive et svar til dette spørgsmål. Klik her for at logge ind.
Har du ikke en bruger på Studieportalen.dk? Klik her for at oprette en bruger.