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 : 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);
Avec la fonction récursive allocation :

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
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
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
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 !