Info

La pregunta está cerrada. Vuélvala a abrir para editarla o responderla.

How can I get my parameters after running fmincon ?

2 visualizaciones (últimos 30 días)
Sid S
Sid S el 20 de Jun. de 2011
Cerrada: MATLAB Answer Bot el 20 de Ag. de 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;

Respuestas (3)

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

Jorrit
Jorrit el 20 de Jun. de 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 el 20 de Jun. de 2011
THanks for your answers, i'll try that

La pregunta está cerrada.

Community Treasure Hunt

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

Start Hunting!

Translated by