Info

Diese Frage ist geschlossen. Öffnen Sie sie erneut, um sie zu bearbeiten oder zu beantworten.

How can I get my parameters after running fmincon ?

1 Ansicht (letzte 30 Tage)
Sid S
Sid S am 20 Jun. 2011
Geschlossen: MATLAB Answer Bot am 20 Aug. 2021
Hello, How can I get the value of my parameters (par) after achieving minimization by fmincon and the value of intermediate variables (c(i,j) and e(i,j)) used in the code ? please help I am a big newbie in Matlab !
My code :
function monOptimisation
%Optimisation
%Matrice des contraintes
A = [0 1 1 1 ; 0 -1 0 0 ; 0 0 -1 0 ; 0 0 0 -1 ; 0 0 0 0];
b = [1 ; 0 ; 0 ; 0 ; 0];
x0=[0.5;0.5;0.5;0.5];
prix_array = cell(1)
load data
prix_array {1} = data
strike_array = cell(1)
load data2
strike_array {1}= data2
mat_vec = [67]
s0_vec = [1121]
sig0_vec = 0.0005
rest_vec = 0
r = 0
nbr_sim = 5
options=optimset('algorithm','interior-point')
par = fmincon (@(x)erreursfun(x,prix_array,strike_array,mat_vec,s0_vec,sig0_vec,rest_vec,r,nbr_sim),x0,A,b,[],[],[],[],[],options);
function f = erreursfun (par,prix_array,strike_array,mat_vec,s0_vec,sig0_vec,rest_vec,r,nbr_sim)
% GÈnÈration et stockage en mÈmoire des tous les nombres al»atoires
nbr_mat = size(mat_vec,1);
eps2=cell(nbr_mat);
for i = 1:nbr_mat
mat = mat_vec(i);
vec_strike = strike_array{i};
nbr_strike = size(vec_strike,1);
eps1=cell(nbr_strike);
for j = 1: nbr_strike
eps1{j}=randn(nbr_sim,mat);
end
eps2{i}= eps1{j};
end
c=zeros(nbr_mat,nbr_strike);
for i = 1:nbr_mat
vec_strike = strike_array{i};
prix=prix_array{i};
nbr_strike = size(vec_strike,1);
mat = mat_vec(i);
sig0=sig0_vec(i);
s0=s0_vec(i);
nbr_obs=mat_vec(i)-rest_vec(i);
e=zeros(nbr_mat,nbr_obs);
c=zeros(nbr_mat,nbr_strike);
for j =1 : nbr_strike
strike = vec_strike (j);
payoff=zeros(nbr_sim);
eps1{j}= eps2{i};
epss = eps1{j};
somme=zeros(nbr_mat,nbr_strike);
for k = 1 : nbr_sim
sigma=zeros(nbr_sim,mat+1);
Z = zeros(nbr_sim,mat);
zzero = zeros(nbr_sim);
for l = 2 : mat+1
sigma (1,1)=sig0;
Z(1,1)=1;
sigma (k,l)=(par(1) + (par(2) * (epss(k,l-1)-(0.5+ par(3)))^2)*sigma(k,l-1)^2+par(4)*sigma(k,l- 1)^2)^0.5;
Z(k,l) = Z(k,l-1)*exp((-0.5 *(sigma(k,l)^2))+(sigma(k,l)*epss(k,l-1)));
end
st(k) = s0 * (exp(r * mat)) * Z(k,mat+1);
payoff(k)= max(st(k)-strike,0);
somme(i,j)=somme(i,j)+payoff(k);
end
c(i,j)= somme(i,j)/nbr_sim;
end
end
%%%%%%%Calcul des erreurs
e=zeros(nbr_mat,nbr_strike);
for i =1 : nbr_mat
for j = 1: nbr_strike
for l = 1 : mat_vec(i)-rest_vec(i)
e(i,j)=e(i,j)+(prix(l,j)-c(i,j)*exp(r*(l-mat)))^2;
end
end
end
ee =zeros(nbr_mat);
eee = 0;
for i =1 : nbr_mat
for j =1 :nbr_strike
ee(i)=ee+e(i,j);
end
eee=eee+ ee(i);
end
f= eee;

Antworten (3)

Walter Roberson
Walter Roberson am 20 Jun. 2011
Consider using nested functions with shared variables.

Jorrit
Jorrit am 20 Jun. 2011
I asked more or less the same question a couple of days ago. The question is not exactly the same, but the answer is.

Sid S
Sid S am 20 Jun. 2011
THanks for your answers, i'll try that

Diese Frage ist geschlossen.

Community Treasure Hunt

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

Start Hunting!

Translated by