Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych)

Transkrypt

Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych)
Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych)
Funkcja uwikłana (równanie nieliniowe) jest to funkcja, która nie jest przedstawiona jawnym przepisem,
wzorem wyrażającym zależność wartości funkcji od jej argumentu, lecz bardziej złożonym związkiem,
który nie daje się prosto przekształcić na jawny wzór.
Przykładem jest znane, historyczne równanie Keplera:
E − e ⋅ sin E = M
w którym niewiadomą, której wartość ma być wyznaczona, jest E. Niemożliwe jest takie przekształcenie
powyższego równania, aby otrzymać wzór typu E = ….
Innym, często przytaczanym przykładem, jest równanie:
e − x = sin x
gdzie z kolei niemożliwe jest podanie analitycznego przepisu na wyliczenie zmiennej x.
W przypadku tego rodzaju funkcji wartości niewiadomych znajduje się wykonując obliczenia numeryczne,
polegające wstawianiu różnych liczb aż do rozwiązania. Dawniej obliczenia tego typu trwały nierzadko
tygodniami, obecnie przy pomocy komputerów zajmują sekundy. Aby jednak ułatwić pracę, należy
wcześniej odpowiednio się przygotować.
Przede wszystkim zauważmy, że każde równanie zmiennej x można sprowadzić do postaci:
f ( x) = 0
W powyższym przykładzie będzie to:
f ( x) = e − x − sin x = 0
Znalezienie rozwiązania sprowadza się wtedy do wyznaczenia miejsc zerowych funkcji f(x).
Postępowanie, prowadzące do rozwiązania funkcji uwikłanych, wykonuje się w dwóch krokach:
1. Wstępne oszacowanie wartości niewiadomej.
Niekiedy (w przypadku równań opisujących konkretne zjawisko fizyczne) przybliżona wartość
niewiadomej jest znana. Np. w przypadku równania Keplera wiadomo, że E ~ M. W pozostałych
przypadkach metodą na przybliżone poznanie wartości niewiadomej jest narysowanie wykresu
funkcji f(x) i znalezienie miejsc zerowych (czyli wartości x, dla których f(x) = 0)
2. Numeryczne wyznaczenie wartości niewiadomej przy użyciu narzędzi optymalizacyjnych
dostępnych w programie MS Excel (Szukaj wyniku lub Solver).
Metodologię postępowania prowadzącego do wyznaczenia wartości niewiadomej przedstawię na
przykładzie równania e − x = sin x . Nic nie wiem na temat chociażby wartości przybliżonej x,
w związku z czym jej poszukiwanie rozpocznę od stworzenia wykresu. Niestety, program MS Excel
nie posiada możliwości wykreślenia wykresu funkcji wprost z jej wzoru, lecz z tabeli danych,
w związku z czym trzeba wcześniej stworzyć tabelę wartości x i f(x). Aby to uczynić, muszę
wcześniej określić dziedzinę (zakres wartości), w której będę poszukiwał wartości x. Zwykle
dziedzina ta wynika z teorii zagadnienia, w przypadku równań „matematycznych” należy ją
oszacować samodzielnie (często trzeba próbować kilkakrotnie, uściślając dziedzinę x na podstawie
kolejnych otrzymywanych wykresów).
Pamiętajmy, że jeśli np. w równaniu występuje logarytm niewiadomej, to jej dziedziną jest zakres
liczb dodatnich (począwszy praktycznie od zera, czyli od np. 1E-12).
Dla przykładowego, omawianego równania e − x = sin x funkcja f(x) będzie miała postać:
f ( x) = e − x − sin x
Dla tej funkcji tworzę tabelę wartości i wykres w dziedzinie x od -10 do 10 z krokiem równym 1:
Interesują nas miejsca zerowe funkcji f(x), których na powyższym wykresie nie widać – widoczne
jest jedynie, że funkcja szybko zbliża się do zera, lecz co się dzieje w pobliżu zera - nie wiadomo.
Aby się tego dowiedzieć, musimy tak przeskalować osie (zwłaszcza oś f(x)), aby punkty zerowania
stały się wyraźnie widoczne:
Po ustawieniu skali osi pionowej (f(x)) w zakresie od -10 do 10 stało się jasne, że analizowana
funkcja ma zapewne nieskończenie wiele miejsc zerowych, z których pierwsze występuje dla x~1,
drugie dla x~3, trzecie dla x~6 itd. Odnotowujemy postulowane wartości wybranych wartości x (dla
których funkcja się zeruje) na arkuszu – w kolejnym kroku wyznaczymy dokładne wartości tych
trzech rozwiązań analizowanej funkcji f(x):
Poniżej tworzymy komórki, zawierające postulowaną w danym momencie wartość zmiennej x
(przypisujemy nazwę x do tej wartości) oraz wartość analizowanej funkcji f(x) przy tej właśnie
wartości x:
W celu otrzymania wartości dokładnej poszukiwanej zmiennej x użyjemy opcji menu
Narzędzia/Szukaj wyniku.
W pole Ustaw komórkę wpisuję adres komórki, zawierającej analizowaną funkcję, w pole Wartość
wpisuję liczbę 0 (gdyż właśnie komórka, przechowująca formułę analizowanej funkcji ma osiągnąć
wartość 0), natomiast w pole Zmieniając komórkę adres komórki zawierającej postulowaną
wartość x (gdyż to ona ma się zmienić tak, aby komórka zawierająca funkcję się wyzerowała).
Po wypełnieniu trzech wskazanych pól klikam przycisk OK i otrzymuję okno Stan szukania
wyniku:
Aby stwierdzić, że rozwiązaliśmy analizowaną funkcję, w drugim wierszu tego okna musi wystąpić
napis znaleziono rozwiązanie, natomiast w wierszu Wartość bieżąca musi wystąpić bardzo mała,
zbliżona do zero liczba – liczba ta jest jednocześnie błędem wyznaczenia wartości x. W powyższym
przykładzie oznacza to, że wyznaczone x = 0,5892 ± 0,0009.
Otrzymany wynik x przy pomocy schowka kopiuję do odpowiedniej komórki w kolumnie
Wyznaczone i w analogiczny sposób kontynuuję wyznaczanie rozwiązań dla kolejnych wartości
postulowanych:
aż do wyznaczenia wszystkich poszukiwanych rozwiązań analizowanej funkcji:
Dokładniejsze rozwiązania otrzymam używając narzędzia optymalizacyjnego Solver (opcja menu
Narzędzia/Solver).
W tym przypadku w pole Komórka celu wpisuję adres komórki, zawierającej analizowaną funkcję,
w polu Równa zaznaczam opcję Wartość 0, natomiast w polu Komórki zmieniane wpisuję adres
komórki zawierającej postulowaną wartość x.
Po zatwierdzeniu okna poprzez kliknięcie przycisku Rozwiąż otrzymuję:
Warunkiem rozwiązania jest napis Solver znalazł rozwiązanie w pierwszym wierszu okna
wynikowego (jeżeli pisałoby Solver zbliżył się do rozwiązania, należałoby ponownie uruchomic to
narzędzie aż do otrzymania potwierdzenia znalezienia rozwiązania). Drugim, koniecznym,
warunkiem rozwiązania jest to, żeby wartość w komórce zawierającej formułę analizowanej funkcji
była zbliżona do zera – jest to jednocześnie błąd wyznaczenia wartości x. W opisywanym
przykładzie wynik wynosi: x = 0,58853276 ± 0,00000002, czyli znacznie dokładniej niż poprzednią
metodą. Czynność tę powtarzamy dla kolejnych wartości postulowanych:
Zaletą użycia Solvera zamiast Szukaj wyniku jest, poza zwiększoną dokładnością, zapamiętywanie
przez niego ustawień - nie trzeba ponownie wypełniać zawartości jego pól przy ustalaniu kolejnych
rozwiązań analizowanego równania.
Z przykładem znalezienia rozwiązania funkcji uwikłanej można zapoznać się na stronie:
http://vistula.wis.pk.edu.pl/~sciezor/uwiklane.xls
Szukanie rozwiązań układów równań nieliniowych
Innym przykładem zastosowania narzędzi optymalizacyjnych do szukania zbioru rozwiązań
układów równań nieliniowych. Podobnie, jak w przypadku szukania rozwiązania pojedynczego
równania, każde z równań możemy zawsze napisać w postaci:
f(x,y,…) = 0
g(x,y,…) = 0
…………
h(x,y,…) = 0
W tym przypadku musimy jednak znać wartości początkowe x0,y0,…, w pobliżu których szukane
będzie rozwiązania, gdyż wykonanie odpowiedniego wykresu jest zwykle niemożliwe. Wartości te
podaje się zwykle w formie (x0,y0,…) i podaje się, że szukamy rozwiązań w pobliżu punktu
(x0,y0,…). Naszym celem jest znalezienie takich wartości x,y,…, dla których funkcje f(x,y,…),
g(x,y,…) itd. są równe zero. W związku z tym, że cel musi być pojedynczy i ściśle określony,
liczymy sumę kwadratów wszystkich tych funkcji. Z tego, że suma kwadratów funkcji jest równa
zero wynika, że każda z tych funkcji musi być równa zero.
n
∑ f ( x, y,K) = 0
i =1
i
W praktyce, w związku ze skończoną dokładnością obliczeń numerycznych, osiągnięcie wartości 0
jest w praktyce niemożliwe, toteż zwykle szukamy takich wartości zmiennych x,y,…, dla których
powyższa suma osiąga wartość minimalną. Warunkiem stwierdzenia, że układ został rozwiązany
jest nie tylko osiągnięcie przez powyższą sumę wartości minimalnej (gdyż może to być jedynie
lokalne minimum), lecz również suma ta (jak i każda ze składowych funkcji) musi mieć wartość
zbliżona do zera.
Implementację wyżej opisanej metody w arkuszu kalkulacyjnym przedstawię na przykładzie układu
równań:
e x + log y = 3

sin x + y 3 = 4
Rozwiązań (oczywiście dodatnich) poszukamy w pobliżu punktu (1,1).
następnie liczymy sumę kwadratów obu funkcji:
W efekcie:
W celu minimalizacji otrzymanej sumy kwadratów użyjemy Solvera, gdzie jako Komórkę celu
ustawiamy komórkę, zawierającą sumę kwadratów, w pozycji równa ustawiamy Min (a nie
wartość 0!), natomiast jako komórki zmieniane zaznaczamy blok komórek zawierający wartości
x i y. Ponieważ w zadaniu dodano, że rozwiązania mają być dodatnie, dodajemy warunek
ograniczający:
W efekcie przygotowany do pracy Solver powinien w tym przykładzie wyglądać następująco:
Po naciśnięciu przycisku Rozwiąż otrzymujemy informację:
Ponieważ w pierwszym wierszu widnieje tekst Solver zbliżył się do aktualnego rozwiązania,
zgadzamy się z tym i uruchamiamy go ponownie aż do uzyskania okna:
Oznacza to, że Solver znalazł takie wartości x i y, dla których suma kwadratów funkcji przyjmuje
wartość minimalną. Czy jest to jednak poszukiwane rozwiązanie?
W celu odpowiedzi na to pytanie analizujemy otrzymane rozwiązania:
Widzimy, że wartości zarówno f(x,y), g(x,y), jak również sumy kwadratów są bardzo małe (zbliżone
do zera). Oznacza to, że znalezione minimum sumy kwadratów jest jednocześnie jej miejscem
zerowym, czyli wyznaczone wartości x i y są dodatnimi rozwiązaniami analizowanego układu
równań nieliniowych w pobliżu punktu (1,1).
Z przykładem znalezienia rozwiązań układu równań nieliniowych można zapoznać się na stronie:
http://vistula.wis.pk.edu.pl/~sciezor/uwiklane.xls