1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
clear all
matlabpool('open',4)
tic
Terre = [500,500,500];
% Distance de toutes les exoplanètes recensées
Distance_from_Terre = [110.6,119.5,76.4,18.1,21.41,73.1,145,74.8,140,12.21,25,47.9,26.67,52.4,39.4,78.5,97.3,13.97,14.7,12.34,56.9,8.52,19.75,22,97.2,45.5,47.3,20.2,42.2,66,34.6,50,200,19.3,21.3,23.1,460,345,300,400,150,380,460,165,3.2,45,7.7,140,38.5,13.79,13,9.42,17.62,15.1,19.8,9.04,10.2,6.84,4.54,4.94,8.8,12.3,6.21,10.34,8.91,10.9,4.7,140,145,139,38,142.5,214,205,190,235,90,166,215,118,70,254,82,393,306,297,134,204,395,322,130,193,354,320,419,257,317,411,249,310,340,200,320,230,480,303,122,52.8,39.4,30.49,42,28.98,360,158,9.24,126,49.3,20.8,102,37.44,84.9,17.3,35.2,32.56,51.3,38.57,139,68.5,65.6,59,90,29,15.8,28,35,30.46,20.4,53.82,123.2,33,38,88.6,33.98,66.5,44.37,135,27.4,52.82,38.1,37.16,72.4,16.6,67.61,30,110,185,71,96,23.2,26.5,22.2,14.8,98.2,38,28.6,44.2,121.4,33.46,20.6,35.87,109.5,57.7,126,23.4,42.96,12.9,53.05,59.3,78.9,63,159,29.6,27.2,85.17,186,49.6,17.8,18.06,65.8,68.5,43,36.5,55.1,24.5,31.9,103.6,52.7,35.9,59.8,31.26,69,25.5,52,38,21.93,42.3,50,37.38,43.12,319,36.32,64.97,109,90,50.28,78.24,135,67.02,128,59,46.73,63.69,27,132,110,110.6,26.15,56,53,47,44.98,50,135,52.6,17.7,19.3,15.89,54.2,103,19.9,8.82,67,37.36,46.9,44.3,33,22.38,43.8,68.4,46.34,27,89.8,47.37,27,90.3,194,35.4,37.02,6.06,45,48.9,47,21.89,56,52.7,131,40.75,21.5,38,44,33.3,26.5,38,32.4,19.72,54.8,29.94,81.1,44.6,49,52.9,49.1,42,94,31.79,34.8,89.1,108.4,52,143,46.51,46.51,55,53.71,18.1,45.5,42.37,39.4,56.2,227,54.9,55,26.5,118.1,53.82,38.6,117.4,50.2,126,86,20.98,46.5,11,33,42.9,37.7,39.28,99.4,15.2,18.32,25.9,12.8,33.3,42.5,43.03,44,77.5,33.9,21.9,137,54.9,93.2,50.43,21.9,49,32.6,36,33.4,37.84,121.36,87.4,40.7,47.26,31.03,34.8,28,100,251,92,25.7,10.34,35.8,32.6,40.32,34.3,55,55.9,58,12.6,45.7,28.8,36,49.8,36.5,54.91,99,96.99,64.56,39,28.94,80.58,59.7,16.8,49,58.4,32.56,88.26,125,27.46,43.54,52.5,33.96,11.15,44.2,91,42.48,72.6,38.25,18.1,74.5,30.9,40,39.6,32.82,28.9,42.2,53,139,57.24,158,84,25.6,21.1,134,40.3,60.5,18,18,129,111,23,52.9,45,11,25.92,24,31.5,156.7,14.4,18.4,17.17,39.4,181,31.1,128.9,173,290,108,190,38.7,333,62.7,145,15.376,500,46.8,145,500,114,125,15.6,92.25,157,220,470,360,13.47,145,90,125,427,156,160,308,100,144,230,300,330,169,250,334,80,223,400,116,120,450,338,110,230,300,180,200,297,230,330,307,480,160,330,380,225,140,240,87,19.2,200,149,260,293,255,540,701,857,1330,730,550,980,800,1500,535,550,600,680,560,840,920,870,800,900,1150,1180,1200,1230,1310,1330,1340,1400,1499,1500,1510,1645,1950,2176,2250,2300,2700,3040,3300,3800,5100,5200,5700,5900,6000,6100,6500,7150,8500];
% Création aléatoires d'exoplanètes proches de la Terre (1-100 parsecs)
Extra_exo_proches = 1+(100-1)*rand(1,700);
% Création aléatoire d'exoplanètes éloignées de la Terre (100-500 parsecs)
Extra_exo_eloignees = 100+(500-100)*rand(1,320);
% Création aléatoire d'exoplanètes très éloignées (500-8000 parsecs)
Extra_exo_tres_eloignees = 500+(8000-500)*rand(1,100);
% On ajoute toutes les exoplanètes extrapolées au vecteur initial
Distance_from_Terre = [Distance_from_Terre,Extra_exo_proches,Extra_exo_eloignees,Extra_exo_tres_eloignees];
clear Extra_exo_proches Extra_exo_eloignees Extra_exo_tres_eloignees
% Brassage aléatoire du vecteur
x = randperm(length(Distance_from_Terre));
Distance_from_Terre = Distance_from_Terre(x);
%--------------------------------------------------------------------------------------------------
Nombre_exo = length(Distance_from_Terre); % Le maximum vaut la longueur du vecteur Distance_from_Terre
Nombre_exo_min = 10; % Doit valoir minimum 2
nbrtour = 1001; % Nombre impair obligatoire, minimum 3 pour avoir une moyenne
%--------------------------------------------------------------------------------------------------
All_Temps_Moyens_Jusqua_Terre = zeros(Nombre_exo,1);
parfor N = Nombre_exo_min:Nombre_exo
All_Temps_Jusqua_Terre = zeros(nbrtour,1); % Contient nbrtour valeurs de Temps_Jusqua_Terre
for n = 1:nbrtour
% Création des vecteurs
Vectors = zeros(N,3);
for i = 1:N-1
x= randn(1,3);
norms= sqrt(sum(x.^2,2));
x= bsxfun(@times,x,1./norms); % vecteurs normés
x= x * Distance_from_Terre(i);
Vectors(i,1:3) = x;
end
%-----------------------------------------------------------------------------------------------------------------------
% Création des points
P = bsxfun(@plus, Vectors, Terre);
Origine = 200+(600-200)*rand(1,3); % Plaçage de l'origine extraterrestre
%---------------------------------------------------------------------------------------------------------------------
% Algorithme
Vector = bsxfun(@minus,P(:,1:3),Origine);
Normes = sqrt(sum(Vector.^2, 2));
[best_ways,idx] = min(Normes);
Jusqua_Terre = best_ways;
temp = P(idx,:);
P(idx,:) = P(1,:);
P(1,:) = temp;
j = 1;
while all(P(j,:) ~= Terre)
j = j+1;
Vector = P(j:end,1) - P(j-1,1);
Vector(:,2) = P(j:end,2) - P(j-1,2);
Vector(:,3) = P(j:end,3) - P(j-1,3);
Normes = sqrt(sum(Vector.^2, 2));
[best_ways,idx] = min(Normes);
Jusqua_Terre = Jusqua_Terre + best_ways;
idx = idx+j-1;
temp = P(idx,:);
P(idx,:) = P(j,:);
P(j,:) = temp;
end
%---------------------------------------------------------------------------------------------------------------------
% Calculs finaux
Vitesse_vaisseau = 57600; % km/h (New Horizons, http://www.cidehom.com/question.php?_q_id=3471) ou 129600000 km/h (Projet Daedalus, http://www.daviddarling.info/encyclopedia/D/Daedalus.html)
Temps_Jusqua_Terre = (3.08567758 * 10^13 * Jusqua_Terre)/Vitesse_vaisseau; % en heures
Temps_Jusqua_Terre = Temps_Jusqua_Terre/8765.82; % en années (8765.82 = nombre d'heures moyen dans une année)
Temps_Jusqua_Terre = Temps_Jusqua_Terre/1000; % en millénaires
Temps_Jusqua_Terre = Temps_Jusqua_Terre/1000; % en millions d'années
% Il me faudra encore ajouter le temps de terraformation à 50% des systèmes
% et le temps de destruction des ressources sur chaque système
% On ancre n fois les résultats
All_Temps_Jusqua_Terre(n,1) = Temps_Jusqua_Terre;
end
%------------------------------------------------------------------------------------------------------------------
% Trier les résultats en ordre croissant
All_Temps_Jusqua_Terre = sort(All_Temps_Jusqua_Terre);
% Calcul de la médiane
Temps_Moyen_Jusqua_Terre = All_Temps_Jusqua_Terre((n+1)/2,1);
All_Temps_Moyens_Jusqua_Terre(N,1) = Temps_Moyen_Jusqua_Terre;
disp(Nombre_exo-N); % Compte à rebours
end
toc
% Affichage du graphe
for n = Nombre_exo_min:Nombre_exo
plot(Nombre_exo_min:n,All_Temps_Moyens_Jusqua_Terre(Nombre_exo_min:n,1));
drawnow
end
All_Temps_Moyens_Jusqua_Terre(All_Temps_Moyens_Jusqua_Terre == 0) = [];
clear Origine best_ways idx temp norms x Vectors n h N Temps_Jusqua_Terre Jusqua_Terre All_Best_ways n All_Temps_Jusqua_Terre Temps_Moyen_Jusqua_Terre ind i j Vector Normes P
matlabpool('close') |