Wyład VIII Rozwiązywanie równań i uładów równań nieliniowych Równania nieliniowe w technice Zadanie wyznaczenia pierwiastów równania nieliniowego Metody iteracji z otaczaniem i podziałem (bisecja i regula-falsi) Metody iteracji z wyorzystaniem siecznej i stycznej Zera wielomianu wartościami własnymi pewnej macierzy Problemy wielowymiarowe - ułady równań
Równania i funcje nieliniowe w technice Opis funcjami nieliniowymi względem wielości wejściowej, wyjściowej, wewnętrznej (np. stanu) bądź parametrów jest powszechny w technice. Poniżej podano przyłady. Nie-prostoliniowy ruch obietów poddawanych zewnętrznym oddziaływaniom: tor planet w polu grawitacyjnym Słońca, ruch eletronów w polu magnetycznym cewe odchylających monitora, Trajetoria pocisu przy prędości początowej, oporach powietrza i grawitacji. Nieliniowości są powszechne w zagadnieniach technicznych z powodu ograniczeń fizycznych tarcie suche opisane nieliniową funcją względem prędości w przeciwieństwie do tarcia wisotycznego, nasycenia tranzystorów i wzmacniaczy (ograniczenie od napięcia zasilającego), nasycenie materiałów magnetycznych (np. blach transformatorowych). Odpowiedzi liniowych uładów dynamicznych są nieliniowymi funcjami czasu i parametrów odpowiedź inercyjna nieliniowa od czasu, wysoość piu rezonansowego odpowiedzi częstotliwościowej obietu oscylacyjnego nieliniowa względem tłumienia. Równania i ułady równań nieliniowych powstają przy naładaniu warunów (osiągnięcie oreślonej wartości, przecięcie trajetorii) na nieliniowe funcje opisujące.
Wyznaczanie pierwiastów równania nieliniowego (zer funcji nieliniowej) trudności i podstawowe idee Trudności: możliwość brau zer (np. wielomian z zerami zespolonymi iedy szuamy rzeczywistych), duże nagromadzenie zer w przedziale (np. dla funcji sin(/x) w pobliżu zera), możliwość brau zmiany znau (np. dla zer wielomianu o parzystej rotności), nieciągłości, osobliwości. Pomysły na rozwiązanie: zgrubnie narysować przebieg funcji dla zorientowania się w problemie, znaleźć przedział, w tórym funcja zmienia zna i iteracyjnie go zawężać, wystartować z dowolnego puntu i podążać w ierunu malejących co do modułu wartości. Informacja do wyorzystania: wartości funcji, wartości lub przybliżenie pochodnych funcji, poprzednio znalezione zera. Sposób ontroli doładności: różnica między wartością funcji a zerem różnica między bieżącym oszacowaniem zera a rozwiązaniem (ale to jest nieznane) różnica między dwoma olejnymi oszacowaniami
Metody iteracji z otaczaniem i podziałem (bisecja i regula-falsi) Idea otoczenia pierwiasta i iteracyjnego zbliżania się do niego tworzy podstawę metod obszaru zamniętego (closed domain). Ponieważ dają one ontrolę przedziału zawierającego pierwiaste, dają też przewidywalną szybość zbieżności i wielość błędu. Metoda bisecji (połowienia przedziału) f(x) f(x) a p c b x a c p b x W ażdym rou następuje wybór dwóch nowych puntów ograniczających przedział z zerem spośród dwóch starych puntów ograniczających i puntu środa przedziału. Jeśli f ( a ) f ( c ) < 0: a = a, b = c, w przeciwnym przypadu: a = c, b = b a + b Oszacowanie zera w -tym rou: p = c = 2 b0 a0 Błąd oszacowania zera w -tym rou: p p ε = = ε + (zbieżność liniowa) 2 2
Metoda regula-falsi (interpolacji liniowej) Zbieżność metody połowienia jest niezależna od ształtu funcji w otoczeniu zera. Tę zbieżność można przyśpieszyć stosując interpolację liniową funcji na bazie puntów ograniczających. Zasada wyboru nowych puntów ograniczających pozostaje ta sama. f(x) a c p b x Przyrównując nachylenie prostej interpolującej przechodzącej przez punty ograniczające a, b do nachylenia prostej przechodzącej przez b, i poszuiwane c: f ( b) f ( a) f ( c) f ( b) = b a c b otrzymamy oszacowanie zera funcji: f ( b)( b a) p = c = b f b f a ( ) ( ) Metoda interpolacji liniowej będzie się zachowywała lepiej (będzie szybciej zbieżna) dla funcji dobrze przybliżanych prostą w oolicach zera. Błąd maleje w proporcjach liniowych (czyli zbieżność jest liniowa): ( ε = Kε ), gdzie K zależy od pochodnych funcji.
Metody iteracji w obszarze otwartym Drugim pomysłem na poszuiwanie zera był start z dowolnego puntu i podążanie w ierunu malejących co do modułu wartości. Zacznijmy od przystosowania metody interpolacji liniowej do tego podejścia. Ponieważ rezygnujemy z zasady otaczania zera, to rozwiązanie interpolacyjne musimy zastąpić estrapolacyjnym. Metoda siecznych (estrapolacji liniowej) Następne oszacowanie zera identyczne ja w metodzie f(x) interpolacji liniowej (możliwa estrapolacja): f ( b)( b a) p = c = b f ( b) f ( a) Wybór puntów do następnego oszacowania wg zasady bliżej p bieżącego oszacowania : a b dla c a < c b : a+ = a, b+ = c c x dla c a > c b : a+ = c, b+ = b Szybość zbieżności metody siecznych dla zer jednorotnych jest więsza niż liniowa (zbieżność superliniowa), tzn.:.62 ε = K gdzie K zależy od wartości pierwszej i drugiej pochodnej f(x). ε
Metoda iteracji Newtona-Raphsona Przy malejącej odległości puntów interpolacji wyrażenie na nachylenie prostej zbliża się do pochodnej (stycznej). Algorytm z użyciem pochodnej jest nazywany metodą Newtona-Raphsona. f ( p ) p = p, =, f ( p ) warune zbieżności (wyprowadzenie np. w J.H. Mathews, Numerical methods for... ): f ( x) f ( x) dla x [ p δ, p + δ] : <, x [ p δ, p + δ] f ( x) Szybość zbieżności (szybość zmniejszania błędu): f ( p) 2 Dla jednorotnego zera p zbieżność wadratowa: ε ε 2 f ( p) M Dla zera p o rotności M zbieżność liniowa: ε ε M Ta metoda ma zastosowanie przy generowaniu schematów iteracyjnych, iedy znana jest analityczna pochodna funcji i zastosowanie ogólne przy różnicowym przybliżeniu pochodnej. 2 Przyład Obliczanie pierwiasta wadratowego liczby A jao zera funcji f ( x) = x A. Zbudujemy zbieżny do pierwiasta wadratowego schemat iteracyjny: 2 f ( x) = 2x, x = x ( x A) 2x = 0.5( x + A x) A
Metoda Mullera (estrapolacji/interpolacji wadratowej) Poprzednie metody siecznej i stycznej używały modelu liniowego funcji w bieżącym puncie dla predycji (przez interpolację lub estrapolację) zera funcji. Dla funcji z dużą rzywizną w oolicy zera oznacza to wolną zbieżność algorytmu. Naturalne więc jest zwięszenie stopnia wielomianu interpolacyjnego do drugiego co powinno sutować lepszą zbieżnością. To właśnie realizuje algorytm Mullera. Równanie paraboli na trzech puntach: 2 f(x) g( x) = a( x xi) + b( x xi) + c gdzie współczynnii: 2 2 δh2 δ2h δ2h δh2 a=, b=, c= fi hh 2( h h2) hh 2( h h2) p gdzie: c x h = xi xi, h2 = xi 2 xi i x i- x i-2 x δ = fi fi, δ2 = fi 2 fi Zero paraboli interpolującej daje oszacowanie zera funcji: 2c x = i+ c = x i 2 b± b 4ac.84 o zbieżności superliniowej ε + = Kε (trochę lepsza od siecznej, trochę gorsza od stycznej). Ja widać metoda wymaga ilu (niesompliowanych) obliczeń, ale jest stosowana.
Implementacja funcji fzero (zob. też Numerical Recipes ) function [b,fval,exitflag,output] = fzero(funfcnin,x,varargin) %FZERO Scalar nonlinear zero finding. % Copyright 984-2002 The MathWors, Inc.... fc = fb; % Main loop, exit from middle of the loop while fb ~= 0 % Insure that b is the best result so far, a is the previous % value of b, and c is on the opposite of the zero from b.... % Convergence test and possible exit m = 0.5*(c - b); toler = 2.0*tol*max(abs(b),.0); if (abs(m) <= toler) (fb == 0.0), brea, end % Choose bisection or interpolation if (abs(e) < toler) (abs(fa) <= abs(fb)) % Bisection d = m; e = m; step=' bisection'; else % Interpolation s = fb/fa; if (a == c) % Linear interpolation p = 2.0*m*s; q =.0 - s; else % Inverse quadratic interpolation q = fa/fc; r = fb/fc; p = s*(2.0*m*q*(q - r) - (b - a)*(r -.0)); q = (q -.0)*(r -.0)*(s -.0); end; if p > 0, q = -q; else p = -p; end; % Is interpolated point acceptable if (2.0*p < 3.0*m*q - abs(toler*q)) & (p < abs(0.5*e*q)) e = d; d = p/q; step=' interpolation'; else d = m; e = m; step=' bisection'; end; end % Interpolation % Next point... end % Main loop Katedra Metrologii AGH
Przyład Esperymentalne porównanie szybości zbieżności poszczególnych metod Problem: wyznaczenie momentu pierwszego przejścia przez wartość ustaloną odpowiedzi soowej obietu oscylacyjnego drugiego rzędu (np. czujni ciśnienia). Zgrubnie odczytana wartość dla pierwszego przejścia to t=2.5..4.2 Step Response Przyjmiemy punt startowy dla metod obszaru otwartego t 0 =2, a dla metod przedziału zamniętego t 0 =2, t =4. Amplitude 0.8 0.6 0.4 0.2 0 0 2 4 6 8 0 2 3 2.8 2.6 2.4 Time (sec) BS RF NR 2.2 0 2 4 6 8 0 2 function C=nlsolvers(solver, its) C=zeros(,its); a=2; b=4; c=a; for i=:its switch(solver) case 'bisection', if f(a)*f(c)<0 b=c; else a=c; end c=(a+b)/2; case 'regula-falsi', if f(a)*f(c)<0 b=c; else a=c; end c=b-f(b)*(b-a)/(f(b)-f(a)); case 'newton-raphson', c=c-f(c)/fp(c); otherwise, error('bra metody'); end C(i)=c; end function y=f(t) % odpowiedz soowa K=; w0=; si=0.5; p=sqrt(-si^2); y=-/p*exp(-si*w0*t); y=y*sin(w0*p*t+asin(p)); function y=fp(t) % pochodna odpowiedzi soowej % czyli odpowiedz impulsowa K=; w0=; si=0.5; p=sqrt(-si^2); y=w0/p*exp(-si*w0*t); y=y*sin(w0*p*t); it=2; cb=nlsolvers('bisection',it); cr=nlsolvers('regula-falsi',it); cn=nlsolvers('newton-raphson',it); plot(:it,cb,:it,cr,:it,cn); grid on, legend('bs','rf','nr');
Przypade szczególny - zera wielomianu poprzez wartości własne Wartości własne macierzy były zerami wielomianu charaterystycznego macierzy (mało efetywna metoda rozwiązania zagadnienia własnego). Mając dany wielomian możemy postąpić odwrotnie, tzn. utworzyć macierz dla tórej będzie on wielomianem charaterystycznym i wyznaczyć wszystie zera wielomianu (rzeczywiste i zespolone) algorytmem rozwiązania zagadnienia własnego. Ja można sprawdzić, wielomian (ogólniejszy wielomian możemy sprowadzić do tej postaci): N N P( x) = x + an x + + ax+ a0 jest wielomianem charaterystycznym tzw. macierzy stowarzyszonej (companion matrix): an an 2 a a0 0 0 P = 0 0 0 0 ( ) = det[ P xi ] P x Stąd zera P( x ) to wartości własne P. function r = roots(c) % Copyright 984-2002 The MathWors, Inc.... % Polynomial roots via a companion matrix n = length(c); if n > a = diag(ones(,n-2),-); a(,:) = -c(2:n)./ c(); r = [r;eig(a)]; end
Problemy wielowymiarowe - ułady równań Uogólnienie metody Newtona-Raphsona (metoda stycznej w puncie) na przypade wielowymiarowy to metoda Newtona, tórą przez analogię zapiszemy wetorowo jao: P+ = P J( P) F( P ) gdzie (dla ilości równań równej ilości zmiennych niezależnych): wetor zmiennych: wetor funcji: macierz Jaobianu: F F P F ( P) P PN P = F F ( P) = J( P) = = P PN FN ( P) FN F N P PN 0 będzie wyonywany w następujących roach: W pratyce algorytm poszuiwania F( P) = ) Oblicz wartości funcji i Jaobianu w bieżącym puncie: ( ) F P, J( P ) 2) Rozwiąż uład równań liniowych ze względu na P : J P= F 3) Wyznacz następne oszacowanie zera: P = P P + Ulepszona postać tego algorytmu jest zaimplementowana (Matlab) w fsolve jao algorytm dogleg. Inny sposób rozwiązania to zmiana problemu uładu równań nieliniowych na problem poszuiwania minimum sumy wadratów sładowych. Ponieważ suma wadratów ma minimalną wartość zero dla wszystich sładowych zerowych, więc to problem równoważny. Funcja fsolve może działać w ten sposób (algorytmy lm i gn). Algorytmy minimalizacji na następnym wyładzie.
Przyład Śledzenie oresu próbowanego przebiegu napięcia/prądu sieciowego Pomysły na rozwiązanie: FFT i wybór masymalnego prąża (duża rozdzielczość dużo oresów słabe śledzenie) Aprosymacja sinusem w jednym oresie (dopasowanie nieliniowe trzech parametrów) Wyznaczenie momentów zmiany znau +/- i proste zliczanie próbe pomiędzy nimi Precyzyjniejsze wyznaczenie momentu zmiany loalna interpolacja lub aprosymacja. Np. loalna interpolacja pierwszego stopnia, loalna interpolacja trzeciego stopnia, loalna aprosymacja trzeciego stopnia, loalna aprosymacja sinusem w oolicy zera Porównajmy doładność trzech wybranych metod: prostego zliczania i interpolacji pierwszego i trzeciego stopnia. 200 00 Proste zliczanie 0-0.02-0.05-0.0-0.005 0 0.005 0.0 0.05 0.02 Interpolacja liniowa 800 600 400 200 0 - -0.5 0 0.5 x 0-5 Interpolacja sześcienna 000 500 0 - -0.5 0 0.5 x 0-8 L=0000; dt=0.0; t=-0.5:dt:.5; for i=:l T=+0.05*randn; w=2*pi/t; y=sin(w*t+2*pi*0.05*randn); ys=sign(y); yz=diff(ys); iz=find(yz>0); % proste zliczanie count=iz(2)-iz(); Tep=count*dt; % interpolacja pierwszego stopnia y=y(iz()); y2=y(iz()+); dt=dt*y2/(y2-y); y=y(iz(2)); y2=y(iz(2)+); dt2=dt-dt*y2/(y2-y); Tei=(count-)*dt+dt+dt2; % Interpolacja trzeciego stopnia p=polyfit(-:2,y(iz()-:iz()+2),3); r=roots(p); ir=find(imag(r)==0); ic=find(r(ir)>=0 & r(ir)<=); dt=dt*(-r(ic)); p=polyfit(-:2,y(iz(2)-:iz(2)+2),3); r=roots(p); ir=find(imag(r)==0); ic=find(r(ir)>=0 & r(ir)<=); dt2=dt*r(ic); Tea=(count-)*dt+dt+dt2; Tref(i)=T; Tp(i)=Tep; Ti(i)=Tei; Ta(i)=Tea; end dtp=(tp-tref)./tref; dti=(ti-tref)./tref; dta=(ta-tref)./tref;