Bonjour,
Après avoir crée un programme de Monte Carlo basé sur l'échantillonnage stratifié, je fais face à un petit soucis. Mon but est de créer un programme capable d'approximer une intégrale en utilisant la méthode de stratification. Chose que j'ai presque réussit à faire à un détail près: L'approximation est bonne mais mon intervalle de confiance me semble douteuse.
Est ce que quelqu'un serait capable de critiquer mon travail et voir une éventuelle erreur?
Merci à ceux qui prendront le temps de jeter un oeil à mon travail. Bonne journée!
Ci dessous le programme que j'ai fait avec octave.
%%%Intégration sur D
d(1)= input ('Choisissez votre intervalle d''integration : [');
['[' , num2str(d(1)) , ';']
d(2)= input (' ');
D=['[' num2str(d(1)) ' ; ' num2str(d(2)) ']']
disp(' ');
%%%%%%%%%%%%%%
%%%% Choix strates
disp('Choisissez les bornes de vos strates (dans l''ordre) : ');
disp(' ');
%%%Premiere borne
Di(1)=d(1);
%%%Bornes suivantes
k=1;
while Di(k)!=d(2)
disp(' ');
disp([num2str(k) , ' eme intervalle : ']);
k=k+1;
['[' , num2str(Di(k-1)) , ';']
Di(k)= input(' Choisissez la borne de droite : ');
['[' , num2str(Di(k-1)) , ' ; ' num2str(Di(k)) ']']
while ( Di(k)<=Di(k-1) || Di(k)>d(2) )
disp(['Erreur saisie. Entrez une valeur entre ' , num2str(Di(k-1)) , ' et ' ...
, num2str(d(2))]);
['[' , num2str(Di(k-1)) , ';']
Di(k)= input('Choisissez la borne de droite : ');
endwhile
['[' , num2str(Di(k-1)) , ';', num2str(Di(k)) , ']'];
disp(' ');
end
NB_STRATE=length(Di)-1;
%%% Création des pj associées
for i=1:NB_STRATE
pj(i)=(Di(i+1)-Di(i))/(d(2)-d(1));
endfor
disp(['Vous avez entre les ' , num2str(NB_STRATE) , ' strates suivantes : ']);
for j=1:NB_STRATE
disp(['Strate ', num2str(j) , ': [' , num2str(Di(j)) , ...
' ; ' num2str(Di(j+1)) '] ; pj(' , num2str(j) , ')='...
num2str(pj(j))]);
endfor
%%%Choix taille échantillon
N=input('Taille de l''echantillon : ');
%%% Calcul des différentes sommes
for i=1:NB_STRATE
S(i)=0;
Nj(i)=N*pj(i);
i,:)=rand(1,Nj(i))*(Di(i+1)-Di(i))+Di(i);
for j=1:Nj(i)
S(i)=S(i)+(d(2)-d(1))*F(X(i,j));
endfor
S(i)=S(i)/Nj(i);
endfor
%%% Calcul de la variance
I=0;
V=0;
for i=1:NB_STRATE
v=0;
I=I+S(i)*pj(i);
for j=1:Nj(i)
v=v+((F(X(i,j))-S(i))^2);
endfor
v=v/(Nj(i)-1);
V=(v^2*pj(i)^2)/Nj(i)+V;
endfor
IC=['[' num2str(I-1.96*V/sqrt(N)) ' ; ' num2str(I+1.96*V/sqrt(N)) ']'];
%%%Affichage résultat
I
IC