You are here:
Foswiki
>
Main Web
>
TWikiUsers
>
CezaryMigaszewski
>
ProgramEuler
(revision 9) (raw view)
Edit
Attach
Bardzo prosty program prezentujący metodę Eulera obliczeń numerycznych, realizujący jednocześnie pewne zagadnienie mechaniki nieba. Na orbicie okołoziemskiej znajduję się satelita (lub inne niewielkie ciało). Ów obiekt znajduję się oczywiście w polu grawitacyjnym Ziemi, ale jako, że Ziemia znajduję się na orbicie okołosłonecznej na satelitę wpływ ma również ciśnienie promieniowania Słońca. Program pokazuje jaki wpływ ma to ostatnie oddziaływanie na trajektorię satelity. W algorytmie tego prościutkiego programu pominąłem inne, nierzadko istotne, zaburzenia wpływające na zmianę orbity ciała, takie jak np. niesferyczność Ziemi. Jedynymi siłami są więc siła grawitacji ( od źródła punktowego ) oraz zaburzenie od promieniowania Słońca. Jako, że zmiana odległości satelity od Słońca (podczas obiegu Ziemi) jest niewielka w porównaniu z tą odległością, oraz okres obiegu satelity jest mała w porównaniu z okresem obiegu Ziemi wokół Słońca, możemy przyjąć, że zarówno wartość zaburzenia jak i jego kierunek są stałe. Po uruchomieniu program zapyta o parę rzeczy: początkowe położenie satelity x(0) i y(0), początkową prędkość vx(0) i vy(0), czas końcowy, do którego chcemy śledzić położenie satelity oraz składowe przyspieszenia od siły zaburzającej fx i fy. Zaburzenie jest wyrażone w jednostkach bezwymiarowych (przyspieszenie w polu grawitacyjnym Ziemi w odległości a=1 od planety). Położenie początkowe i prędkość początkowa oraz czas końcowy również są wyrażone w jednostkach bezwymiarowych. Prędkość v=1 odpowiada predkości jaką miałoby ciało na orbicie kołowej w odległości a=1. Czas końcowy t=1 odpowiada czasowi jaki potrzebowałoby ciało poruszające się po orbicie kołowej o promieniu a=1 na zakreślenie kąta 1 radiana. Pod tekstem źródłowym znajduje się załączony plik wykonywalny programu. Uruchamiamy go poleceniem "euler.out". Dane (x,y) są zapisywane do pliku "euler.dat". Dane te można odczytać programem Super Mongo. Poniżej jest załączone również macro euler.m, które można użyć w programie Super Mongo. <verbatim> ------------------ #include<stdio.h> #include<math.h> #define KROK 0.0001 /*metoda Eulera*/ main() { FILE *f; char *plik; float t,x,y,u,v,tkon,r,ax,ay,fx,fy,k,j; plik = "euler.dat"; f=fopen(plik,"w"); /*rysowanie tarczy planety*/ for (k=-0.096; k<0.1; k=k+0.004) { j=sqrt(0.01-k*k); fprintf(f,"%10.4f %7.4f\n",k,j); } for (k=0.096; k>-0.1; k=k-0.004) { j=-sqrt(0.01-k*k); fprintf(f,"%10.4f %7.4f\n",k,j); } printf("podaj polozenie poczatkowe\nx(0)="); scanf("%f",&x); printf("\ny(0)="); scanf("%f",&y); printf("\npodaj skladowe predkosci poczatkowej\nu(0)="); scanf("%f",&u); printf("\nv(0)="); scanf("%f",&v); printf("\npodaj czas koncowy "); scanf("%f",&tkon); printf("\npodaj skladowe przyspieszenia od sily zaburzajacej (w jedn. GM/a^2) "); printf("\nfx="); scanf("%f",&fx); printf("\nfy="); scanf("%f",&fy); fprintf(f,"%10.4f %7.4f\n",x,y); r=sqrt(x*x+y*y); t=0.0; while(t<=tkon && r>=0.1) { ax=-x/(r*r*r)+fx; ay=-y/(r*r*r)+fy; x=x+u*KROK+ax*KROK*KROK; y=y+v*KROK+ay*KROK*KROK; u=u+ax*KROK; v=v+ay*KROK; t=t+KROK; r=sqrt(x*x+y*y); fprintf(f,"%10.4f %7.4f\n",x,y); } fclose(f); return 0; } ----------------------- </verbatim> -- Main.CezaryMigaszewski - 17 Apr 2004
Attachments
2
Attachments
2
Topic attachments
I
Attachment
Action
Size
Date
Who
Comment
m
euler.m
manage
0.2 K
23 Apr 2004 - 15:31
CezaryMigaszewski
Macro programu Super Mongo
out
euler.out
manage
13.9 K
26 May 2004 - 13:56
CezaryMigaszewski
Edit
|
Attach
|
P
rint version
|
H
istory
:
r10
<
r9
<
r8
<
r7
|
B
acklinks
|
V
iew topic
|
Edit WikiText
|
More topic actions...
Topic revision: r9 - 26 May 2004,
CezaryMigaszewski
Main
Log In
or
Register
Toolbox
Create New Topic
Index
Search
Changes
Notifications
RSS Feed
Statistics
Preferences
Users
Groups
Webs
Cosmo
Main
Sandbox
System
English
Français
Polski
Copyright © CC-BY-SA by the contributing authors. All material on this collaboration platform is copyrighted under CC-BY-SA by the contributing authors unless otherwise noted.
Ideas, requests, problems regarding Foswiki?
Send feedback