Intermediate variables value at the optimisation achievement
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hello,
I'am trying unsuccessfuly since several weeks to get the value of intermediate variables at the achievement of fmincon optimisation. I want to have the value of "call" and "e", so please what may I add to the code ??? please I very need help !
My code :
function monOptimisation
%Contraintes
A = [ 1 1 1 1 ; -1 0 0 0 ; 0 -1 0 0 ; 0 0 0 0 ; 0 0 0 -1];
b = [1 ; 0 ; 0 ; 0 ; 0];
x0=[0;0;0;0;0];
load data
prix=data;
load data2
strike_vec = data2;
load data3
sp = data3;
sig0 = 0.0005;
r = 0;
nbr_sim = 300;
options=optimset('algorithm','interior-point','display','iter');
par= fmincon (@(x)erreursfun(x,prix,strike_vec,sp,sig0,r,nbr_sim),x0,A,b,[],[],[],[],[],options)
function f = erreursfun (par,prix,strike_vec,sp,sig0,r,nbr_sim)
nbr_strike = 36; %size(strike_vec,1)
mat = 257; %size(prix,1)
epsil = randn (nbr_sim,mat);
% Calcul des calls via MC
som_var = zeros(nbr_sim,mat);
som_et = zeros(nbr_sim,mat);
sigma = zeros(nbr_sim,mat);
st = zeros(nbr_sim,mat);
payoff = zeros(nbr_sim,mat);
som_payoff= zeros(mat,nbr_strike);
call= zeros(mat,nbr_strike);
for i = 1: nbr_strike
strike = strike_vec (i);
for j =1 : nbr_sim
sigma (j,1)=(par(1) + par(2) *( epsil(j,1)-par(3)^2)*sig0^2+par(4)*sig0^2)^0.5;
for k = 2 : mat
sigma (j,k)=(par(1) + par(2) * (epsil(j,k)-par(3)^2)*sigma(j,k-1)^2+par(4)*sigma(j,k- 1)^2)^0.5;
end
som_var(j,mat)= sigma (j,mat); %%%
som_et(j,mat)=sigma (j,mat)^0.5*epsil(j,mat); %%%
for k = mat -1 : 1:-1
som_var(j,k)= som_var(j,k+1)+sigma (j,k+1); %%%
som_et(j,k)=som_et(j,k+1)+sigma (j,k+1)^0.5*epsil(j,k+1); %%%
end
for k = 1 : mat
st(j,k)= sp(k)*(exp(r*(mat-k))-(0.5*som_var(j,k))+som_et(j,k)*epsil(j,k));
payoff(j,k)= max(st(j,k)-strike,0);
som_payoff(k,i)=som_payoff(k,i)+payoff(j,k); %%%
end
end
for k = 1 : mat
call(k,i)=exp(r*(mat-k))*((som_payoff(k,i)/nbr_sim));
end
end
% Calcul des erreurs
e=zeros(mat,nbr_strike);
ee=zeros(mat);
eee=0;
for i = 1 : mat
for j = 1 : nbr_strike
e(i,j)=(prix(i,j)- call(i,j))^2;
ee(i)=ee(i)+e(i,j);
end
eee=eee+ee(i);
end
f= eee;
0 commentaires
Réponses (3)
Andrew Newell
le 17 Juil 2011
1 commentaire
Andrew Newell
le 17 Juil 2011
You reply below that you don't have the resources to calculate the parameters. But if you can't calculate them, how can you expect to save them? Anyway, my impression is that you do calculate them during the optimization.
To implement growdata, just create the function - in its own file or below erreursfun - and call it from erreursfun.
Sid S
le 17 Juil 2011
1 commentaire
Andrew Newell
le 17 Juil 2011
This should be a comment on my answer. See my answer above for a response.
Daniel Frisch
le 7 Oct 2020
You can use my function
outputFcn_global
for this purpose. It stores the intermediate results in a global variable, so you can inspect it afterwards.
0 commentaires
Voir également
Catégories
En savoir plus sur Solver Outputs and Iterative Display dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!