Jestem początkującym z FE. Moje zastosowanie to wycena pochodnych instrumentów finansowych, w których przestrzeń jest pięciowymiarowa. Tak więc, dodając czas, problem ma sześć wymiarów.
Próbowałem się rozejrzeć (Fenics, escript, deal.II, ...), ale rozumiem, że te programy są ograniczone do 3 + 1 (przestrzeń 3D + czas 1d). Czy to jest poprawne?
Moim językiem docelowym jest Python lub C ++.
Opis mojego problemu
Chciałbym wycenić produkt inwestycyjny, w którym każdego miesiąca inwestor ma swobodę ponownej inwestycji lub nie. Chciałbym to zrobić ze stochastyczną zmiennością, stochastyczną stopą procentową i stochastyczną śmiertelnością.
Stochastyczne PDE wyglądają tak:
gdzieμ S t jest zależną od czasu stałą związaną z ceną akcjiS, aB S t jest niezależnym procesem Levy'ego, który powoduje hałas w cenie akcjiS. Podobnie w przypadku innych wielkości:ν σ t jest wielkością zależną od czasu związaną z lotnościąσ.
NiechCτoznacza dopuszczalne inwestycje w czasieτ
. Problem kontroli stochastycznej wygląda następująco: Powyższe wartości PDE są ciągłe, ale wartość iloczynu V τ
Myślę, że Monte-Carlo zawsze potrafi brutalnie zmusić mój problem, ale jest bardzo powolny.
Deterministyczna postać stochastycznych PDE
Dla tej części załóżmy, że wartość opcji
jest zdefiniowana na poziomie naturalnym czas t , a nie czasy τ , przy czym c t inwestycji w czasie t .
Zdefiniuj operator różnicowy
L t
gdzie stała zależna od czasu{μ S t ,…}jest ignorowana. Deterministyczne PDE wynosi wtedy ∂tVt+(Lt+L S t +L σ t +L r t +L q t )Vt=0, co można dostosować do optymalnego problemu sterowania w czasachτ.
Odpowiedzi:
Zakładając, że chcesz rozwiązać równania Blacka-Scholesa lub wariant portfela 5 zasobów, to rzeczywiście masz 5 wymiarów przestrzennych plus jeden wymiar czasowy. Nie znam żadnego pakietu MES, który mógłby to zrobić z mojej głowy (umowa. Nie mogę tego łatwo zrobić, ale patrz poniżej), ale myślę, że pamiętam, że niektórzy ludzie z grupy Chrisa Schwaba z ETH Zurich rozwiązali takie problemy problemy z używaniem rzadkich siatek. Możesz mieć szczęście rozglądając się po jego publikacjach.
Istnieją inne równania, które mają dodatkowe wymiary. Jednym z przykładów jest równanie przeniesienia promieniowania, które ma 3 spacje + 1 czas + 2 kątowe + 1 wymiar energii. Zwykle rozwiązuje się to w taki sposób, aby dyskretyzować przestrzeń trójwymiarową jak zwykle, a następnie dyskretyzować wymiary kątowe i energetyczne na osobnych 2 i 1-wymiarowych siatkach oraz w każdym punkcie węzłowym siatki przestrzennej po prostu mieć wiele zmiennych (po jednej dla każdej każdy węzeł siatki kątowej razy liczba węzłów w siatce energii). Korzystamy z tego schematu w implementacjach deal.II. Ma to sens dla równania transferu radiacyjnego i może być emulowane dla twojego równania, nawet jeśli nie jest tam naturalne.
źródło
DUNE, rozproszone i ujednolicone środowisko numeryczne http://www.dune-project.org , zawiera niektóre ustrukturyzowane siatki o dowolnym wymiarze (SGrid i Yaspgrid), zobacz funkcje DUNE . Obecnie istnieje gałąź, która zamienia yaspgrid, jedną z powyższych siatek, w siatkę produktu tensorowego, jeśli jest to interesujące. Od wydania 2.0 (obecna wersja to 2.2.1, a wkrótce 2.3), mamy elementy referencyjne dla różnych metod elementów skończonych, które obsługują dowolne wymiary. Dlatego powinno być możliwe ustanowienie dyskretyzacji elementów skończonych o dowolnym wymiarze za pomocą np. Modułu desektyzacji dune-pdelab . Chociaż może to nie być często testowane.
Powiedziawszy to, wciąż istnieje przekleństwo wymiarowości, jak zauważył Wolfgang.
W celu uzyskania dalszych informacji odsyłam do list mailingowych DUNE .
źródło
Ok, więc wygląda na to, że masz sprzężony zestaw ODE, ponieważ, o ile mogę stwierdzić, istnieją tylko pochodne w odniesieniu do czasu i żadnych pochodnych w odniesieniu do czegokolwiek innego. Istnieje wiele pakietów do rozwiązywania systemów ODE o dowolnym wymiarze (Matlab ma takie rzeczy
ode45
). W przypadku Pythona zapoznaj się z tym pytaniem, aby uzyskać sugestie. Wreszcie na netlib znajduje się stary kod Fortran, który można bardzo łatwo połączyć z C ++ (łatwość użycia to inna sprawa). Prawdopodobnie istnieją lepsze alternatywy, odkąd minęło trochę czasu, odkąd spojrzałem (inni powinni wejść).źródło