Pagina 1 di 1

Nodi di Chebychev-Gauss_Lobatto e divergenza errore

MessaggioInviato: 13/06/2022, 17:56
da Nickbru
Ho un dubbio, che è quasi più teorico che pratico credo.
é data la seguente funzione $f(x) = e^{1-x} \cdot (x+1)^2$
Si chiede di valutare il polinomio interpolatore con nodi equispaziati e nodi di Chebychev-Gauss_Lobatto tra -2 e 2, trovare l'errore in norma infinito, rappresentarli in scala logaritmica e valutare la coerenza con i risultati teorici per un numero di intervalli pari a 40, 80, 160 e 320.

Questa è la mia soluzione:
Testo nascosto, fai click qui per vederlo
Codice:
f = @(x) exp(1-x).*(x+1).^2;
a = -2;
b = 2;

x_display = linspace(a, b, 1000);

err_max_equi = [];
err_max_cgl = [];

for n=[40 80 160 320]
    x_equi = linspace(a, b, n+1);
    p = polyfit(x_equi, f(x_equi), n);
    p_display = polyval(p, x_display);
    err_max_equi = [err_max_equi; max(abs(p_display - f(x_display)))];
   
    k = 0:n;
    t = -cos(pi*k/n);
    x_cgl = (b-a)/2 * t + (a+b)/2;
    p = polyfit(x_cgl, f(x_cgl), n);
    p_display = polyval(p, x_display);
    err_max_cgl = [err_max_cgl; max(abs(p_display - f(x_display)))];
end

semilogy([40 80 160 320],err_max_equi, 'bo-', [40 80 160 320], err_max_cgl, 'go-');


E i risultati sono questi:
err_max_cgl = 1.42108547152020e-14, 2.51254901790787e-05, 16809550758.7128, 4.64752461515483e+20
err_max_equi = 1.10806244579820e-06, 85792.6879294717, 3.86761001439091e+24, 5.82589183593158e+48

Ora, 2 problemi:
1) perché l'errore tende a $+ \infty$ con l'aumentare dei nodi? Non dovrebbe essere esattamente il contrario?
2) Plottando l'errore punto per punto il problema parrebbe essere il fenomeno di Runge. Ma i nodi di cgl non dovrebbero proprio evitare questo fenomeno non essendo uniformi?

Re: Nodi di Chebychev-Gauss_lobalto e divergenza errore

MessaggioInviato: 13/06/2022, 22:47
da feddy
Le tue perplessità sono fondate. La tua funzione è $C^\infty$... dunque per la teoria all'aumentare di $n$ usando i nodi di CGL dovresti avere un'approssimazione sempre migliore, eppure non è così. Il motivo è racchiuso nelle warning che dovresti ottenere eseguendo il codice. Andando a vedere la documentazione di polyfit, risulta che il sistema lineare usato per trovare i coefficienti ha per matrice la matrice di Vandermonde, che è notoriamente malcondizionata :-)

Re: Nodi di Chebychev-Gauss_lobalto e divergenza errore

MessaggioInviato: 13/06/2022, 22:50
da feddy
Una soluzione a questo è utilizzare un metodo appropriato, ad-hoc, nel caso in cui $n$ è grande. Credo esuli dallo scopo dell'esercizio, ma se sei interessato posso aggiungere dettagli.

Re: Nodi di Chebychev-Gauss_lobalto e divergenza errore

MessaggioInviato: 13/06/2022, 23:02
da feddy
P.S.: *Lobatto :-)

Re: Nodi di Chebychev-Gauss_lobalto e divergenza errore

MessaggioInviato: 14/06/2022, 11:24
da Nickbru
Grazie, ho capito. Quindi la "colpa" è unicamente della matrice di Vandermonde? Se sì, c'è un modo empirico per determinare quali funzioni o metodi la rendono mal condizionata?

feddy ha scritto:ma se sei interessato posso aggiungere dettagli.

Comunque sì, mi farebbe piacere. A lezione abbiamo solo parlato dei problemi del mal condizionamento ma non di eventuali soluzioni ad hoc

Re: Nodi di Chebychev-Gauss_Lobatto e divergenza errore

MessaggioInviato: 14/06/2022, 12:59
da feddy
Le matrici di Vandermonde *sono* malcondizionate :-) La dimostrazione la puoi trovare in qualsiasi testo introduttivo, oppure tra gli appunti del corso.

Ora non ho tempo per i dettagli, ma cercando in rete ho trovato quello che serve (https://www.math.unipd.it/~alvise/CS_20 ... e_2008.pdf) da pagina 13 a pagina 15 circa.