maple, program liczacy równanie różniczkowe metoda eulera

2011-12-29 22:30
2

witam, mam takie zadanko, i chciałabym je jakoś ugryźć i jak zaczynam pisac w maple program to juz na samym poczatku wyskakują mi błędy, co robie nie tak?

Predkosc obiektu w spadku swobodnym blisko powierzchni Ziemi opisuje rownanie
dv/dt=-g
gdzie v-predkosc, g- przyspieszenie ziemskie
Napisz program ktory uzywa metode Eulera do obliczenia tegoz rownania rozniczkowego (tzn oblicza funkcje v(t)). Dla uproszczenia zakladamy, ze v(0)=0 i obliczamy rownanie na przedziale czasowym od t=0 do t=10. Wykonaj obliczenia dla kilku roznych time step ( tzn ilosc iteracji) i porownaj swoje rozwiazanie z rozwiazaniem analitycznym ( takim obliczonym na papierze

 > dv/dt = -g;
                                   dv     
                                   -- = -g
                                   dt     
> f := proc (v, t) options operator, arrow; (-1)*9.81 end proc;
(v, t) -> (-1) 9.81
> a := 0.; b := 10; n := 100; h := (b-a)/n;
                                     0.
                                     10
                                     100
                                0.1000000000
> x := array(0 .. n, [seq(a+i*h, i = 0 .. n)]);
> y := array(0 .. n); y[0] := 0;
                                      0
> for i from 0 to n-1 do;
Error, invalid loop
             Typesetting:-mambiguous(for i from 0 to n - 1 do, 

               Typesetting:-merror("invalid loop"))
> y[i+1] := y[i]+h*f(x[i], y[i]);
Error, unevaluated array index in assignment
> 
edytowany 1x, ostatnio: madmike, 2011-12-30 01:28

Pozostało 580 znaków

2011-12-29 23:22
0

Metodą Eulera
f := proc (v, t) options operator, arrow; -9, 81 end proc;
a := 0; b := 10; c := 100; h := (b-a)/c;

t[0] := 0; v[0] := 0;

for n from 1 to c do
t[n] := nh;
v[n] := v[n-1]+h
f(t[n-1], v[n-1])
end
od;
data := [seq([v[n]], n = 1 .. c)];
plot(data, style = point, color = red)

Analitycznie

eq := diff(v(t), t) = -9.81;
d
--- v(t) = -9.81
dt
dsolve(eq,v(t));
981
v(t) = - --- t + _C1
100

Nie znam się na tym, ale kobiecie nie wypada odmawiać pomocy, szczególnie w okresie Sylwestra ;D
http://homepages.math.uic.edu/~hanson/MAPLE/euler.html


"Wszystko co może być wynalezione, zostało wynalezione"
Charless H. Duell - komisarz urzędu patentowego U.S., 1899
edytowany 12x, ostatnio: maszynaz, 2011-12-30 22:10
A plusa to jej dałeś zamiast szampana na sylwestra? :] - madmike 2011-12-30 01:30
a co tam dam i ja :P - kAzek 2011-12-30 12:08
miałem nadzieję na kawusię z panią od pytania a tu nic, żadnego zaproszenia ani odzewu, smutny ten Nowy Rok :( - maszynaz 2011-12-30 14:13
mam pytanko, bo piszac powyzszy kod, po wpisaniu for n to 100 do... wyskakuje mi błąd "invalid loop" co jest nie tak? - kasiunia206 2011-12-30 21:38
poprawiłem błąd :) - maszynaz 2011-12-30 22:01
Wejdź na stronę którą ci w poście powyżej napisałem, tam oprócz tej wersji jest też ulepszona. Poza tym w analitycznym rozwiązaniu trzeba jeszcze wyliczyć stałą _C1. - maszynaz 2011-12-30 22:07

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0