Bonsoir,
Après avoir écrit une fonction sous Matlab me permettant de calculer l'ensemble des combinaisons possibles d'allocations de portefeuilles comme ci-dessous :
Avec la fonction récursive allocation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 t{1} = 0:0.1:1; t{2} = 0:0.2:1; t{3} = 0:0.5:1; resultattemporaire = []; resultat = []; resultat = allocation(t,resultattemporaire,resultat);
Me donne toutes les combinaisons < 1 de t{1} à t{3} suivant les pas d'incrémentations t{2}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 function resultat = allocation(t,resultattemporaire,resultat) indice = length(resultattemporaire)+1; for k=1:length(t{indice}) if sum(resultattemporaire)+t{indice}(k)<=1 && indice<numel(t) resultattemporaire2 = [resultattemporaire t{indice}(k)]; resultat = allocation(t,resultattemporaire2,resultat); elseif sum(resultattemporaire)+t{indice}(k)==1 && indice==numel(t) resultat = [resultat;[resultattemporaire t{indice}(k)]]; end end
Le soucis est que pour des vecteurs de 50 lignes par exemple, le temps d'execution de cette fonction est extrêment long
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 >> resultat resultat = 0 0 1.0000 0 1.0000 0 0.1000 0.4000 0.5000 0.2000 0.8000 0 0.3000 0.2000 0.5000 0.4000 0.6000 0 0.5000 0 0.5000 0.6000 0.4000 0 0.8000 0.2000 0 1.0000 0 0
Je souhaite donc re-écrire la fonction allocation.m en C++ puis la convertire en format MEX en espérant réduire le temps de calcul sous Matlab.
Le fait est que j'ai beaucoup de mal à écrire cette fonction récursive en C++ En fait j'ai du mal avec toutes les fonctions récursives .
Une aide serait la bienvenue
Merci !
Partager