MN 08 Równni nieliniowe Wprowdzenie Podstwowe pytni 1. Pytnie: Czy komputer umie rozwiązywć równni nieliniowe f(x) = 0? Odpowiedź (uczciw): nie. 2. P: To jk on to robi? O: Dokłdnie tk, jk przy cłkowniu oszukuje. 3. Metody rozwiązywni równń: Ślepy chodzi po bgnie Zstępujemy funkcjef(x) jej proksymcją (np. liniową) i rozwiązujemyxb = 0 Loklizcj pierwistków Ogrniczeni Rozwiązujemy równnief(x) = 0 dlx [,b] Szukmy tylko pierwistków rzeczywistych, pojedynczych, czyli pomijmy: 1. f(x) = x 2 1 = (xı)(x ı) gdzie ı = 1 2. f(x) = x 2 = (x 0)(x 0) Loklizcj pierwistków (roots brcketing) Wyznczmy, b tkie, że < b orz f() < 0, f(b) > 0 lub n odwrót. Wtedy dl f(x) ciągłej n[,b] istnieje przynjmniej jeden pierwistekx [,b] Njbrdziej prktyczne rozwiąznie w przypdku pojedynczego równni zrobić dokłdny wykres Automtyzcj loklizcji pierwistków metod poszukiwni przyrostowego (incrementl serch method) 1. Obliczmy wrtości f(x) z krokiemhdl x =,h,2h,...b 2. Kończymy obliczeni jk tylkof(x i 1 ) i f(x i ) będą mieć różne znki Metod poszukiwni przyrostowego Kiedy t metod NIE prcuje h h h x i x i1 x i x i1 x i 1 x i x i 1 x i
1.6.2 23-4-2012 Równni nieliniowe 2 Listing 1: Metod poszukiwni przyrostowego function [x1, x2] = rootserch(fun,, b, h) // fun,, b, h funkcj, początek, koniec zkresu, przyrost // x1,x2 zkres z pierwistkiem ; %nn, %nn jego brk x1 = ; f1 = fun(x1); x2 = h; f2 = fun(x2); while sign(f1)==sign(f2) // wolniejsze od f1 f2 > 0.0 lecz biezpieczne if x1 >= b // Brk pierwistku, powrót x1 = %nn; x2 = %nn; return x1 = x2; f1 = f2; // Drugi punkt stje się pierwszym x2 = x2 h; // Nowy drugi punkt if (x2 > b), x2 = b; // Korekt n końcu odcink f2 = fun(x2); function function y=f(x) y=x^2 2; function [,b] = rootserch( f,0,2,0.1) 1. Pierwistek jest podwójny (poczwórny, itp) 2. Mmy 2 pierwistki obok siebie, n odległości mniejszej od h 3. Mmy nieprzystą ilość pierwistków obok siebie, n odległości mniejszej od h 4. Mmy punkt osobliwy Progrm relizujący metodę poszukiwni przyrostowego listing 1 Czy możemy wyznczyć pierwistek dokłdnie? Szns n dokłdne wyznczenie pierwistk jest tylko wtedy, kiedy jest on lbo liczbą cłkowitą, lbo może być dokłdnie zpisny w postci binrnej (np.0,25 10 = 0,01 2 ) W tkiej sytucji mksymln dokłdność, którą możemy osiągnąć to znlezienie 2 liczb, różniących się o 1 osttni bit mntysy, pomiędzy którymi leży pierwistek W zleżności od rodzju funkcji f(x) równni dzielą się n dobrze lub źle uwrunkowne (wellconditioned i ill-conditioned)
1.6.2 23-4-2012 Równni nieliniowe 3 Jk kontrowć dokłdność wyznczni pierwistk? W zleżności od metody używnej do rozwiązywni równni, obliczeni kończymy kiedy spełniony zostnie jeden lub obydw z nstępujących wrunków: x i 1 ε x x i ε f ε f 1. Różnic pomiędzy kolejnymi przybliżonymi wrtościmi pierwistk jest mniejsz od złożonej dokłdności x, czyli x i x i 1 < ε x 2. f(x i ) < ε f Metod bisekcji (Bolzno?? [1781 1848]) - b - - b - - b Krok 1 Zczynmy od przedziłu, n którymf() i f(b) mją różne znki Krok 2 Dzielimy odcinek n pół, obliczmy wrtość funkcji i wyznczmy podzkres, n którym znjduje się pierwistek Krok 3 Wrcmy do kroku 2 Uwg W metodzie bisekcji w zsdzie nie trzeb obliczć wrtość funkcji, tylko wyznczć jej znk. 1. Metodę tę czsem przypisuje się Bolzno (zupełnie bezpodstwnie), tylko dltego, że uwż się go współutorem znnego twierdzeni Cuchy ego. 2. Inne nzwy tej metody metod równego podziłu, metod połowieni. Prosty przykłdx 2 2 = 0 dol=1; gor=2; while (gor dol)>%eps x = (gor dol)/2.0; if x^2 > 2 gor = x else dol = x WYNIKI 1) gor = 1.50000000000000 2) dol = 1.25000000000000 3) dol = 1.37500000000000... 51) gor = 1.41421356237310 52) gor = 1.41421356237310
1.6.2 23-4-2012 Równni nieliniowe 4 Zmin kroku krok 1 2 3 4 5 dec 1 1/2 1/4 1/8 1/16 bin 1 0.1 0.01 0.001 0.0001 Dokłdność metody bisekcji 1 0.0001 log(błąd) 1e 012 1e 016 Błd obliczeni 2 1/2 1/2 n 10 20 40 50 Krok 1. Metod bisekcji jest zbieżn bsolutnie, czyli wyzncz pierwistek zwsze 2. Prędkość zbieżności jest nisk, le ilość kroków możn obliczyć od rzu b 2 n ε n log((b )/ε) log2 1.443 log b ε 3. Ilość kroków nie zleży od funkcji, tylko od wielkości zkresu[,b] 4. Metod t jest nieco ślep... Metod zwykłej itercji Definicj Metod itercyjn rozwiązni równni f(x) = 0 poleg n zstąpieniu go równniem i przeprowdzeniu obliczeń zgodnie ze wzorem x = g(x) x i = g(x i 1 ) dopóki nie zostnie spełniony wrunek x i x i1 < ε Przykłd Mmy równniex x1 = 0. Ono m pierwistek n [0,3] (dlczego?). Możn próbowć go szukć lbo z pomocą wzoru x i = x i 1 1 lbo z pomocą wzoru x i = x 2 i 1 1 Metod itercyjn: prób udn 3 2 y = x1 y = x x 0 = 0 x 1 = 1x 0 = 1 x 2 = 1x 1 = 2 1,414 1... Tki proces itercyjny nzyw się zbieżny 0 x 0 x 1 x 2 0 1 2 3
1.6.2 23-4-2012 Równni nieliniowe 5 Listing 2: Metod itercyjn dl równni x x1 cler ; eps = 0.001; krok = 0; x1 = 1; dx = 2 eps; while dx > eps x0 = x1; x1 = sqrt(1 x0); krok = krok 1; dx = bs(x x0); disp("po "string(krok)" krokch wrtość pierwistk: "string(x1)); disp("dokłdność wyniku: "string(eps)); Metod itercyjn: prób nieudn Przypdek x 0 < x 6 3 y = x 2 1 x 0 = 1,3 x 1 = x 2 0 1 = 0,69 x 2 = x 2 1 1 = 0,5239... Przypdek x 0 > x y = x x 1 x x 1 0 x 0 x 2 1 3 x 0 = 1,8 x 1 = x 2 0 1 = 2,24 x 2 = x 2 1 1 = 4,076... Kryterium zbieżności To są procesy itercyjne rozbieżne Twierdzenie Proces itercyjny x i = g(x i 1 ) jest zbieżny dl x [,b], jeżeli dl tych wrtości x g (x) < 1 i rozbieżny, jeżeli g (x) > 1. Przykłd Dlg(x) = x1,g (x) = 1 2 x1 < 1 dl x [0,3] Dlg(x) = x 2 1,g (x) = 2x > 1 dl x [1,3] Progrm relizujący metodę itercyjną listing 2
1.6.2 23-4-2012 Równni nieliniowe 6 Regul Flsi (metod siecznych) f(x) f(x) f(x) x x x b x b x b x b 1. Metod dje dokłdną odpowiedź dl funkcji liniowej już po 1 itercji 2. Wzór do obliczeń b x = f() f(b) f() 3. Zbieżność obok pierwistk nie jest szybk 4. Kończymy obliczeni po spełnieniu jednego z wrunków f(x) < ε f i x < ε x Równniex 2 2 = 0 jeszcze rz Zbieżność, porównnie do metody bisekcji 1 0.0001 log(błąd) 1e 012 Bisekcj 1/2 n Regul Flsi 1/2 2.5n Wnioski Zbieżność generlnie jest o wiele szybsz od metody bisekcji Relnie metod t poleg n zminie funkcji przez jej proksymcję liniową (w postci siecznej) orz rozwiązniu odpowiedniego równni liniowego 1e 016 10 20 40 50 Krok Metod ponownie jest zbieżn bezwrunkowo Metod Ridder (1979) O wyższości funkcji exp(x) n innymi Pierwsze kroki przy obróbce dnych doświdczlnych Krok 1 Sprwdzmy, czy nie d się opisć wyniki równniem liniowym Krok 2 Jeżeli nie sprwdzmy, czy nie d się opisć wyniki równniem potęgowym y Ax n poprzez przeksztłceni osi wykresu do skli logrytmicznej Krok 3 Jeżeli nie sprwdzmy, czy nie d się opisć wyniki eksponentąy A exp(bx) Zlety funkcji exp(x) Zlety tej funkcji są znne:(e x ) = e x dx = e x ). Dodtkowoe x 0.
1.6.2 23-4-2012 Równni nieliniowe 7 Metod Ritter pomysł Jeżeli f(x 0 ) = 0 to g(x 0 ) = f(x 0 )e h(x) = 0 i n odwrót. Dlczego? Bo e h(x) 0, czyli nie m włsnych pierwistków Pomysł: dobiermy mnożnik e h(x) tk, żeby funkcj g(x) mił mksymlnie prosty ksztłt. Njlepiej żeby był funkcją liniową, bo wtedy pierwistek możn znleźć nlitycznie 1. Obliczmy wrtość funkcji w punkcie środkowymx 3 = (x 1 x 2 )/2. 2. W oprciu o 3 wrtości f(x) wyznczmy g(x) = f(x)e Q(x x 1) tk, żeby g(x) był funkcją liniową, dokłdniej, żeby punkty{x 1,g(x 1 )},{x 2,g(x 2 )} i{x 3,g(x 3 )} leżły n prostej. Tu exp(q(x x 1 )) jest prostownikiem dlf(x). Poniewż exp(q(x x 1 )) 0, więcg(x) = 0 dokłdnie tm, gdzief(x). 3. Wyznczmy kolejną przybliżoną wrtość pierwistkux 4 rozwiązując równnieg(x) = 0 przy złożeniu, że jest to lini prost. Jeżeli g(x) fktycznie jest funkcją liniową, to mmy dokłdną wrtość pierwistku po jednym kroku. Jeżeli nie mmy dobr wrtość przybliżoną i powtrzmy cły proces ż do spełnieni kryteriów. 4. Dokłdność tej metody (podstwowej w wielu progrmch typu Mthcd, itp.) jest o rząd większ od metody siecznych. Szczegóły metody Ridder Czy trzeb wyznczyć to Q? Nie koniecznie Jeżeli punkt {x 3,y 3 } leży n linii prostej pomiędzy{x 1,y 1 } i{x 2,y 2 }, toy 3 = (y 1 y 2 )/2 Dl funkcji g(x): g 1 = f 1 e Q(x 1 x 1 ) = f 1, g 2 = f 2 e Q(x 3 x 1 ) = f 2 e 2hQ, g 3 = f 3 e hq. Wrunek g 3 = (g 1 g 2 )/2, czyli f 3 e hq = (f 1 f 2 e 2hQ )/2 Oznczenie:A = e hq, równnie końcowe2f 3 A = f 1 f 2 A 2 jest równniem kwdrtowym dl A Osttecznie: x 4 = x 3 ±h f 3 f 2 3 f 1f 2 W osttnim równniu wybiermy znk plus, jeżelif 1 > f 2 i minus w przeciwnym przypdku.
1.6.2 23-4-2012 Równni nieliniowe 8 Metod Newton-Rphson tg(α) = f (x 0 ) f(x 0 ) α f(x 0 )/tg(α) x 0 x 1 x 0 x 1 x 0 x 1 x 2 x 0 x 1 x 2 x 3 x 0 1. Rozwinięcie w szereg Tylorf(x i1 ) = f(x i )f (x i )(x i1 x i )O(x i1 x i ) 2 2. Dl f(x i1 ) = 0 0 = f(x i )f (x i )(x i1 x i ) 3. Osttecznie x i1 = x i f(x i) f (x i ) 4. Jeżeli x - pierwistek, to dokłdność n krokui1 Kiedy t metod NIE dził ε ε 2 i i1 {}}{{}}{ x x i1 = f (x i ) 2f (x x i ) 2 (x i ) f (x) zmieni znk błę dne koło f (x) = 0 brk pochodnej Wnioski 1. Dokłdne rozwiąznie dowolnego równni f(x) = 0 w większości przypdków jest niemożliwe. 2. Dl podnej dokłdności oczekiwnej tol metody numeryczne zzwyczj pozwlją: lbo znleźć przedził[,b] tki, że x b, b tol lbo znleźć wrtość x tką, że f( x) tol 3. Zlec się stosownie tzw metod bezpiecznych (sfe methods), w których pierwistek jest poszukiwny poprzez zwężnie przedziłu[, b] 4. Wszystkie metody (siecznych, stycznych, Ridder) zstępują f(x) funkcją liniową 5. Njbrdziej prktyczne metody: przy brkuf (x) metod Ridder lub podobn (np. metod Brent); przy istnieniu możliwości obliczenif (x) metod Newton-Rphson. Uwg prktyczn. Jk njprościej w czsie kolokwium sprwdzić, czy zpisny wzór dl metody X jest poprwny? To proste dl funkcji liniowej kżdy wzór dje poprwną wrtość pierwistku już po 1 kroku. Więc wystrczy sprwdzić, czy dl f(x) = x wzór dje poprwn wrtość pierwistku x = 0. Progrm relizujący metodę siecznych listing 3. Dokłdny wynik mmy po 20 krokch. Progrm relizujący metodę Ridder listing 4. Dl x 2 = 2 dokłdną wrtość pierwistku mmy po 3 krokch. Progrm relizujący metodę Newton-Rfson listing 5. Dokłdny wynik mmy już po 4 krokch.
1.6.2 23-4-2012 Równni nieliniowe 9 Listing 3: Metod siecznych // Dekłrcj z pomocą f cji trdycyjnej function y=fun1(x), y = x^2 2; function // Albo tk deff("y=fun2(x)","y=x^2 2"); function root = regul_flsi (fun,, b, x_tol, f_tol) // fun nzw funkcji dl równni f(x) = 0 //, b zkres, n którym szukmy pierwistek // x_tol dokłdność, oś x domyślnie (b ) eps // f_tol dokłdność, oś y, domyślnie eps // Sprwdzmy, czy lub b nie są pierwistkmi f = fun(); if 0 == f, root = ; return; fb = fun(b); if 0 == fb, root = b; return; // Przy brku podnej dokłdności po osi y obliczmy // wrtość domyślną if rgn(2) < 5, f_tol = %eps; // Przy brku podnej dokłdności po osi x obliczmy // wrtość domyślną if rgn(2) < 4, x_tol = %eps (b ); // Wyznczmy, który z końców zkresu będziemy uwżć // z pierwsz przybliżoną wrtośc X if bs(f) < bs(fb), x_old = ; else x_old = b; // Włsnie metod siecznych while %t // Now wrtość X i wrtość f cji w tym punkcie x = f (b )/(fb f); fx = fun(x); if 0 == fx // Jeżeli to pierwistek wrcmy root = x; return; ; // Odległość pomiędzy kolejnymi wrtościmi X delt_x = bs(x x_old); x_old = x; // Obliczon wrtość X stje się końcem nowego zkresu if sign(fx)==sign(f), = x; f = fx; else b = x; fb = fx; ; if (bs(fx) < f_tol) or (delt_x < x_tol), root = x; return; function //// Progrm główny, wywołnie funkcji //// Dl funkcji trdycyjnej} //r = regul_flsi (fun1, 1, 2, 0.001, 0.001) //// lbo tk // r = regul_flsi (fun1, =1, b=2, x_tol=0.001, f_tol=0.001) //// Dl funkcji online} //r = regul_flsi (fun2, 1, 2, 0.001, 0.001)
1.6.2 23-4-2012 Równni nieliniowe 10 Listing 4: Metod Ridder function root = ridder(fun, x1,x2, tol ) // Metod Ridder obliczeni pierwistku równni f(x) = 0 // PARAMETRY WEJŚCIOWE: // fun = nzw funkcji, któr oblicz f(x). // x1,x2 = grnice zkresu, n którym znjduje się pierwistek. // tol = mrgines blędu (domyśln wrtość 1.0e6 %eps). // WYNIK: // root = punkt zerowy f(x) lbo %nn, jeżeli go nie znleziono // po mx_num_iter1 itercjch mx_num_iter = 30; if rgn(2) < 4, tol = 1.0e6 %eps; f1 = fun(x1); if 0 == f1, root = x1; return; f2 = fun(x2); if 0 == f2, root = x2; return; if sign(f1)==sign(f2) error( brk pierwistku w tym zkresie ) for i = 0:mx_num_iter // Wrtość funkcji w środku zkresu x3 = 0.5 (x1 x2); f3 = fun(x3); if f3 == 0; root = x3; return; // Wyzncznik równni kwdrtowego s = sqrt(f3^2 f1 f2); if 0 == s; root = %nn; return; // Wyznczmy now wrtość pierwistku dx = (x3 x1) f3/s; if (f1 f2) < 0; dx = dx; x4 = x3 dx; f4 = fun(x4); // Sprwdzmy zbiezność metody if i > 0 if bs(x4 xold) < tol mx(bs(x4),1.0) root = x4; return xold = x4; // Nowe grnice zkresu if sign(f3)==sign(f4) if sign(f1)==sign(f4), x2 = x4; f2 = f4; else x1 = x4; f1 = f4; else x1 = x3; x2 = x4; f1 = f3; f2 = f4; root = %nn; function //Zdnie testowe //deff("y=f(x)","y=x^2 2"); //ridder(f,1,2)
1.6.2 23-4-2012 Równni nieliniowe 11 Listing 5: Metod Newton-Rfson function root = newtonrphson(fun, dfun,, b, tol ) if rgn(2) < 5, tol = 10^6 %eps; mx_iter = 30; f = fun(); fb = fun(b); if f == 0, root = ; return; if fb == 0, root = b; return; if sign( f)==sign(fb), error( Pierwistek poz zkresem (,b) ); // x = ( b)/2.0; // Punkt początkowy po strtowej bisekcji for i = 1 : mx_iter fx = fun(x); if bs(fx) < tol root = x; return; // Jeżeli to pierwistek wrcmy // Zwężnie przedziłu [, b], koniec bisekcji if f fx < 0.0 then b = x; else = x; dfx = dfun(x); // Wrtość pochodnej w X // Prób kroku Newton Rphson if 0 == bs(dfx) // Obwimy się, że pochodn = 0 dx = b ; // Awryjnie wychodzimy poz [,b] else dx = fx/dfx; x = x dx; // Jeżeli x leży poz [,b] bisekcj if (b x) (x ) < 0.0 dx = (b )/2.0; x = dx; if bs(dx) < tol // Wrunek n zkończenie obliczeń root = x; return; root = %nn // Przekroczone MAX_ITER function //deff("y=f(x)", "y=x^2 2"); //deff ( y=df(x)","y=2 x"); //r = newtonrphson( f, df, =1, b=2)
1.6.2 23-4-2012 Równni nieliniowe 12 Litertur Kiusls, J. Numericl Methods in Engineering with MATLAB. Cmbridge University Press, 2010. Wykłd zostł oprcowny w LATEXe z pomocą klsy BEAMER, grficznego pkietu PGF/TikZ i pkietu do tworzeni wykresów PGFPLOTS. Obliczeni wewnątrz dokumentu zostły przeprowdzone z pomocą EQC.