Bonjour.
J'ai voulu essayer de faire un programme qui simule le mouvement de planètes sous l'effet de la gravitation. Voici mon programme:
Le début ce sont juste des paramètres qu'on peut ajuster. Le paramètre 'n' c'est le nombre de corps présent dans la simulation. 'p' est le temps de pause en secondes entre deux graphiques. 'G' est la valeur de la constante de gravitation. 'fx' c'est la force selon l'axe x, 'fy' la force selon l'axe y. 'vx' c'est la vitesse selon l'axe x, 'vy' la vitesse selon l'axe y. 'x' c'est la position selon l'axe x, 'y' la position selon l'axe y. La position initiale, la vitesse initiale et la masse initiale de chacun des corps est prise au hasard.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 n=5; mass=1; speed=0; scale=3000; distance=1; time=200; p=0.001; G=1; x=distance*(2*rand(1,n)-1); y=distance*(2*rand(1,n)-1); m=mass*rand(1,n); vx=speed*(2*rand(1,n)-1); vy=speed*(2*rand(1,n)-1); fx=zeros(1,n); fy=zeros(1,n); for t=1:time for a=1:n for b=1:n if b~=a fx(a)=0; fy(a)=0; fx(a)=(G*m(b)/((y(b)-y(a))^2+(x(b)-x(a))^2))*((x(b)-x(a))/sqrt((x(b)-x(a))^2+(y(b)-y(a))^2)); fy(a)=(G*m(b)/((y(b)-y(a))^2+(x(b)-x(a))^2))*((y(b)-y(a))/sqrt((x(b)-x(a))^2+(y(b)-y(a))^2)); vx(a)=vx(a)+fx(a); vy(a)=vy(a)+fy(a); x(a)=x(a)+vx(a); y(a)=y(a)+vy(a); end end plot(x(a),y(a),'o') xlim([-scale,scale]) ylim([-scale,scale]) hold on end pause(p) hold off end
Après je compte mettre des valeurs proches de la réalité: G = 6,67 . 10^(-11) qui est la véritable valeur de la constante de gravitation, distance = 10^11 qui est un ordre de grandeur de distance typique dans le système solaire (en mètres), mass = 10^25 qui est un ordre de grandeur pour la masse des planètes (en kg), etc.
Mais le problème c'est que mon programme marche pas du tout: au lieu que les corps s'attire, ils se répulsent ! Mon programme simule de l'anti-gravité !...
Je comprends vraiment pas pourquoi. J'ai lu et re-lu mon programme pendant des heures et n'ai pas trouvé où sont les erreurs... Notez que je ne suis qu'un débutant en programmation, alors y'a peut-être juste quelque chose qui m'échappe.
Merci d'avance pour vos réponses.
Partager