-
1. Data: 2010-07-29 15:35:02
Temat: Adams-Bashforth - wiki?
Od: "slawek" <s...@h...pl>
Czy przypadkiem w Wikipedii nie ma błędu odnośnie metody Adamsa-Bashforth'a?
http://en.wikipedia.org/wiki/Linear_multistep_method
http://wapedia.mobi/en/Adams_Bashforth
Wzorki po frazie "The Adams-Bashforth methods with s = 1, 2, 3, 4, 5 are"
(ten dla y_{n+5} szczególnie).
Tak samo jest w skrypcie Pawła Góry,
http://student.eldoras.com/UJ/metody_numeryczne/Gora
/wyklad07.pdf, niemniej
jednak nie pytałem go, czy to nie przypadkiem z tego samego źródła (Wiki?) -
może w nim jest błąd? Trzeba będzie pokopać dalej, i/lub wyliczyć owe b[n]
samemu.
Działało u kogoś z s = 5 dobrze?
Mój program ślicznie mi liczy co trzeba... pod warunkiem, że nie daję tego
tasiemca dla n+5 - czyżby ktoś pomylił się przepisując współczynniki?!
Jeżeli jest s = 1, 2, 3, 4 --- to jest dobrze.
Dam s = 5 --- idzie w krzaki.
Ogólnie metoda bardzo przydatna, bo mam przezatentego duże koszty liczenia
f, to takie całkowanie jest brrr...
W A-B mogę użyć f-ów archiwalnych, czysta oszczędność. Tylko dziwi, czemu
danie "lepszego" ciut wzoru prowadzi aż tak w krzaki - powinno ciut
prowadzić wentualnie.
Czy całkuję spline'ami czy trapezami - wisi to rozwiązaniu. Czyli to nie
problem z ciągłością czegoś itd. itp. - nic finezyjnego, wygląda na
literówkę we współczynnikach. Ale żeby w Wikipedii? Wątpię.
Ma ktoś kreatywne pomysły?
slawek
P.S. fragmencik copy/paste - jak wyrzucić pierwsze trzy linie, to chodzi jak
trzeba. A jak jest jak jest, to robi sruuu i wywala rozwiązanie w
nieskończoność.
if (j .gt. 4) then
y1(j+1) = y1(j) + h *
(1901.*f1(j)-2774.*f1(j-1)+2616.*f1(j-2)-1274.*f1(j-
3)*251.*f1(j-4))/720.
y2(j+1) = y2(j) + h *
(1901.*f2(j)-2774.*f2(j-1)+2616.*f2(j-2)-1274.*f2(j-
3)*251.*f2(j-4))/720.
elseif (j .gt. 3) then
y1(j+1) = y1(j) + h *
(55.*f1(j)-59.*f1(j-1)+37.*f1(j-2)-9.*f1(j-3))/24.
y2(j+1) = y2(j) + h *
(55.*f2(j)-59.*f2(j-1)+37.*f2(j-2)-9.*f2(j-3))/24.
elseif (j .gt. 2) then
y1(j+1) = y1(j) + h * (23.*f1(j)-16.*f1(j-1)+5.*f1(j-2))/12.
y2(j+1) = y2(j) + h * (23.*f2(j)-16.*f2(j-1)+5.*f2(j-2))/12.
elseif (j .gt. 1) then
y1(j+1) = y1(j) + h * (3.*f1(j)-f1(j-1))/2.
y2(j+1) = y2(j) + h * (3.*f2(j)-f2(j-1))/2.
else
y1(j+1) = y1(j) + h * f1(j)
y2(j+1) = y2(j) + h * f2(j)
endif
-
2. Data: 2010-07-29 15:41:24
Temat: Re: Adams-Bashforth - wiki?
Od: "slawek" <s...@h...pl>
Użytkownik "slawek" <s...@h...pl> napisał w wiadomości grup
dyskusyjnych:4c519fa4$0$19166$6...@n...neostrad
a.pl...
> if (j .gt. 4) then
> y1(j+1) = y1(j) + h *
> (1901.*f1(j)-2774.*f1(j-1)+2616.*f1(j-2)-1274.*f1(j-
3)*251.*f1(j-4))/720.
A powinno być:
(1901.*f1(j)-2774.*f1(j-1)+2616.*f1(j-2)-1274.*f1(j-
3)*251.+f1(j-4))/720.
Czyli * zamiast + wlazła.
Czyli Wiki nie kłamie.
slawek