Metodo di Bisezione Applicabilità metodo di bisezione
Transcript
Metodo di Bisezione Applicabilità metodo di bisezione
Metodo di Bisezione Applicabilità metodo di bisezione: Se è continua in e Proprietà di convergenza: converge allo zero in quanto , l’errore al passo che , basta fermarsi dopo ammette almeno uno zero in . si dimezza ad ogni passo. Essendo sarà t.c.: . Per garantire iterazioni: Affidabilità criteri d’arresto: . Stima accurata dell’errore se zero cercato. Se ho sovrastima dell’errore, se ho sottostima dell’errore. Bisez: function [xvect, it] = bisez(a, b, toll, f) in un intorno dello if f(a)*f(b)>= 0 error('Il metodo non è applicabile') end xvect = []; nmax = ceil(log2((b - a)/toll)-1); err = toll + 1; it = -1; while (err > toll && it < nmax) it = it + 1; x = (b + a)/2; if f(x) == 0 err = 0; elseif f(a)*f(x)<0 b = x; err = abs(f(x)); else a = x; err = abs(f(x)); end xvect = [xvect; x]; end Metodo di Newton Descrizione: Cerchiamo t.c. . Dall’eq. della retta tangente si trova: , purché . Equivale a calcolare lo zero di sostituendo localmente a la sua retta tangente. Convergenza e ordine di convergenza: Newton converge a zero in un solo passo quando è lineare. La convergenza di Newton non è garantita semplice ( ha molteplicità )e , ma solo per valori di suff. vicini ad . Se è scelto opportunamente, lo zero , Newton converge almeno quadraticamente: l’ordine 2 di convergenza può essere recuperato usando: Criterio d’arresto: Diff fra due it succ: . Buon criterio quando lo zero è semplice, Newton:function [xvect, it] = newton(x0, nmax, toll, f, df) xvect = []; x = x0; err = toll+1; it = 0; while (err > toll && it < nmax) if df(x) == 0 error('Azzeramento della derivata prima') end err = abs((x - (f(x)/df(x))) - x); x = x - (f(x)/df(x)); xvect = [xvect; x]; it = it + 1; end è . Se lo zero . . Punto fisso viene detto punto fisso di se . Descrizione: Data successione: Teorema 1: 1) Se e lo si può determinare come limite della almeno un punto fisso 2) Se Teorema 2 (Ostrowski): Se è punto fisso di , converge ad ( di . è unico e converge sempre opportuno intorno di ) e . Inoltre: Teorema 3: Sotto le ipotesi del th. di Ostrowski, se inoltre . . e , ma (converge con ordine p). Criterio d’arresto: Sia . Con il th. del valor medio troviamo: , e dall’identità: quando è un buon stimatore. Ptofis: function [succ , it] = ptofis (x0 , phi , nmax , toll) x = x0; succ = [ x0 ]; it = 0; err = toll + 1; while (it < nmax && err > toll) err = abs(x - phi(x)); x = phi(x); succ = [succ; x]; it = it + 1; end Polinomi Polinomi Caratteri di Lagrange: Polinomio di interpolazione nella forma di Lagrange: Errore per un polinomio di Lagrange di grado n con partizione generica e stima nel caso di partizione uniforme: dove per . Nel caso di una distribuzione uniforme di nodi: Matlab:% Polinomio di lagrange di grado n relativo a nodi equispaziati h = (b-a)/n; x_nodi = [a : h : b]; P = polyfit(x_nodi, f(x_nodi), n); Pn = polyval(P, x); err = abs(f(x) - Pn); % Polinomio relativo a nodi di Chebyshev (evita fenomeno di runge (oscill spurie) i = [0 : n]; x_cheb = -cos((pi.*i)./n); x_nodi_cheb = ((a + b)/2) + ((b - a)/2).*x_cheb; P_cheb = polyfit(x_nodi_cheb, f(x_nodi_cheb), n); Pn_cheb = polyval(P_cheb, x); err_cheb = abs(f(x) - Pn_cheb); Interpolazione composita lineare: Data una distribuzione di nodi, non necessariamente equisp., indichiamo con l’intervallo . Approssimiamo con una funzione continua che, su ciascun intervallo, è data dal . segmento congiungente i punti : , dove . Se è la max lunghezza degli . % Interpolazione composita lineare y_ICL = interp1(x_nodi, f(x_nodi), x); err_ICL = abs(f(x)-y_ICL); Minimi quadrati: Dati , dove e dato . Se , , cerchiamo un polinomio che soddisfi: è l’appross nel senso dei minimi quadrati di grado . % Interpolazione ai minimi quadrati PMQ = polyfit(x_nodi, f(x_nodi), 2); y_IMQ = polyval(PMQ, x); err_IMQ = abs(f(x)-y_IMQ); Spline Cubica naturale: Costruiamo una funz Su ogni , che abbia le seguenti caratteristiche: deve essere un pol di grado 3 che interp le coppie e devono essere continue in ogni Per la completa det è nec assegnare 4 condizioni su ciascun e 4n eq che possono essere così individuate: n+1 cond dovute alla richiesta che interpoli i dati nei nodi n-1 cond dovute alla richiesta che sia continua nei nodi interni imponendo la continuità anche a e negli stessi nodi otteniamo 2(n-1) eq addizionali Restano da individuare 2 eq addizionali che possono essere date da e così caratterizzata è detta spline cubica naturale. L’errore che si commette approssimando una dove solo , ma anche è la max ampiezza dei sottoint, vengono ben approssimate da quando è un opportuna cost che dipende da r. Non . % Interpolazione con spline cubica naturale y_ISCN = cubicspline(x_nodi, f(x_nodi), x); err_ISCN = abs(f(x)-y_ISCN); Punto Medio Suddividiamo in M sottointervalli . Interpoliamo equispaziati con passo nel punto medio di , dove : t.c. . Otteniamo: . L’errore è: . O.D.A rispetto ad H = 2. G.D.E = 1. Pmedcomp: function I = pmedcomp(a, b, N, f) h = (b - a) / N; x_medio = [a + h/2 : h : b - h/2]; I = h * sum(f(x_medio)); Trapezi Suddividiamo in M sottointervalli equispaziati con passo t.c. . La formula del trapezio comp. è: L’errore è: . , dove . O.D.A rispetto ad = 2. G.D.E. = 1. Trapcomp.m: function I = trapcomp(a, b, N, f) h = (b-a)/N; x = [a + h : h : b - h]; I = ((h / 2)*(f(a) + f(b))) + (h * sum(f(x))); Formula di Simpson Suddividiamo in M sottointervalli equispaziati con passo . Sostituiamo su ogni intervallo l’integrale di nodi: L’errore è: con quello del polinomio interp di grado 2 di . Otteniamo: . , dove t.c. . O.D.A rispetto ad = 4. G.D.E = 3. relativo ai Simpcomp: function I = simpcomp(a, b, N, f) h = (b - a) / N; x = [a : h : b]; x_medio = [a + h/2 : h : b - h/2]; I = (h /6)*sum(f(x(1 : N)) + 4*f(x_medio) + f(x(2 : N+1))); Numero N di sottointervalli in cui suddividere (a, b) per garantire un err < toll: d2f_massima = max(abs(d2f(x))); N_ptomedio = ceil(sqrt(((b-a)^3*d2f_massima)/(24*toll))); N_trapezio = ceil(sqrt( ((b-a)^3*d2f_massima)/(12*toll))); d4f_massima = max(abs(d4f(x))); N_simpson = ceil((((b-a)^5*d4f_massima)/(2880*toll))^(1/4)); Fattorizzazione LU Fattorizzazione LU: , dove deve essere non singolare . Condizioni necessarie e sufficiente per : ammette una ed una sola fattorizzazione LU se e solo se le sottomatrici principali di , per , sono non singolari. Classi di matrici che garantiscono la validità del teorema: - Simmetriche e definite positive: - A dominanza diagonale stretta per righe: - A dominanza diagonale stretta per colonne: Metodo delle sostituzioni in avanti: Fwsub: function [y] = fwsub(L, b) n = length(b); y = zeros(n,1); y(1)= b(1)/L(1,1); for i = 2 : n y(i) = (b(i) - (L(i,1:i-1)*y(1:i-1)))/L(i,i); end Metodo delle sostituzioni all’indietro: Bksub: function [x] = bksub(U, y) n = length(y); x = zeros(n, 1); x(n)=y(n)/U(n,n); for i = n-1 : -1 : 1 x(i)=(y(i)- (U(i,i+1:n)*x(i+1:n)))/U(i,i); end Algoritmo di Gauss: function [L, U] = lugauss(A) L = eye(n); % prima inserire controllo su quadraticità di A for k = 1 : n-1 for i = k+1 : n if (A(k,k) ~= 0) L(i,k) = A(i,k)/A(k,k); for j = k+1 : n A(i,j) = A(i,j)-L(i,k)*A(k,j); end else error('Elemento diagonale uguale a 0!') end end end U = triu(A); Relazione tra errore relativo e residuo normalizzato: dove e è il numero di cond di A. Se è “piccolo” l’errore sarà piccolo quando lo è il residuo, mentre ciò non è nec vero qndo è “grande”. Pivoting: Consente di portare a compimento il processo LU per qualunque A non singolare. Permutando opportunam. le righe di A, è possibile portare a termine il processo di fatt. anche quando le ipotesi del th. di non sono soddisfatte. La fatt. viene così modificata: , dove . Si dovranno risolvere i sistemi . Metodi iterativi Espressione generica: Condizione di consistenza: . Essendo , dovremo avere . Convergenza metodi iterativi: Condizione nec.&suff. affinché un metodo iterativo converga è che Inoltre, minore è , minore è il numero di iterazioni nec. per ridurre l’errore iniziale di un dato fattore. Richardson Espressione metodo Richardson: dove Condizione nec.&suff. convergenza Richardson STAZ: solo se , dove è l’autovalore max di simm def pos.. Richardson staz. converge se dove . Il metodo con questa scelta di otterremo è detto . . Relazione tra errore relativo e residuo normalizzato: con . simm def pos.. Richardson dinamico metodo del gradiente precondizionato o semplicemente metodo del gradiente quando Stima di convergenza: se e . La convergenza ottimale si ha per Condizione necessaria e sufficiente per convergenza Richardson NON STAZ: converge . dove, ponendo . Il controllo del residuo è significativo solo è ragionev. piccolo. Richardson: function [x, k] = richardson(A, b, P, x0, tol, nmax, alpha) r = b - A*x0; err = norm(r)/norm(b); k = 0; x = x0; while (k < nmax) && (err > tol) z = P\r; if nargin == 6 alpha = ((z'*r)/(z'*A*z)); end x = x + alpha*z; r = r - alpha*A*z; err = norm(r)/norm(b) k = k+1; end Jacobi come metodo di Rich.: Data Otteniamo: Metodo di Jacobi , dove , scegliamo , che per componenti: La matrice di Jacobi è allora: Convergenza di Jacobi: Se è a dominanza diagonale stretta per righe, allora Jacobi converge. Metodo di Gauss-Seidel e . . Gauss-Seidel come metodo Rich.: Schema di GS: Questo metodo corrisponde ad aver scelto e , dove è una matrice triangolare inferiore i cui soli elementi non nulli sono Otteniamo quindi che: Convergenza GS: Se è a dom diag stretta per righe o è una matrice reale simm e def pos, allora GS converge. Velocità converg Jacobi-GS: Se è tridiag, non singolare, con , allora i metodi di Jacobi e GS convergono o divergono entrambi. Se convergono, GS converge con velocità doppia rispetto a Jacobi: Autovalori e Autovettori Cerchi di Gershgorin: Cerchi di raggio . e centro Primo teorema di Gershgorin: Tutti gli autovalori di A . Allora gli autovalori di A sono tutti contenuti nell’intersezione tra l’unione dei cerchi riga e l’unione dei cerchi colonna. Secondo teorema di Gerschgorin: Se m cerchi riga (o colonna) con , sono sconnessi dall’unione dei restanti n-m cerchi riga (o colonna), allora la loro unione contiene esattamente m autovalori. Metodo delle potenze Ricerca dell’autovalore di modulo massimo: Dato . Si arresta alla prima iterazione e posto calcoliamo per tale che: : . function [lambda, x, it] = epower(A, x0, toll, nmax) y = x0/norm(x0); lambda = y'*A*y; err = toll*abs(lambda) + 1; it = 0; while (it < nmax) && (err > toll*abs(lambda)) && (abs(lambda) ~= 0) it = it + 1; x = A*y; y = x/norm(x); err = abs((y'*A*y) - lambda); lambda = y'*A*y; end if (it < nmax) fprintf('\nIl metodo delle potenze converge in %d iterazioni\n', it) else fprintf('\nIl metodo delle potenze non converge in %d iterazioni\n', it) end Epower.m: Metodo delle potenze inverse Metodo per la ricerca dell’autovalore di modulo minimo: Dato : . Se distinto dagli altri, il metodo converge: Invpower: e posto calcoliamo per sono linearmente indipendenti e se l’autovettore di modulo minimo . function [lambda, x, it] = invpower(A, tol, nmax, x0) [L, U, P] = lu(A); y = x0 /norm( x0 ); lambda = y'*A*y; it = 0; è err = tol*abs(lambda ) + 1; while(err > tol*abs(lambda)) && (it < nmax) it = it + 1; z = fwsub (L, P*y); x = bksub(U, z); y = x / norm(x); err = abs(y'*A*y - lambda ); lambda = y'*A*y; end if (it < nmax) fprintf('Il metodo converge in %d iterazioni', it) else fprintf('Il metodo non converge in %d iterazioni', it) end Metodo delle potenze inverse con shift Shift: viene modificato nel corso delle iterzioni comportando una diminuzione del numero di iterazioni necessarie per soddisfare il test d’arresto, ma anche un aumento del sosto computazionale. Un’efficiente applicazione richiede una conoscenza a priori sulla localizzazione degli autovalori della matrice nel piano complesso. Questi tipo di informazione può essere ottenuta esaminando i cerchi di Gershgorin. Invpowershift: function [lambda, x, it] = invpowershift(A, mu, tol, nmax, x0) M = A - mu*eye ( n ); [L, U, P] = lu(M) ; y = x0 /norm( x0 ) ; lambda = y'*A*y ; it = 0 ; err = tol*abs(lambda ) + 1 ; while(err > tol*abs(lambda)) && (abs(lambda)~=0 ) && (it < nmax) it = it + 1; z = fwsub (L, P*y) ; x = bksub(U, z) ; y = x / norm(x) ; err = abs(y'*A*y - lambda ) ; lambda = y'*A*y ; end if it < nmax fprintf('Il metodo converge in %d iterazioni', it) else fprintf('Il metodo non converge in %d iterazioni', it) end Fattorizzazione QR: Calcola tutti gli autovalori di . Se gli autovalori non sono ben separati sono necessarie più iterazioni per la convergenza, Qrbasic: function D = qrbasic(A, tol, nmax) [n, m] = size(A); if n ~= m error('La matrice deve essere quadrata') end T = A; it = 0 ; test = max(max(abs(tril(T, -1 )))); while it <= nmax & test >= tol [Q, R] = qr(T) ; T = R*Q; it = it + 1 ; test = max(max(abs(tril(T, -1)))); end if it > nmax fprintf('Il metodo non converge nel massimo numero di iterazioni permesso') else fprintf('Il metodo converge in %d iterazioni\n', it) end D = diag(T); Metodi one-step Eu in avanti (EE): , dove passo di discretizzazione e, per ogni nodo di troncamento locale: è il numero di sottointervalli e si cerca il valore incognito dove è il che approssimi . Errore . Ordine di convergenza 1. Ordine di consistenza 1. Condizionatamente assolutamente stabile. EE: function [t_h, u_h] = eulero_avanti(f, t_max, y_0, h) t_0 = 0; t_h = [t_0 : h : t_max]; N = (t_max - t_0)/h; u_h = []; u_h(1) = y_0; for i = 1 : N u_h(i+1) = u_h(i) + h*f(t_h(i), u_h(i)); end Eu all’indietro(EI): dove EI: . Errore di troncamento locale: . Ordine di convergenza 1. Ordine di consistenza 1. Incond. assolut. stabile e A-stabile. function [t_h, u_h, iter_pf] = eulero_indietro(f, t_max, y_0, h) t_0 = 0; t_h = t_0 : h : t_max; N = length(t_h); u_h = zeros(1, N); u_h(1) = y_0; % parametri per le iterazioni di punto fisso N_max=100; toll = 1e-5; iter_pf = zeros(1, N); for it = 2 : N u_old = u_h(it-1); t_pf = t_h(it); phi = @(u) u_old + h*f(t_pf, u); % u è l'incognita u(n+1) [u_pf, it_pf] = ptofis(u_old, phi, N_max, toll); u_h(it) = u_pf(end); iter_pf(it) = it_pf; end Crank-Nicolson(Impl): . Errore di troncamento locale: dove CN: . Ordine di conv. 2. Ordine di consistenza 2. Incond assolut stabile e A-stabile. function [t_h, u_h, iter_pf] = Crank_Nicolson(f, t_max, y_0, h) t_0 = 0; t_h = t_0 : h : t_max; N = length(t_h); u_h = zeros(1, N); u_h(1) = y_0; % parametri per le iterazioni di punto fisso N_max = 100; toll = 1e-5; iter_pf = zeros(1, N); for it = 2 : N phi = @(u) u_h(it-1) + 0.5*h*(f(t_h(it-1), u_h(it-1)) + f(t_h(it), u)); [u_pf, it_pf] = ptofis(u_h(it-1), phi, N_max, toll); u_h(it) = u_pf(end); iter_pf(it) = it_pf; end Convergenza: Un metodo si dice convergente se ad per . Se per qualche Errore di troncamento: dove è un infinitesimo rispetto , diremo che il metodo converge con ordine . è l’errore di troncamento locale dove l’errore di troncamento globale è definito come . Consistenza: Se , allora il metodo è consistente. Inoltre è consistente con ordine , mentre se . Zero stabilità: Un metodo per l’approssimazione del probl. di Cauchy, con e è detto zero stabile se: . Th di Lax-Ritchmyer: Ogni metodo consistente è convergente se e solo se è zero stabile (EE, EI, CN sono zero stabili). Assoluta stabilità: Se il metodo è assolutamente stabile. Regione di ass stabilità: Insieme dei valori del piano complesso in corrispondenza dei quali il metodo è assolut stabile. Metodo di Rungkutta (ordine elevato ma one-step) dove stadi. Se dove s è il n° di allora il metodo è esplicito. - RK3 (ordine 3) - RK4 (ordine 4) con dove dove Metodi multi-step (ordine elevato) Schema generico: - AB3: - AM4: - BDF2: - BDF3: 3 passi, 3°ordine, esplic, consistente, zero stab, condiz ass stabile 3 passi, 4°ordine, implic, consist, zero stab, condiz ass stabile 2 passi, 2° ordine, implicito, consistente, zero stabile, incond ass stabile 3 passi, 3° ordine, implicito, consistente, zero stabile , incond ass stab sui reali Consistenza: , ma non sui complessi a parte reale sono soddisfatte: Ordine: Se inoltre , ho consistenza di ordine q Zero stabilità: . Se Reinterpr 1-step come multi-step: EE: schema zero stabile EI: CN: . Tutti zero stab Errore di troncamento locale: . Teorema di Lax-Ritchmyer: uno schema multi-step consistente è convergente se e solo se è zero stabile. Assoluta Stabilita: per i passi che soddisfano: Il secondo pol caratteristico è , dove . Il metodo è ass stab sono le radici di . Metodi numerici per problemi ai limiti Condizioni al bordo di Dirichlet + schema centrato di ordine 2: equisp: con , con passo . Dati , indichiamo con nodi la soluz num calcolata sul nodo L’approssimaz centrata con diff finite di ordine 2 è: . Il sistema . diventa: dove: Errore: . Converge con ordine 2 rispetto ad . Condizioni al bordo miste + schema decentrato di ordine 1: decentrata all’indietro: sistema . Diff finita , dividendo per . L’ -esima riga è data da: che è la . Otteniamo: Condizioni al bordo miste + schema di ordine 1 centrato nell’ultimo nodo: Schema di ordine 2 centrato nel nodo -esima riga del : . , che fa intervenire approssimante la soluzione nel nodo esterno al dominio(nodo fantasma). Abbiamo incognite e equazioni. Dobbiamo quindi aggiungere un’ulteriore eq, che sarà l’appross del problema con uno schema centrato nel nodo : che è la -esima riga di . L’ -esima riga è data da: . Otteniamo: Condizioni al bordo di Neumann: . Con uno schema decentrato di ordine 1: L’ -esima riga è data da: . Otteniamo: Approssimazione di un problema ai limiti non stazionario: consideriamo l’eq. del calore con termine di reazione: La discretizzazione spaziale produce il sistema di eq diff: matrice triadiag del problema e Per integrare il sistema usiamo il θ-metodo: Scelto ponendo e , dove A è la stessa . (passo per la discretizzazione temporale), suddividiamo l’intervallo e il generico istante temporale discreto . Otteniamo: La generica eq.del θ-metodo: us = @(t) u_es(a, t); ud = @(t) u_es(b, t); u0 = @(x) u_es(x, 0); theta = % =1 EI, =0 EE, =1/2 CN [U,griglia_x,passi_t]=diff_fin(Q,f,aa,bb,us,ud,u0,T,n,deltat,theta,1) u = U( :, end ); err = [err; max(abs(u - u_es(griglia_x,passi_t(end))))]; Appross alle diff finite del problema di Poisson in 2D: e si consideri una griglia di dove nodi equisp lungo con . Sia in entrambe le direzioni. Calcolo le derivate seconde parziali con diff finite centrate 2°ordine: . Otteniamo un sist lineare . Il generico Con condizioni di Dirichlet non omogenee si ha: Dirichlet solo lungo i bordi in cui è diversa da 0 (bordo “superiore” ed “inferiore”). . . Si valutano le condizione di