Transcription algorithme récursif Matlab/C++
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 :
Code:
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); |
Avec la fonction récursive allocation :
Code:
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 |
Me donne toutes les combinaisons < 1 de t{1} à t{3} suivant les pas d'incrémentations t{2}
Code:
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 |
Le soucis est que pour des vecteurs de 50 lignes par exemple, le temps d'execution de cette fonction est extrêment long :calim2:
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++ :aie: En fait j'ai du mal avec toutes les fonctions récursives :aie:.
Une aide serait la bienvenue :mrgreen:
Merci !