(wrong string) �

From: Peltio <peltio_at_trilight.zone>
Date: Sat, 11 Jun 2005 07:18:45 GMT

"Elio Fabri" ha scritto

>C'e' una bellissima figura dello stesso Newton, che si trova
>riprodotta molto spesso: rappresenta la Terra con una montagna (molto
>esagerata rispetto alla scala reale) sulla cui cima sta un cannone che
>spara proiettili orizzontali, di diversa velocita'.
>
>Quelli lenti cadono ai piedi del monte; quelli unpo' piu' veloci,
>cadono un po' piu' in la'.
>Poi cominciano a oercorre un arco apprezzabile della circonferenza
>terrestre, prima di toccare terra...
>Infine restano in orbita, e la distanza all'apogeo (opposto al
>cannone) diventa sempre maggiore.
>
>Chi l'ha vista?

Io ricordo figure simili, ma senza cannone, su diversi libri di fisica.
Tra l'altro sono andato a ripescare una 'simulazione' primitiva che avevo
scritto in mma basandomi sui calcoli che Feynman aveva fatto nel suo primo
volume. Lui li faceva con le tavole delle potenze, delle radici e dei
reciproci e usando il regolo calcolatore.
Con Mathematica � pi� facile : )
La sua procedura per ricavare l'orbita (con equazioni
semplificate in modo da avere GM=1)
    m ax = - 1 m x/r^3
    m ay = - 1 m y/r^3
si pu� scrivere cos� (brutto codice, ero alle prime armi con mma):

Il primo stadio calcola la velocit� a met� intervallo

firstStep[dt_][{x0_, y0_, vx0_, vy0_}] :=
  With[{r = Sqrt[x0^2 + y0^2]},
    ax = -x0/r^3; ay = -y0/r^3;
    vx = vx0 + ax dt/2; vy = vy0 + ay dt/2;
    x = x0 + vx dt; y = y0 + vy dt;
    {x, y, vx, vy}
    ]

Quelli successivi usano il passo intero, basandosi sul primo valore a met�
passo

nextStep[dt_][{x0_, y0_, vx0_, vy0_}] :=
  With[{r = Sqrt[x0^2 + y0^2]},
    ax = -x0/r^3; ay = -y0/r^3;
    vx = vx0 + ax dt; vy = vy0 + ay dt;
    x = x0 + vx dt; y = y0 + vy dt;
    {x, y, vx, vy}
    ]

L'iterazione viene fatta da questa procedurina

compute[{x0_, y0_}, {vx0_, vy0_}, dt_, n_Integer] :=
  Join[{{x0, y0, vx0, vy0}},
    NestList[nextStep[dt], firstStep[dt][{x0, y0, vx0, vy0}], n]
]

Mentre quest'altra provvede a mostrare il grafico dell'orbita risultante

ShowOrbit[{x0_, y0_}, {vx0_, vy0_}, dt_, n_Integer, opts___Rule] :=
  Module[{pos}, pos = Transpose[Take[Transpose[
            compute[{x0, y0}, {vx0, vy0}, dt, n]], 2] ];
    ListPlot[pos, AspectRatio -> Automatic, AxesLabel -> {"x", "y"}, opts,
      PlotStyle -> PointSize[.015]]
]

A questo punto si possono vedere i diversi tipi di orbita specificando
posizione e velocit� iniziali, passo e numero di iterazioni.
Ad esempio, questa � l'orbita mostrata sul Feynman, a pagina 9-7 del primo
volume.

    ShowOrbit[{0.5, 0}, {0, 1.63}, 0.1, 19];

Poi si possono vedere le varie forme di orbita (valori in libert�, confesso)

    orb1=ShowOrbit[{0, 1}, {.4, 0}, .003, 830];
    orb2=ShowOrbit[{0,1},{.5,0},.01,270];
    orb3=ShowOrbit[{0, 1}, {.7, 0}, .01, 338];
    orb4=ShowOrbit[{0,1},{1,0},.01,628];
    orb5=ShowOrbit[{0,1},{1.5,0},.01,400];
    orb6=ShowOrbit[{0,1},{5,0},.005,120];

    Show[orb1,orb2,orb3,orb4,orb5,orb6]

Se si disegna il disco che rappresenta la terra si dovrebbe ottenere una
figura simile a quella da te segnalata (oddio, bisognerebbe ridurre il
numero di punti delle traiettorie che cozzano contro la Terra e
aggiungere l'opzione PlotJoined->True a ShowOrbit)

saluti,
Peltio
che il metodo numerico � primitivo e richiede di ridurre il passo per
ottenere risultati sensibili.
Esempio:
    ShowOrbit[{0.5, 0}, {0, 1.63}, 0.1, 900];
    ShowOrbit[{0.5, 0}, {0, 1.63}, 0.01, 9000];
(chiss�, forse la precessione delle orbite � un errore di calcolo nella
simulazione di questo universo : ])
Received on Sat Jun 11 2005 - 09:18:45 CEST

This archive was generated by hypermail 2.3.0 : Thu Nov 21 2024 - 05:10:20 CET