Деньги, как известно, имеют различные функции. Одной из них является непрестанное движение денег в обращении, обслуживание процесса обращения. Без выполнения деньгами этой функции торговля была бы невозможна.

Rozwiązywanie równań nieliniowych w Matlab

  1. Ogólne informacje
  2. Matlab Standard Features
  3. Metoda wyszukiwania Matlab
  4. Prosta metoda iteracji Matlab
  5. Metoda pół podziału Matlab
  6. 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:
Tutaj ustawiliśmy przybliżone granice wzdłuż osi x, dzięki czemu można wykreślić wykres i zobaczyć, jak zachowuje się funkcja
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: Proces kończy się, gdy tylko warunek zostanie spełniony:   to znaczy, gdy tylko osiągnięta zostanie określona dokładność 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 .

Podobny