- Ogólne informacje
- Matlab Standard Features
- Metoda wyszukiwania Matlab
- Prosta metoda iteracji Matlab
- Metoda pół podziału Matlab
- Wniosek
Dzień dobry W tym artykule przeanalizujemy rozwiązanie prostych równań nieliniowych za pomocą narzędzi Matlab. Przyjrzyjmy się działaniom obu standardowych funkcji i zaprogramujmy się za pomocą trzech wspólnych metod rozwiązywania równań nieliniowych.
Ogólne informacje
Równania zawierające zmienne w stopniach, które różnią się od jednego, lub które mają nieliniowe wyrażenia matematyczne (root, wykładnik, logarytm, sinus, cosinus itp.), A także o postaci f (x) = 0, nazywane są nieliniowymi. W zależności od złożoności takiego równania, metody są stosowane do rozwiązywania równań nieliniowych.
W tym artykule oprócz standardowych funkcji Matlab rozważymy następujące metody:
- Metoda brutalnej siły
- Prosta metoda iteracji
- Metoda połowy podziału
Rozważmy pokrótce ich algorytmy i zastosujmy je, aby rozwiązać konkretny problem.
Matlab Standard Features
Aby rozwiązać równania nieliniowe w Matlabie, istnieje funkcja fzero . Przyjmuje jako argument samą funkcję, którą rozwiązujemy, oraz segment, w którym następuje wyszukiwanie pierwiastków równania nieliniowego.
I natychmiast przeanalizuj przykład:
Rozwiąż równanie nieliniowe x = exp (-x), po uprzednim określeniu przedziałów, w których istnieją rozwiązania równania.
Więc najpierw musisz doprowadzić równanie do pożądanej postaci: x - exp (-x) = 0 , a następnie określić przedziały, w których będziemy szukać rozwiązania równania. Istnieje wiele metod określania interwałów, ale ponieważ przykład jest dość prosty, używamy metody graficznej.
x = -4,0: 0,001: 4,0; y = x - exp (-x); wykres (x, y); siatka na;
Tutaj ustawiliśmy przybliżone granice wzdłuż osi x, dzięki czemu można wykreślić wykres i zobaczyć, jak zachowuje się funkcja. Oto harmonogram:
Z wykresu wynika, że przedział [0; 1] jest korzeniem równania (gdzie y = 0), odpowiednio, użyjemy tego przedziału w przyszłości. Im dokładniej wybierany jest interwał, tym szybciej dojdzie do rozwiązania równania, a dla złożonych równań poprawny wybór przedziału określa błąd, z jakim uzyskana zostanie odpowiedź.
x0 = fzero ('(x - exp (-x))', [0.0 1.0]); x0 = 0,5671
Korzystając ze standardowej funkcji Matlab, znajdujemy pierwiastek równania nieliniowego i otrzymujemy. Teraz do weryfikacji wyświetlmy to wszystko graficznie:
wykres (x, y); siatka na; trzymaj się; wykres (x0,0, „r *”);
Jak widać, wszystko jest dość dokładnie przeliczone. Teraz badamy tę samą funkcję przy użyciu innych metod i porównujemy uzyskane wyniki.
Metoda wyszukiwania Matlab
Najprostsza metoda, polegająca na tym, że najpierw ustawiasz przybliżenie x (najlepiej na lewo od zamierzonego pierwiastka) i wartość kroku h . Następnie, gdy warunek f (x) * f (x + h)> 0 jest spełniony, wartość x jest zwiększana o wartość kroku x = x + h . Gdy tylko warunek przestanie być spełniany, oznacza to, że rozwiązanie równania nieliniowego znajduje się w przedziale [x; x + h].
Teraz zaimplementujmy metodę brute force w Matlab:
f = inline ('x - exp (-x)'); h = 0,0001; % ustaw krok x = 0.0; % przybliżenia początkowego i = 0; % liczba iteracji podczas (f (x) * f (x + h))> 0 x = x + h; i = i + 1; koniec x% wyświetla rozwiązanie i% i zużytą liczbę iteracji
Najlepiej jest utworzyć nowy plik m, w którym napisze kod. Po wywołaniu otrzymujemy następujące dane wyjściowe:
x = 0,5671 i = 5671
Deklarujemy funkcję za pomocą bardzo użytecznego polecenia inline , podczas gdy w pętli, gdy spełniony jest warunek braku korzeni (lub nawet liczby korzeni), dodajemy wartość kroku do x . Oczywiście im bardziej dokładne przybliżenie początkowe, tym mniej iteracji trzeba wydać.
Prosta metoda iteracji Matlab
Metoda ta polega na konwersji funkcji na postać: x = g (x) . Transformacje te można wykonać na różne sposoby, w zależności od rodzaju funkcji początkowej. Ponadto należy określić interwał, w którym będzie wykonywany proces iteracji, a także początkowe przybliżenie. Sam proces opiera się na schemacie xn = g (xn-1) . Oznacza to, że iteracyjnie przechodzimy od poprzedniej wartości do następnej.
Proces kończy się, gdy tylko warunek zostanie spełniony: to znaczy, gdy tylko osiągnięta zostanie określona dokładność. I od razu przeanalizuj implementację metody prostych iteracji w Matlabie dla przykładu podanego powyżej.
f = inline ('x - exp (-x)'); x0 = 0,0; % przybliżenia początkowego eps = 0,00001; % dokładności N = 100; % liczby iteracji, tak aby nie było pętli g = inline ('exp (-x)'); x1 = g (x0); % pierwsza wartość dla i = 1: N% tworzy maksymalnie 100 iteracji, jeśli abs (x1 - x0) <= koniec przerwy eps x0 = x1; x1 = g (x0); koniec x1 i
Wszystko powinno być tutaj jasne, z wyjątkiem jednej rzeczy: dlaczego ustawić liczbę iteracji? Jest to konieczne, aby program nie zawiesił się i nie wykonał niepotrzebnych iteracji, a także dlatego, że program nie zawsze może obliczyć rozwiązanie z wymaganą dokładnością - dlatego liczba iteracji powinna być ograniczona.
A oto wyjście programu:
x1 = 0,5671 i = 22
Oczywiście metoda prostych iteracji jest znacznie szybsza i zapewnia dokładne rozwiązanie.
Metoda pół podziału Matlab
Metoda jest dość prosta: istnieje segment poszukiwania rozwiązania [a; b], najpierw znajdź wartość funkcji w punkcie środkowym c , gdzie c = (a + b) / 2 . Następnie porównywane są znaki f (a) i f (c). Jeśli znaki są różne, to rozwiązanie znajduje się w segmencie [a; c], jeśli nie, to rozwiązanie znajduje się w segmencie [c; b]. W ten sposób zmniejszyliśmy obszar o 2 razy. Taka redukcja następuje dalej, dopóki nie osiągniemy określonej dokładności.
Przejdźmy do implementacji metody w Matlab:
f = inline ('x - exp (-x)'); eps = 0,00001; a = 0,0; b = 1,0; i = 0; podczas gdy abs (a - b)> eps c = (a + b) / 2; jeśli ((f (c) * f (a)) <0) b = c; inaczej a = c; koniec i = i + 1; koniec c i
Wszystkie najważniejsze rzeczy dzieją się w cyklu: sukcesywnie zmniejszamy obszar, w którym znajduje się rozwiązanie, aż do osiągnięcia określonej dokładności.
Oto, co się stało na wyjściu:
c = 0,5671 i = 17
Ta metoda działa dobrze, gdy przedział czasu, w którym znajduje się rozwiązanie, jest poprawnie zdefiniowany. Jednak prosta metoda iteracji jest uważana za najbardziej dokładną i szybką.
Wniosek
Dzisiaj przyjrzeliśmy się rozwiązywaniu równań nieliniowych w Matlabie. Teraz znamy metody wyliczania, pół podziału, proste iteracje. A także, gdy implementacja metody nie jest dla nas ważna, możesz użyć standardowej funkcji w Matlab.
To wszystko - dziękuję za uwagę. W następnym artykule przeanalizujemy rozwiązywanie układów równań nieliniowych w matlab .