Physique: problème de gravité

Description

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

Codes Sources

A voir également

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.