Mam układ zwykłych równań różniczkowych - 7 równań i ~ 30 parametrów rządzących ich zachowaniem w ramach matematycznego modelu przenoszenia choroby. Chciałbym jak znaleźć stabilne stany tych równań Zmiana dx/dt = rest of the equation
aby 0 = equation
dla każdego z równań sprawia, że prosta algebra problem. Można to zrobić ręcznie, ale jestem absurdalnie zły w tego rodzaju obliczeniach.
Próbowałem użyć Mathematiki, która może obsługiwać mniejsze wersje tego problemu ( patrz tutaj ), ale Mathematica zatrzymuje się na ten problem. Czy istnieje bardziej wydajny / skuteczny sposób podejścia do tego? Bardziej wydajny symboliczny system matematyczny? Inne sugestie?
Kilka aktualizacji (21 marca):
- Celem jest rzeczywiście ich rozwiązanie symboliczne - odpowiedzi liczbowe są fajne, ale w tej chwili celem końcowym jest wersja symboliczna.
- Jest co najmniej jedna równowaga. Właściwie to nie usiadłem i nie udowodniłem tego, ale z założenia powinien on mieć co najmniej jeden trywialny, w którym żadne nie jest zainfekowane na początku. Poza tym może nie być nic , ale to sprawiłoby, że jestem równie zadowolony jak wszystko inne.
- Poniżej znajduje się rzeczywisty zestaw równań, o których mowa.
Podsumowując, szukam wyrażeń symbolicznych dla rozwiązań układu 7 równań kwadratowych w 7 zmiennych.
Odpowiedzi:
Wygląda na to, że równania, z którymi masz do czynienia, są wielomianowe po usunięciu mianowników. To dobrze (funkcje transcendentalne są często nieco trudniejsze do algebraicznie). Nie jest to jednak gwarancją, że twoje równania mają rozwiązanie w formie zamkniętej. Jest to istotny punkt, którego wielu ludzi tak naprawdę „nie rozumie”, nawet jeśli znają to w teorii, więc trzeba to powtórzyć: istnieją dość proste układy równań wielomianowych, dla których nie ma możliwości podania rozwiązań w kategoriach (n th) root itp. Słynny przykład (w jednej zmiennej) to x5−x+1=0 . Zobacz także tę stronę wikipedii .
To powiedziawszy, oczywiście istnieją również układy równań, które można rozwiązać, i warto sprawdzić, czy twój układ jest jednym z nich. I nawet jeśli twojego układu nie da się rozwiązać, nadal może być możliwe znalezienie formy układu równań, która jest w pewnym sensie prostsza. Na przykład znajdź jedno równanie obejmujące tylko pierwszą zmienną (nawet jeśli nie można go rozwiązać algebraicznie), a następnie drugie równanie obejmujące tylko pierwszą i drugą zmienną itp. Istnieje kilka konkurencyjnych teorii na temat znajdowania takich „normalnych form” układów wielomianowych; najbardziej znana jest teoria podstawowa Groebnera, a konkurencyjna to teoria regularnych łańcuchów.
W systemie algebry komputerowej Maple (pełne ujawnienie: pracuję dla nich) oba są zaimplementowane. Wydaje mi się, że to
solve
polecenie zwykle wywołuje metodę Groebnera, co szybko zatrzymuje się na moim laptopie. Próbowałem uruchomić regularne obliczanie łańcuchów i trwa to dłużej niż mam cierpliwość, ale wydaje się, że nie jest tak kiepskie pod względem pamięci. Jeśli jesteś zainteresowany, strona pomocy dla polecenia, którego użyłem, jest tutaj , a oto kod, którego użyłem:źródło
Profesjonalnym sposobem jest napisanie równań w języku modelowania, takim jak AMPL lub GAMS, i rozwiązanie ich za pomocą solwera, takiego jak IPOPT.
AMPL to system komercyjny, ale darmowa wersja studencka AMPL może stwarzać problemy z maksymalnie 300 równaniami i zmiennymi.
Jeśli chcesz tylko rozwiązać jeden lub kilka problemów, możesz go rozwiązać online za pomocą serwera NEOS do optymalizacji - po prostu prześlij opis AMPL i poczekaj na odpowiedź.
Jeśli musisz wielokrotnie rozwiązywać takie systemy w ramach większego badania (np. Zmieniając parametry), powinieneś pobrać IPOPT (oprogramowanie na bardzo liberalnej licencji).
Edycja: Zwróć uwagę, że zrozumiałe rozwiązania symboliczne są zwykle ograniczone do dość małych problemów - zwykle rozmiar podstawy Groebnera rośnie gwałtownie wraz z liczbą zmiennych lub stopniem wielomianów, a czas przetwarzania jest jeszcze większy. Zatem czas oczekiwania wynoszący godzinę lub dłużej z Mathematica jest znakiem (choć nie dowodem), że twoje symboliczne rozwiązanie byłoby całkowicie niezrozumiałe. Co więcej, ocena tak długiego wyrażenia może być niestabilna numerycznie, więc aby uzyskać znaczące wyniki, potrzebna byłaby wysoka precyzja oceny.
źródło
Napisanie całego rozwiązania jest niemożliwe z uzasadnionego powodu. Ale oto kilka równań, aby nieco zmniejszyć system:
Równanie 7 jest liniowe we wszystkich zmiennych i można je zmienić w celu rozwiązaniaD :
Wynikowe wyrażenie sugeruje, że powinniśmy spróbować rozwiązać wszystkie pozostałe zmienne pod względemCA i CP ; ponieważ mamy tylko 6 niezależnych równań, najlepsze, co możemy zrobić, to sprowadzić układ do jednego równania w dwóch zmiennych.
Na szczęście dodanie równań 3 i 5 razem daje równanie liniowe we wszystkich zmiennych i można je rozwiązaćUA lub UP . Dodanie równań 4 i 6 razem daje również równanie liniowe we wszystkich zmiennych i można je rozwiązaćUA lub UP (które nie zostały rozwiązane podczas dodawania równań 3 i 5 razem).
W tym momencie powinniśmy mieć wyrażenia dlaUA i UP pod względem H , CA , i CP (ponieważ możesz wyeliminować D używając powyższego wyrażenia). Użyliśmy równań 1, 2, 5, 6 i 7; zachowamy równania 3 i 4, ponieważ są prostsze.
Do rozwiązania możemy użyć równania 3 lub 4H pod względem CA i CP . Następnie, dokonując wszystkich niezbędnych podstawień, pozostałe równanie powinno być tylko pod względemCA i CP . Korzenie tego równania określą stany ustalone układu; symboliczne może być odnalezienie tych korzeni.
Powodzenia!
źródło
To zależy od struktury twoich równań.
Jeśli szukasz wszystkich stałych stanów z zestawu równań i możesz zmienić ich kolejność, jak ErikP mówi na wielomiany, możesz użyć metod z prawdziwej geometrii algebraicznej, aby obliczyć wszystkie rozwiązania numeryczne z wysoką precyzją. Bertini jest jednym z takich pakietów, które znam, ale są też inne. Kilka lat temu poszedłem na konferencję w Notre Dame, gdzie Bertini był używany do znajdowania stałych stanów ODE na podstawie kinetyki chemicznej; Bertini został opracowany w Notre Dame.
Inną możliwością jest zastosowanie metod zaproponowanych w „Teście wykluczenia niehoothowego do znajdowania wszystkich rozwiązań równań nieliniowych” autorstwa MD Stubera, V. Kumara i PI Bartona, BIT Mathematics 50 (4), 885-917, DOI: DOI: 10.1007 / s10543-010-0280-6 ; metody te nie wymagają, aby układ równań był wielomianami. Paul Barton jest moim doradcą, a Matt Stuber jest moim kolegą; jeśli chcesz, mogę poprosić go o oprogramowanie i wysłać je do ciebie. W pracy wykorzystano metody z globalnej optymalizacji i arytmetyki przedziałowej (cytuje książkę Arnolda Neumaiera), a także metodę Newtona. Zaletą tej metody jest to, że powinna ona zlokalizować wszystkie rozwiązania; wadą jest to, że jest skomplikowane.
W przypadku, gdy nie jest to jasne, ArnoldNeumaier sugeruje, aby zamiast rozwiązaćF(x)=0 bezpośrednio używając czegoś takiego jak metoda Newtona (która na ogół zadziała, jeśli dobrze zgadniesz, wystarczająco blisko rozwiązania), rozwiązujesz
gdzieS jest jakimś możliwym zestawem zdefiniowanym przez ograniczenia twojego problemu zamiast próbować go rozwiązać. Na bardzo prymitywnym poziomie korzystanie z płynnego nieliniowego solvera programistycznego przypomina korzystanie z metody Newtona, z dodatkowym algorytmicznym wyrafinowaniem zapewniającym niezawodność i wydajność. IPOPT jest naprawdę dobrym oprogramowaniem do tego celu; istnieje litania innych solverów (wystarczy spojrzeć na listę dostępnych solverów dla GAMS , AMPL lub NEOS . Jeśli wybierzesz taką metodę, pamiętaj o kilku zastrzeżeniach:
źródło
Sugerowałbym spojrzenie na metodę homotopii. Chociaż nie jest to symboliczne, stworzy wszystkie rozwiązania twojego problemu. Aby łatwo sprawdzić bibliotekę:
http://homepages.math.uic.edu/~jan/PHCpack/phcpack.html
źródło