Runge Kutta 4 "elszáll"

Fórumok

Sziazstok!

Egy nagyon egyszerű másodfokú differneciálegyenletet kell megoldanom, mégpedig az dx/dt^2=F/m, azaz newton2-t ami nagyon egyszerű lenne, ha létezne képletem az F-re (ezt már sokat csináltam). De nincs. Egy rakat mért adatom van, diszkrét értékekre, amik azért "kellemesen" sűrű. Na ha felírom erre a Runge-kutta4-et, akkor egyszerűen elszáll az egész mint az euler formula, révén a diszkrét értékekben konstans a függvény, hiába a 4-rendű RK, a diszkrét lépések miatt lényegében elueler formulát oldok meg, az meg instabil. Ha pedig akkora lépésközt válaszok, amivel nem maradok egy mért adat területén belül, akkor pedig azért száll el. MIt tudok ilyenkor kezdeni? Hátha van valakinek ötlete.

Előre is köszönöüm.

Hozzászólások

Tehát egy csomó x-re meg van adva F(x)?

Csinálj rá valami interpolációt, esetleg valami simítással egybekötve, ha lényeges a mért adatok hibája.

Nem egy nagy ördöngősség F(x)-re lineáris interpolációt alkalmazni, az még józan ésszel is megy. Mondjuk egy simító spline még jobb, de annak utána kell olvasni. A szakaszonként konstans F nem tűnik jó ötletnek.

De még ezután is furcsa, amit írsz, hogy "Ha pedig akkora lépésközt válaszok, amivel nem maradok egy mért adat területén belül, akkor pedig azért száll el." OK, nem szereti az ugrásokat, de azért nem kellene mindig elszállnia. Jó implementáltad a RK-t?

Először azonban mindenképp egy józan eszes lineáris interpolációval próbálkoznék.

Anélkül, hogy tudnám, mit beszélek, az az érzésem, a lineáris interpoláció után az első deriváltnak szakadása lesz, a második deriválttól meg az Isten óvjon! Az olyan Dirac-delta szagú.

És igen, tudom, a hülye okoskodik. Tényleg nem vagyok képben. :)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Elszallason gondolom azt erti, hogy nem letezo fuggvenyertekeket kene hasznalnia, es nincsenek. Interpolacioval kozel trivialisan szintetizalni tud ilyet, es akkor menni fog.

Az, hogy milyen interpolaciot (konstans, linearis, polinomialis, spline esetleg logaritmikus) erdemes hasznalni, az fugg a fuggvenyertekek "surusegetol", meg a fuggveny milyensegetol. Lehet, hogy a linearis is boven megfelel.

Próbáltam a líneáris illesztést, de az eredmény ugyanez. AZ igazság az, hogy ezt meg szerettem volna úszni, hogy magasabb fokú illesztést csináljak, mert így is nagyon számításigényes a dolog. DE természetesen ezt teszem, mert nincs más ötletem.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

Én spline-t illesztenék és azzal oldanám meg. Nekem működni szokott. Sok ilyent csináltam.

----
"Mert nincs különbség: mindenki vétkezett, és híjával van az Isten dicsőségének. Ezért Isten ingyen igazítja meg őket kegyelméből, miután megváltotta őket a Krisztus Jézus által." (Róma 3.22-24)

http://deblogian.blogspot.com

Ilyen típusú feladatokra a gsl könyvtárat használom. Elég jól dokumentált, sok mindent lefed.

Egyébként miért nem játszik a polinomillesztés?

----
"Mert nincs különbség: mindenki vétkezett, és híjával van az Isten dicsőségének. Ezért Isten ingyen igazítja meg őket kegyelméből, miután megváltotta őket a Krisztus Jézus által." (Róma 3.22-24)

http://deblogian.blogspot.com

Akkor muszáj megpróbálnod a magasabb fokszámot. Nem olyan nehéz egy köbös spline. Nem is kell kézzel programoznod, pl. GNU Scientific Library-ban (GSL) van.

De egy kérdés: nem lehet, hogy nagy a zajod és néhány mérési adatod kilóg az adatsorból? Ilyen kiugró érték is okozhat bajt. Ekkor simítani kellene az adatsort először.

A másik kérdés: miért nem használsz adaptív lépésköz-választást? Az sokszor hasznos ilyen esetekben. (Ez is van GSL-ben.)

A GSL-ben van mindenféle, necsak adaptív.

Egyébként +1 az adaptív módszereknek.

----
"Mert nincs különbség: mindenki vétkezett, és híjával van az Isten dicsőségének. Ezért Isten ingyen igazítja meg őket kegyelméből, miután megváltotta őket a Krisztus Jézus által." (Róma 3.22-24)

http://deblogian.blogspot.com

Simítás megvan. Több mérésem is van, átlagolva is van, de az F-et leíró elméletből kb ki tudom pecázni azt hogy milyen a törvény azt próbálom ráhúzni illesztéssel, de az a baj, hogy ez felület. Na mindegy felületet még sosem illesztettem, azt is el kell kezdeni egyszer :).

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

Ezekre már én is gondoltam. Ezek megvoltak, a látványos hülyeségek kiszedve, átlagoltam..... Ezek a diszkrét értékek, amiket valahogy illesztenem kell erre a következtetésre jutottam. Majdnem tuti, hogy ez a hiba.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

Hát már nagyon sokszor átnéztem a kódot, de lehet benéztem valamit. Átfutom még egyszer. Az igazság az, hogy az "elszállás", kb 3-5 millió lépés után következik be, ill akkor kezd szignifikánsan eltérni a valós megoldástól. De egy RK4-tudtommal a "végtelenségig" stabil, ha jól van összerakva. Mivel arra gondoltam, hogy a kód nem rossz, de mégegyszer végiggondolom a dolgot.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

az is lehet, hogy a differencialegyenlet maga instabil ;) lasd: hegye're allitott ceruza, ilyesmik. ennek a mozgasat is le tudod irni sima x''=F/m alakban, de ma'r maga az egyenlet sem stabil.

egyebkenet meg igen, spline interpolacio az sokat segithet. vagy spline illeszte's, valamifele elo"szu"re's (peldaul moving median window) utan.

Az F az ido"to"l fu"gg vagy x-to"l? vagy mindketto"to"l?

Ha nincsenek nagy bakkecskeugrások a függvényben, lineáris interpolációval és adaptív lépésköz-választással is megúszhatod.

A spline-t csak akkor válaszd, ha nincs fogalmad, milyen jellegű igaziból a függvény. Fentebb mintha utaltál volna rá, hogy van tipped, milyen jellegű az F(x,y) fgv., és ha ez igaz, tehát van egy formulád F(x,y)-ra, csak ismeretlen paraméterek vannak benne, akkor értelmesebb azokat a paramétereket meghatározni regresszióval és így az analitikus F(x,y)-nak számolni.

Ez fontos információ, ezek szerint az erőnek nincs explicit időfüggése.
Jól értem akkor, hogy neked igazából egy F_ij mátrixod van? Maga az erő mennyire sima függvény és egyáltalán milyen?
A rendszered dinamikailag is lehet instabil, nem csak numerikusan. Ha az erő nem visszatérítő (rugó jellegű), akkor elég valószínű, de rugónál is elképzelhető hogy beoszcillál, ezért lehet hogy valamilyen sebességgel arányos csillapító tagot érdemes lenne legalább betenni.
Másik dolog, ha diszkrét tartományon van csak megadva az erő, akkor mi történik ha kilép a rendszer ebből a tartományból? Mert ez lehet az elszállás egyik oka: konstans erő, konstans gyorsulás. Ezt mondjuk könnyen ki lehet találni abból, hogy a megoldás exponenciálisan távolodik vagy négyzetesen?
Remélem segítettem valamit.