wykres funkcji pierwiastki

Podobne dokumenty
Problem Herona. lim(x i+1 x i ) 0. lim x i0 +1 x i0 < ǫ.

1 Metody rozwiązywania równań nieliniowych. Postawienie problemu

Rozwiązywanie równań nieliniowych

Metody rozwiązywania równań nieliniowych

Zagadnienia - równania nieliniowe

RÓWNANIA NIELINIOWE Maciej Patan

Wybrane metody przybliżonego. wyznaczania rozwiązań (pierwiastków) równań nieliniowych

Metody numeryczne w przykładach

METODY ROZWIĄZYWANIA RÓWNAŃ NIELINIOWYCH

Wstęp do metod numerycznych Rozwiazywanie równań algebraicznych. P. F. Góra

ROZWIĄZYWANIE RÓWNAŃ NIELINIOWYCH

Laboratorium 5 Przybliżone metody rozwiązywania równań nieliniowych

W wielu obliczeniach w matematyce bądź fizyce wykonanie niektórych kroków zależy od spełnienia warunku.

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

POSZUKIWANIE ZER FUNKCJI F(x). Zad. 2. Korzystając z metody punktu stałego znaleźć miejsce zerowe funkcji f(x) =

METODY NUMERYCZNE. Wykład 4. Numeryczne rozwiązywanie równań nieliniowych z jedną niewiadomą. prof. dr hab.inż. Katarzyna Zakrzewska

Matematyka stosowana i metody numeryczne

Wprowadzenie Metoda bisekcji Metoda regula falsi Metoda siecznych Metoda stycznych RÓWNANIA NIELINIOWE

1 Równania nieliniowe

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Metody numeryczne I Równania nieliniowe

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

METODY NUMERYCZNE. Wykład 4. Numeryczne rozwiązywanie równań nieliniowych z jedną niewiadomą. Rozwiązywanie równań nieliniowych z jedną niewiadomą

Równania nieliniowe, nieliniowe układy równań, optymalizacja

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

Metody numeryczne. dr Artur Woike. Ćwiczenia nr 2. Rozwiązywanie równań nieliniowych metody połowienia, regula falsi i siecznych.

Równania nieliniowe, nieliniowe układy równań, optymalizacja

Iteracje. Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony.

Iteracyjne rozwiązywanie równań

Zajęcia: VBA TEMAT: VBA PROCEDURY NUMERYCZNE Metoda bisekcji i metoda trapezów

WHILE (wyrażenie) instrukcja;

WHILE (wyrażenie) instrukcja;

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

Metody numeryczne Wykład 7

Rozwiązywanie równań nieliniowych i ich układów. Wyznaczanie zer wielomianów.

Rzut oka na współczesną matematykę spotkanie 3: jak liczy kalkulator i o źródłach chaosu

PASCAL. Etapy pisania programu. Analiza potrzeb i wymagań (treści zadania) Opracowanie algorytmu Kodowanie Kompilacja Testowanie Stosowanie

Wprowadzenie do metod numerycznych Wykład 2 Numeryczne rozwiązywanie równań nieliniowych

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

dr inż. Damian Słota Gliwice r. Instytut Matematyki Politechnika Śląska

Konstrukcja alternatywy

Wstęp do programowania

Funkcja kwadratowa. f(x) = ax 2 + bx + c,

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a

ZADANIA OPTYMALIZCJI BEZ OGRANICZEŃ

Wprowadzenie komentarzy do programu

Równania nieliniowe. LABORKA Piotr Ciskowski

Podstawy programowania

Pascal - wprowadzenie

Jerzy Nawrocki, Wprowadzenie do informatyki

2.8. Algorytmy, schematy, programy

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

INSTRUKCJA ITERACYJNA REPEAT. repeat Instrukcja_1; Instrukcja_2; {... } Instrukcja_N; until wyr ; INSTRUKCJA ITERACYJNA WHILE

Otrzymaliśmy w ten sposób ograniczenie na wartości parametru m.

Wykład IV Algorytmy metody prezentacji i zapisu Rzut oka na język PASCAL

Elementy metod numerycznych

Metody numeryczne. materiały do wykładu dla studentów

Programowanie Delphi obliczenia, schematy blokowe

Jerzy Nawrocki, Wprowadzenie do informatyki

Obliczenia iteracyjne

Ilość cyfr liczby naturalnej

Rozwiązania prac domowych - Kurs Pochodnej. x 2 4. (x 2 4) 2. + kπ, gdzie k Z

Programowanie w Turbo Pascal

INSTRUKCJE PĘTLI, INSTRUKCJA WYBORU. Instrukcja pętli For to do

Metody numeryczne. Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet Zielonogórski

PRZYBLI ONE METODY ROZWI ZYWANIA RÓWNA

1. Informatyka - dyscyplina naukowa i techniczna zajmująca się przetwarzaniem informacji.

ALGORYTMY MATEMATYCZNE Ćwiczenie 1 Na podstawie schematu blokowego pewnego algorytmu (rys 1), napisz listę kroków tego algorytmu:

Podstawy programowania

ELEMENTY ANALIZY NUMERYCZNEJ ELEMENTY ANALIZY NUMERYCZNEJ. Egzamin pisemny zestaw 1 24 czerwca 2019 roku

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

Palindromy. Przykładowe rozwiązanie

KURS PASCAL A. 1.Wprowadzenie

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Matematyka Dyskretna. Andrzej Szepietowski. 25 czerwca 2002 roku

ELEMENTY ANALIZY NUMERYCZNEJ ELEMENTY ANALIZY NUMERYCZNEJ. Egzamin pisemny zestaw 1 26 czerwca 2017 roku

FUNKCJA KWADRATOWA. Zad 1 Przedstaw funkcję kwadratową w postaci ogólnej. Postać ogólna funkcji kwadratowej to: y = ax + bx + c;(

FUNKCJA LINIOWA - WYKRES

for (inicjacja_warunkow_poczatkowych; wyrazenie_warunkowe; wyrazenie_zwiekszajace) { blok instrukcji; }

Metody Numeryczne. Wojciech Szewczuk

Elementy programowania komputerów

SCENARIUSZ LEKCJI. Wielomiany komputerowe wykresy funkcji wielomianowych

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Język programowania PASCAL

SCENARIUSZ LEKCJI. Miejsca zerowe funkcji kwadratowej i ich graficzna prezentacja

Wyszukiwanie największej spośród czterech liczb. Przykładowe rozwiązanie

POWTÓRKA ROZDZIAŁU III FUNKCJA LINIOWA

Scenariusz lekcji. podać przykłady zalet użycia takiej instrukcji; opisać algorytm obliczania średniej n liczb;

Równania liniowe i nieliniowe

Logarytmy. Funkcje logarytmiczna i wykładnicza. Równania i nierówności wykładnicze i logarytmiczne.

Algorytm. Krótka historia algorytmów

Optymalizacja ciągła

x y

Złożoność informacyjna Kołmogorowa. Paweł Parys

Instrukcje cykliczne (pętle) WHILE...END WHILE

Funkcje wymierne. Jerzy Rutkowski. Działania dodawania i mnożenia funkcji wymiernych określa się wzorami: g h + k l g h k.

Transkrypt:

1. Przykład: REGULA FALSI Literatura: Schneider, Weingart, Perlman, Programming..., Wiley, 1982. Zajmiemy się teraz problemem znajdowania miejsc zerowych jakiejś funkcji f(x). Jest to bardzo stary i ważny problem matematyczny. Miejsce zerowe funkcji f(x)albopierwiastekrównania f(x) = 0,totakipunkt x wktórym f(x )jest zerem.przykłademfunkcji f(x)możebyćchociażbysin 3 (x) x 2. f(x) x1 x2 x3 x wykres funkcji pierwiastki W celu znalezienia pierwiastków będziemy korzystać z metody zwanej regula falsi(złego położenia). Nie jest to najlepszy algorytm i na pewno można znaleźć wiele lepszych od niego, ale dla naszego celu, którym jest nauka procesu budowy programu ta metoda jest w sam raz. Poszukiwanie pierwiastka zaczyna się od tego, że mamy najpierw dwa punkty, które obramowują pierwiastek, tzn. mamy takie wartości x 1 i x 2,że f(x 1 )if(x 2 )mająprzeciwneznaki.załóżmyżewyglądatotak jak na rysunku. f(x2) x1 x3 x2 f(x1) pierwiastek Przezpunkty(x 1,f(x 1 ))i(x 2,f(x 2 ))prowadzimylinięprostą.jejprzecięciezosią x(y = 0)wyznaczapunkt (x 3,0)któregowspółrzędna x-owarówna x 3 leżybliżej pierwiastkaniż x 1 i x 2.Odrzucamypunktx1zastępującgoprzez x 3 ipowtarzamy processekcjiprostąuzyskującnowypunkt (x 4,f(x 4 ). Wtensposóbdostaniemy ciągpunktów x 3, x 4, x 5,...,którezbliżająsiędopierwiastkarównania,awięcdo punktu (x,0).tensposóbrozwiązywaniaproblemównosinazwęiteracji. 1

f(x2) x1 x3 x4 x5 f(x4) f(x3) x2 f(x1) Proces poszukiwania pierwiastka powinniśmy kiedyś zakończyć. Można to zrobićnp. wtedygdy f(x) < ǫgdzie ǫjestbardzomałąliczbądodatnia. Niemoże to jednak być liczba dowolnie mała gdyż nie możemy przekroczyć tutaj możliwości komputera. Z jednej strony nie pozwala na to dyskretna arytmetyka, a z drugiej czas obliczeń. Nie może być on zbyt długi. f(x) Może się też zdarzyć, że funkcja, którą dostaliśmy nie posiada miejsc zerowych. Jak to stwierdzić? Co z tym dalej zrobić? Jest jeszcze kilka niejasności, np. jekie ǫ wziąć dla wyznaczenia zbieżności, itd. Zrobimy, pomimo tych trudności, szkic algorytmu. Sformułujmy jeszcze raz lecz teraz już precyzyjniej stojące przed nami zadanie. Programwczytateżdokładność ǫzjakąmabyćwyznaczonypierwiastek x taki,że f(x ) < ǫ,gdzie ǫ > 0.Wprzypadkuznalezieniapierwiastkaprogramma wypisać informację: Pierwiastek = xxxxx.xxxx z dokładnością 0.xxxx A teraz opiszemy słownie co ma zrobić nasz program. Jest to szkic algorytmu. START przeczytaj x1, x2 takie, że leżą one po obu bokach pierwiastka przeczytaj dokładność epsilon ustaw wskaźnik znaleziony-pierwiastek na nie dopóki nie znaleziony-pierwiastek, dopóty wykonuj wyznacz x3 metodą sekcji jeśli x1 i x 3 są po jednej stronie pierwiastka to wstaw do x1 wartość x3 w innym wypadku wstaw do x2 wartość x3 sprawdź dokładność jeśli dokładność < epsilon to wstaw do znaleziony-pierwiastek tak 2 x

koniec pętli "podczas gdy" wypisz odpowiedź STOP Ogólne sformułowanie, które tu zaprezentowaliśmy jest dość proste. Nie jest jednak precyzyjne. Spróbujmy się zastanowić nad tym co należy udokładnić. 1.Skąddostaniemywartościpoczątkowe x 1, x 2 leżącepobokachpierwiastka? Najprostsza metoda ich otrzymania: od użytkownika programu(nie zawsze dobra). Program sprawdzi tylko czy są one dobre, tzn. czy leżą po przeciwnych stronach; sprawdzanie polega na zbadaniu znaków funkcji f w tych punktach(najlepiej jest zbadać znak iloczynu!). Oto poprawka wstaw nie do dobre-dane dopóki nie (dobre-dane) wykonuj jeśli x1 i x2 leżą po obu bokach pierwiastka to wstaw tak do dobre-dane w przeciwnym wypadku wypisz podana wartość x1 i x2 są złe wypisz próbuj jeszcze raz Chcemyteżbyprogramdałosięzatrzymaćgdyużytkownikniemajużpomysłów na następną pare danych liczbowych między którymi znajduje się domniemany pierwiastek. Niech więc np. podanie dwu zerowych wartości: 0, 0 zatrzyma program. wstaw nie do dobre-dane wstaw nie do rezygnuje dopóki nie(dobre-dane), dopóty wykonuj wczytaj x1, x2 jeśli x1 i x2 są zerami to wstaw tak do rezygnuje w przeciwnym razie jeśli x1, x2 leżą po przeciwnych stronach pierwiastka to wstaw tak do dobre-dane w przeciwnym wypadku wypisz podana wartość x1 i x2 są złe wypisz próbuj jeszcze raz d-d oznacza tutaj w skrócie"dopóki-dopóty". Wartośćx 3 znajdujemyzewzoru x 3 = x 2f(x 1 ) x 1 f(x 2 ) f(x 1 ) f(x 2 ) Zauważmy,żewprzypadkugdy f(x 1 ) = f(x 2 )tomamytudzielenieprzezzero!na szczęściesprawdziliśmyznaki f(x 1 )if(x 2 )iwiemyjużwtymmiejscualgorytmu, żesąoneróżne,awięcf(x 1 )if(x 2 )sąróżneidzielenieprzezzeroniematumiejsca. Teliniegdziewyznaczasię x 3 możnaterazzastąpićsekwencjąkroków wylicz f(x1) wylicz f(x2) wstaw (x2 * f(x1) - x1 * f(x2)) / (f(x1) - f(x2)) do x3 Dalejzauważmy,żeprocessprawdzaniaczypunkty x 1 i x 3 lub x 2 i x 3 leżąpotej samej stronie pierwiastka polega na sprawdzeniu znaków i odrzuceniu punktu, który matakisamznakjak x 3.Zapiszemywięc: 3

jeśli (f(x1)<0 i f(x3)<0) lub (f(x1)>0 i f(x3)>0) to wstaw x3 do x1 w przeciwnym razie wstaw x3 za x2 Musimy jeszcze zabezpieczyć się przed sytuacją gdy zadana dokładność okaże się zamała,tzn. ǫbędzietakmałe,żeprogrambędziepracowaćbezskutku,tzn.nie osiągnie tej dokładności, będzie ciągle powtarzał pętlę"dopóki-dopóty". Policzymy w tym celu liczbę przebiegów pętli i zatrzymamy ją gdy liczba ta przekroczy zadaną z góry wartość, która nazwiemy;licznik. wstaw 0 do licznik dopóki nie (znaleziony-pierwiastek) i (licznik < MaksIter), dopóty wykonuj...... zwiększ licznik o 1 Zbierzemy teraz wszystkie kawałki algorytmu. Tak, mniej więcej, wygląda cały poprawiony algorytm poszukiwania pierwiastków. Wciąż nie jest on doskonały. Ciągle brakuje mu wielu różnych funkcji(możliwości), ale jak różny jest on od algorytmu wyjściowego! Poprawiliśmy go i ulepszyli w porównaniu z początkowym. wstaw nie do dobre-dane wstaw nie do rezygnuje dopóki nie(dobre-dane), dopóty wykonuj wczytaj x1, x2 jeśli x1 i x2 są zerami to wstaw tak do rezygnuje w przeciwnym razie jeśli x1, x2 leżą po przeciwnych stronach pierwiastka to wstaw tak do dobre-dane w przeciwnym wypadku wypisz podana wartość x1 i x2 są złe wypisz próbuj jeszcze raz wstaw 0 do licznik dopóki nie (znaleziony-pierwiastek) i (licznik < MaksLIter), dopóty wykonuj wylicz f(x1) wylicz f(x2) wstaw (x2 * f(x1) - x1 * f(x2)) / (f(x1) - f(x2)) do x3 wyznacz x3 metodą sekcji jeśli (f(x1)<0 i f(x3)<0) lub (f(x1)>0 i f(x3)>0) to wstaw x3 do x1 w przeciwnym razie wstaw x3 do x2 sprawdź dokładność: jeśli dokładność < epsilon to wstaw do znaleziony-pierwiastek tak zwiększ licznik o 1 wypisz Znaleziono pierwiastek x=, wypisz x3 4

STOP Uwagi. Dlaskróceniazapisumożnabyłoużywacnp. konstrukcji a > blub b := a zamiast opisu"wstaw a do b". Podobnie, można używać skrótów P(prawda) lub T(true)zamiast tak oraz F(fałszlub false). Słowa trueifalsesąslowami zarezerwowanymi w języku Pascal(w Fortran są to.true. i.false.. A teraz kolej na sam program napisany w Pascalu. Tak naprawdę wystarczy przepisać powyższy algorytm prawie dosłownie w języku Pascal(lub Turbo Pascal). 5

program regula_falsi; (* Program ma za zadanie znalezc pierwiastki rownania f(x)=0 zadanego przez uzytkownika przy zadanej dokladnosci obliczen epsilon *) function f(x: real): real; f:=x*x-10.0 end; const MaksIter = 100; var licznik: integer; (* licznik iteracji *) epsilon: real; (* wzgledna dokladnosc *) rezygnuje: boolean; (* wskazuje czy opuszczamy dany przedzial *) dobre_dane :boolean; (* wskazuje czy dane x1 i x2 sa OK *) znaleziony: boolean; (* wskazuje czy pierwiastek zostal znaleziony *) x1, x2 : real; (* przedzial zawierajacy pierwiastek *) x3 : real; (* nowy punkt znalezziony metoda regula falsi *) (* lokalizujemy przedzial w ktorym jest pierwiastek *) dobre_dane:=false; rezygnuje:=false; while not dobre_dane and not rezygnuje do writeln( Podaj dwa punkty startowe ); read(x1, x2); if (x1=0.0) and (x2=0.0) then rezygnuje:=true if ((f(x1)<=0.0) and (f(x2)>=0.0)) or ((f(x1)>=0.0) and (f(x2)<=0.0)) then dobre_dane:=true writeln( Podane liczby nie leza po przeciwnych ); writeln( stronach pierwiastka. Podaj inne. ); writeln( Podaj 0, 0 jesli chcesz zatrzymac program ) end end; { petli while } if rezygnuje then write( Nie znaleziono startowego przedzialu. Stop. ) { rozwiazanie zadania } writeln( Podaj dokladnosc rozwiazania ); 6

read(epsilon); znaleziony:=false; licznik:=0; while not znaleziony and (licznik <= MaksIter) do x3:=(x2*f(x1)-x1*f(x2))/(f(x1)-f(x2)); if f(x3)=0.0 then (* znaleziono dokladny pierwiastek *) znaleziony:=true; if ((f(x1)<=0.0) and (f(x3)<=0)) or ((f(x1)>=0.0) and (f(x3)>=0.0)) then x1:=x3 x2:=x3; licznik:=licznik+1; if (abs(f(x3))<=epsilon) then znaleziony:=true; end; (* petli while *) if znaleziony then writeln( pierwiastek =,x3, z dokladnoscia,epsilon) writeln( Po wykonaniu maksymalnej liczby iteracji, MaksIter); writeln( pierwiastka nie udalo sie znalezc ) end end end. A oto przykładowe wyniki programu uzupełnionego o dodatkową instrukcje writeln(...): writeln(x1:6:3,,x2:6:3,,x3:6:3,,licznik+1:2,,abs(f(x3)):8:4,,epsilon:10:7); która pozwoliła na prześledzenie wyników obliczeń w każdym kroku. Podaj dwa punkty startowe 1 15 Podaj dokladnosc rozwiazania.1 WYNIKI: x1 x2 x3 licz f(x3) epsilon 1.000 15.000 1.563 1 7.5586 0.1000000 1.563 15.000 2.019 2 5.9242 0.1000000 2.019 15.000 2.367 3 4.3975 0.1000000 2.367 15.000 2.620 4 3.1347 0.1000000 2.620 15.000 2.798 5 2.1708 0.1000000 2.798 15.000 2.920 6 1.4734 0.1000000 2.920 15.000 3.002 7 0.9864 0.1000000 3.002 15.000 3.057 8 0.6544 0.1000000 3.057 15.000 3.093 9 0.4315 0.1000000 3.093 15.000 3.117 10 0.2834 0.1000000 3.117 15.000 3.133 11 0.1856 0.1000000 7

3.133 15.000 3.143 12 0.1214 0.1000000 3.143 15.000 3.150 13 0.0793 0.1000000 pierwiastek = 3.1497168133E+00 z dokladnoscia 1.0000000000E-01 Program zatrzymał się po wykonaniu 13 iteracji zanim osiągnięta została zadana dokładność 0.1. Zadanie 1. Metoda bisekcji 2 Napisać algorytm znajdowania pierwiastka funkcji f(x) zwany metodą bisekcji. Polegaonnakolejnympodzialenadwiejednakoweczęściprzedziału (x 1,x 2 ), w którym znajduje się pierwiastek i kolejno na przyjęciu, że punkt podziału przybliża pierwiastek równania f(x) = 0. Założyć, że dokładność obliczeń ǫ = 1e 6. Narysować schemat N-S algorytmu. [Spis] Zadanie 2. Algorytm Newtona 2 Napisać algorytm rozwiązywania równania f(x) = 0 zwany algorytmem Newtona.Algorytmopierasięnarozwinięciufunkcjif(x)wszeregTayloraf(x ) = f(x)+f (x)(x x)+o((x x )2),gdziex jestdomniemanympierwiastkiem. Na tej podstawie można otrzymać iteracyjny algorytm rozwiązania zadania. Narysować schemat NS algorytmu. [Spis] Zadanie 3. Pierwiastki w przedziale 3 Zmodyfikować wybrany algorytm rozwiązywania równania f(x) = 0 tak, by mógł on sam znaleźć wszystkie możliwe rozwiązania w zadanym z góry przedziale lub by wypisał brak rozwiązań jeśli rozwiązania nie istnieją. [Spis] 8