prenez deux corps inertes et attendez que la gravitation les fasse se fracasser: vous risquez peut-être d'attendre longtemps... ou peut-être pas ! gravité.exe va répondre à cette question qui vous fait cauchemarder: si la lune s'arrêtait de tourner, combien de temps mettrait-elle à venir détruire notre civilisation? Faites vos prières car c'est une question de quelques jours!
Source / Exemple :
Dim rp, rg, g, gmp, d, mp, mg, gamma, x, xp, xpp, gdk1, gdk2, k1, k2, k3, k4, beta1, beta2 As Double
Dim xchoc, tchoc, t, delta, delta2 As Double
Private Sub Aide_Click()
MsgBox " Bienvenue sur mon deuxième programme. il permet d'estimer le temps que mettent deux objets sphériques pour rentrer en contact sous le seul effet de la gravité ! ", vbOKOnly
MsgBox " Conseil : utilisez la méthode d'Euler pour obtenir un ordre de grandeur du résultat et adapter delta. Utilisez ensuite la méthode de Runge-Kutta-nystrom", vbOKOnly
MsgBox " Attention ! ces méthodes sont des approximations, SURTOUT LA METHODE D'EULER ! n'hésitez donc pas a mettre un delta très grand (1000 secondes)", vbOKOnly
MsgBox " Petit exercice : si la lune s'arrêtait de tourner et n'était plus soumise qu'à l'attraction de la Terre, combien de temps mettrait-elle pour s'écraser sur nous, pauvres terriens ? suggéestions, questions, réponses: zegratman@caramail.com !", vbOKOnly
End Sub
Private Sub Command1_Click()
mp = Text1.Text
mg = Text2.Text
rp = Text3.Text
rg = Text4.Text
d = Text5.Text
delta = Text6.Text
If Text1.Text = "" Then GoTo break
If Text2.Text = "" Then GoTo break
If Text3.Text = "" Then GoTo break
If Text4.Text = "" Then GoTo break
If Text5.Text = "" Then GoTo break
If Text6.Text = "" Then GoTo break
g = 6.67259E-11
x = 0
xp = 0
t = 0
gmp = g * mp
delta2 = delta / 2
gamma = 1 + mp / mg
Text7.Text = gamma
xchoc = (d - rp - rg) / gamma
Text8.Text = xchoc
If Option1.Value = True Then
Do While x <= xchoc
xpp = g * mg / ((d - gamma * x) * (d - gamma * x))
x = x + xp * delta + xpp * ((t + delta) * (t + delta) - t * t) / 2
xp = xp + delta * xpp
t = t + delta
Loop
Else
Do While x <= xchoc
xpp = g * mg / ((d - gamma * x) * (d - gamma * x))
k1 = delta * xpp
beta1 = delta * (xp + k1 / 2)
k2 = delta * g * mg / ((d - gamma * (x + beta1)) * (d - gamma * (x + beta1)))
k3 = k2
beta2 = delta * (xp + k3)
k4 = delta * g * mg / ((d - gamma * (x + beta2)) * (d - gamma * (x + beta2)))
gdk1 = (k1 + k2 + k3) / 3
gdk2 = (k1 + 2 * k2 + 2 * k3 + k4) / 3
x = x + delta * (xp + gdk1)
xp = xp + gdk2
t = t + delta
Loop
End If
tchoc = t - delta
MsgBox "fini !!!", vbOKOnly
Text9.Text = tchoc
Text10.Text = xp
break:
End Sub
Private Sub Form_Load()
Option1.Value = True
Text10.Enabled = False
End Sub
Private Sub Option1_Click()
Option2.Value = False
End Sub
Private Sub Option2_Click()
Option1.Value = False
End Sub
Conclusion :
Et bien je remercie mon professeur d'analyse nuérique, M. Baylaucq (UPPA), sans qui la méthode de Runge-Kutta-Nystrom serait pour moi un mystère!
e-mail:zegratman@caramail.com
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.