multilevel

Figura 1: Pattern di sparsit a della matrice di interpolazione del metodo non-stazionario per " = 3 su griglie equispaziate composte rispettivamente d...

0 downloads 113 Views 4MB Size
Interpolazione Multilevel Davide Boscaini, Antoine Glorieux e Simone Parisotto Le presenti note, oggetto di presentazione in data 15 Maggio 2012, sono tratte principalmente dal capitolo 15 di Scattered Data Approximation di H. Wendland e dal capitolo 32 di Meshfree Approximation Methods With MATLAB di G.E. Fasshauer. In questo seminario si propone un metodo di interpolazione multilevel con i relativi dettagli implementativi. Invitiamo chiunque trovasse eventuali errori a segnalarli agli indirizzi [email protected], [email protected] o [email protected]

1

1

Motivazioni

` noto che per l’interpolazione con funzioni radiali di base a supporto compatto esiE stono due diversi approcci: quello stazionario e quello non-stazionario. Abbiamo anche visto che, per il principio di trade-off, se si sceglie il primo si ha efficienza computazionale ma convergenza limitata, mentre, se si sceglie il secondo, si ha pi` u precisione ma complessit`a computazionale maggiore. In figura 1 riportiamo il pattern di sparsit`a delle matrici di interpolazione del metodo non-stazionario, ottenuto con il comando spy di Matlab, mentre in figura 2 riportiamo i corrispondenti pattern risultanti dal metodo stazionario. Guardando i risultati in figura 1 si nota subito che, se si mantiene il parametro ε costante, al crescere dei punti considerati la matrice di interpolazione “si riempie”. Al contrario facendo variare il parametro ε in modo che ad ogni step sia proporzionale alla fill-distance hXk ,Ω , le bande della matrice rimangono invariate. Per combinare i vantaggi di entrambi gli approcci, Schaback ha suggerito uno schema stazionario multilevel.

2

L’idea dell’algoritmo

Consideriamo una sequenza finita (la lunghezza sar`a il numero di livelli) crescente (in termini di insiemi) di insiemi X1 ⊂ · · · ⊂ XK = X ⊂ Rs di centri con una densit`a crescente, i.e. fill distance hX ,Ω decrescente. Lo spirito dell’algoritmo di interpolazione stazionaria multilevel `e di interpolare i dati del primo passo (su X1 ) e poi ad ogni passo successivo di interpolare il residuo (ovvero la differenza tra i valori esatti e quelle dell’approssimante del passo precedente) su un insieme di centri affinato. Ognuna di queste “sotto-interpolazioni” sfrutta una funzione di base scalata per la fill distance, per avere il raggio del supporto adattato alla densit`a di ogni insieme di centri. Questo metodo recupera i benefici di tutti metodi di interpolazione con RBF a supporto compatto menzionati prima: `e computazionalmente efficace (pu`o essere eseguito in O(N ) operazioni), ben condizionato e convergente. Un algoritmo di interpolazione multilevel segue questo schema: Algorithm 1 multilevel interpolation 1: Creare X1 ⊂ · · · ⊂ XK = X ⊂ Rs sequenza di insiemi di centri con densit` a crescente 2: Inizializzare l’approssimante Sf = 0 3: for k = 1 · · · K do 4: Calcolare l’interpolante u di f − sf su Xk 5: Aggiornare l’approssimante con il nuovo residuosf = sf + u 6: end for Inizializzando l’approssimante sf a 0 alla linea 2 risulta che alla prima iterazione, linea 4, interpoliamo f . Poi, alla linea 5 si aggiorna sf in modo tale che alle iterazioni successive, si interpola il residuo, ovvero la differenza tra la funzione f e il suo approssimante aggiornato per ogni calcolo precedente del residuo. 2

Figura 1: Pattern di sparsit`a della matrice di interpolazione del metodo non-stazionario per ε = 3 su griglie equispaziate composte rispettivamente da 9, 25, 81, 281, 1089 punti. Sfortunatamente, ad oggi ci sono solo risultati sulla convergenza di questo algoritmo per casi specifici, ma mancano risultati generali. La difficolt`a principale nel dimostrare la convergenza `e che, scalando la funzione radiale di base a supporto compatto per uno shape parameter εk ≈ hXk ,Ω , lo spazio dove vive l’approssimante cambia ad ogni 3

Figura 2: Pattern di sparsit`a della matrice di interpolazione del metodo stazionario per ε = {1, 2, 4, 8, 16} su griglie equispaziate composte rispettivamente da 9, 25, 81, 281, 1089 punti. iterazione, e lo stesso vale per la norma dello spazio. Questo problema non si pone se si scelgono RBF a supporto globale ed un approccio non-stazionario perch´e con uno shape parameter ε costante per tutti livelli, anche gli 4

spazi funzionali (k)

(k)

Sk = span{ϕ(k· − xj k), xj ∈ Xk } sono inclusi l’uno nell’altro. Segue quindi che S = ∪K k=1 Sk = SK e di consegienza un’interpolazione diretta su XK usa lo stesso spazio di approssimazione di un’interpolazione multilevel sugli insiemi X1 , · · · , XK . Possiamo allora concludere che `e assurdo applicare un metodo multilevel con RBF a supporto globale in quanto oltre ad un’implementazione pi` u complicata e pesante sia in memoria che in tempo, non apporta miglioramenti alla precisione del risultato dell’interpolazione diretta.

3 3.1

Esempi Test con la funzione di Franke

In questo paragrafo illustriamo un’applicazione del metodo multilevel nell’interpolazione della funzione test di Franke 3 3 2 2 2 f (x) = e−((9x−2) +(9y−2) )/4 + e−((9x+1) /49−(9y+1)/10) 4 4 1 −((9x−7)2 +(9y−3)2 )/4 1 −((9x−4)2 +(9y−7)2 ) + e − e 2 5 per diverse scelte di funzioni di base, sia a supporto compatto che a supporto globale e per diverse scelte del parametro di forma ε. Tabella 1: epsilon=0.7*2.^[0:K-1] livello

RMS-error

cond(IM)

time spent (s)

1 2 3 4 5

1.690284e-01 2.574160e-02 4.604596e-03 4.085256e-04 9.384644e-05

8.267048e+00 1.501537e+01 2.140158e+01 2.481313e+01 2.604892e+01 total time spent

6.695876e−01 1.585362e+00 4.995945e+00 2.047901e+01 7.465841e+01 1.023883e+02

direct

7.405574e-03

2.604892e+01 difference

6.401812e+01 38.3702

5

Figura 3: Griglie equispaziate composte rispettivamente da 9, 25, 81, 281, 1089 punti.

3.2

Lifting Van Beethoven

Lo scopo di questo secondo esempio `e di interpolare dei dati prelevati da una scansione di un busto di Ludwig Van Beethoven usando il nostro metodo multilevel. Nella figura 4 si trovano gli insiemi di data sites che usaremo : i cinque primi cor-

6

Tabella 2: epsilon=2.^[0:K-1] livello

RMS-error

cond(IM)

time spent (s)

1 2 3 4 5

1.909426e−01 3.446504e−02 7.762743e−03 1.487663e−03 3.102727e−04

1.863116e+00 2.157978e+00 2.338837e+00 2.415771e+00 2.441348e+00 total time spent

6.636920e−01 1.559628e+00 4.925550e+00 2.074005e+01 7.385385e+01 1.017428e+02

direct

2.332582e−02

2.441348e+00 difference

6.622752e+01 35.5153

Tabella 3: epsilon=ones(K,1) livello

RMS-error

cond(IM)

time spent (s)

1 2 3 4 5

1.909426e−01 3.191515e−02 4.738066e−03 1.666040e−04 1.086343e−05

1.863116e+00 1.326500e+02 2.002119e+04 2.698779e+06 3.488243e+08 total time spent

6.511417e−01 1.584527e+00 5.253365e+00 2.217929e+01 7.638467e+01 1.060530e+02

direct

1.086343e−05

3.488243e+08 difference

6.833564e+01 37.7174

Tabella 4: IMQ livello

RMS-error

cond(IM)

time spent (s)

1 2 3 4 5

1.871934e−01 2.635333e−02 4.144002e−03 4.511471e−05 8.219413e−08

1.703302e+01 4.674585e+02 2.711223e+05 6.224471e+10 5.527994e+19 total time spent

1.770648e+00 4.232618e+00 1.369637e+01 5.994989e+01 1.981740e+02 2.778235e+02

direct

8.200267e−08

5.527994e+19 difference

1.883578e+02 89.4657

rispondono ai cinque livelli che calcolar`a il nostro algoritmo, e l-ultimo ci permetter`a di calcolare l’errore dei nostri risultati. Si vede che la densit`a di questi insiemi cresce (ergo la fill distance decresce), perci`o, per sfruttare della precisione di un’approccio

7

Tabella 5: Gaussian livello

RMS-error

cond(IM)

time spent (s)

1 2 3 4 5

1.939701e−01 3.434673e−02 6.329470e−03 5.545228e−03 1.740278e−02

1.823333e+00 2.608478e+02 4.817075e+09 4.524152e+18 7.581468e+20 total time spent

6.230561e−01 1.427401e+00 4.763819e+00 1.923115e+01 7.342422e+01 9.946964e+01

direct

4.526265e−03

7.581468e+20 difference

5.877850e+01 40.6911

stazionario, ad ogni livello si scala la RBF per un fattore vicino a hXk ,Ω . Programma 1: Implementazione del metodo multilevel per Beethoven. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

% Calls on: DistancMatrix close all clear all clc % Wendland C4 rbf = @(e,r) (1−e*r).ˆ6.*(35*(e*r).ˆ2+18*(e*r)+3); % Number of levels with epsilons for stationary interpolation K = 5; ep=[1 0.5 0.25 0.125 0.1]; % evaluation points: uniform for plotting and scattered but denser for % error computing neval = 151; grid=linspace(0,1,neval); [xe,ye]=meshgrid(grid); epoints=[xe(:) ye(:)]; load('Data2D Beethoven.mat'); rhs=(rhs−min(rhs))/max(rhs−min(rhs)); exact = griddata(dsites(:,1),dsites(:,2),rhs,xe(:),ye(:)); errpoints=dsites; rhs err=rhs; Nerr=length(rhs err); %initialize interpolant Rf old = zeros(163,1);

8

Figura 4: Beethoven data sets inclusi uno nell’altro, con, rispettivamente, 163, 663, 1163, 1663, 2163, 2663 punti 31 total time spent = 0; 32 33 for k=1:K 34 % datasets loading 35 name = sprintf('Data2D Beethoven%d',k+1);

9

36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

load(name); rhs=(rhs−min(rhs))/max(rhs−min(rhs)); respoints=dsites; name = sprintf('Data2D Beethoven%d',k); load(name); rhs=(rhs−min(rhs))/max(rhs−min(rhs)); ctrs{k}=dsites; time = tic; N1 = length(ctrs{k}); N2 = length(respoints); % Compute right−hand side (= residual) rhs = rhs − Rf old; DM data = DistanceMatrix(dsites,ctrs{k}); IM = rbf(ep(k),DM data); fprintf('Condition number: %d\n', cond(IM)); % Compute coefficients for RBF interpolant to detail level coef{k} = IM\rhs; % compute and plot residual on evaluation points if k>1 RES eval = DistanceMatrix(epoints,ctrs{k}); RESM = rbf(ep(k),RES eval); res = RESM*coef{k}; RES=reshape(res,neval,neval); caption=sprintf('residual level %d',k); figure hold on surfl(xe,ye,RES) axis([0 1 0 1 −0.2 0.2]); lightangle(130,70); shading interp colormap(gray); title(caption); hold off caption=sprintf('beethoven reidual level%d',k); print('−dpng',caption); end if (k < K) % Compute − for all levels − evaluation matrices for % residuals directly for j=1:k DM res = DistanceMatrix(respoints,ctrs{j}); RM{j} = rbf(ep(j),DM res); end % Evaluate RBF interpolant (sum of all previous fits

10

87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137

% evaluated on current grid) Rf = zeros(N2,1); for j=1:k Rf = Rf + RM{j} * coef{j}; end Rf old = Rf; end DM eval = DistanceMatrix(epoints,ctrs{k}); EM = rbf(ep(k),DM eval); Pf = EM*coef{k}; if (k > 1) Pf = Pf old + Pf; end Pf old = Pf; % compute error Merr = DistanceMatrix(errpoints,ctrs{k}); MERR = rbf(ep(k),Merr); err = MERR*coef{k}; if (k > 1) err = err old + err; end err old = err; % computations analysis rms err = norm(rhs err−err)/sqrt(Nerr); fprintf('RMS error: %e\n', rms err) if (k > 1) rms rate = log(rms err old/rms err)/log(2); fprintf('RMS rate: %f\n', rms rate) end rms err old = rms err; time spent = toc(time); fprintf('Time spent: %d s\n\n', time spent); % Plot data sites caption=sprintf('data sites level %d',k); figure plot(dsites(:,1),dsites(:,2),'bo'); title(caption); caption=sprintf('datasites level%d',k); print('−dpng',caption); % Plot interpolant PF=reshape(Pf,neval,neval); caption=sprintf('level %d',k); figure hold on surfl(xe,ye,PF) axis([0 1 0 1 −0.2 1.2]);

11

138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188

lightangle(130,70); shading interp colormap(gray); title(caption); hold off caption=sprintf('beethoven level%d',k); print('−dpng',caption); total time spent = total time spent + time spent; end fprintf('Total time spent: %d s\n\n', total time spent); time = tic; % Compute right−hand side name = sprintf('Data2D Beethoven%d',K); load(name); rhs=(rhs−min(rhs))/max(rhs−min(rhs)); DM data = DistanceMatrix(dsites,ctrs{K}); IM = rbf(ep(K),DM data); fprintf('Condition number: %d\n', cond(IM)); % Compute coefficients for RBF interpolant to detail level coeff = IM\rhs; DM eval = DistanceMatrix(epoints,ctrs{K}); EM = rbf(ep(K),DM eval); Pf = EM*coeff; PF=reshape(Pf,neval,neval); caption=sprintf('direct interpolant'); figure hold on surfl(xe,ye,PF) axis([0 1 0 1 −0.2 1.2]); lightangle(130,70); shading interp colormap(gray); title(caption); hold off caption=sprintf('beethoven direct'); print('−dpng',caption); %compute error MERR=rbf(ep(K),DistanceMatrix(errpoints,ctrs{K})); err=MERR*coeff;

12

189 rms err = norm(rhs err−err)/sqrt(Nerr); 190 fprintf('direct RMS error: %e\n', rms err) 191 192 time spent = toc(time); 193 fprintf('Time spent: %d s\n', time spent);

Il programma 1 `e l’implementazione matlab dell’interpolazione del nostro Beethoven digitale. Siccome non avevamo nessuno atrezzo per calcolare la fill distance, abbiamo scelto il shape parameter stimando la fill distance ad occhio, cf linea 12. Nelle linee 151193, facciamo un’interpolazione diretta degli stessi dati sui stessi centri che all’ultimo livello per fare il paragon etra il metodo multilevel e una semplice interpolazione diretta. Nella figura 5, vediamo la precisione dei risultati aumentare fino ad essere molto soddisfacente. Tabella 6: ε = {1, 0.5, 0.25, 0.125, 0.1} livello

RMS-error

cond(IM)

time spent (s)

1 2 3 4 5

3.438705e−02 1.231999e−02 8.889477e−03 5.661166e−03 3.408220e−03

1.497547e+06 1.870927e+10 9.946298e+12 3.407964e+15 9.206019e+16 total time spent

3.863280e−01 4.290705e+00 7.884325e+00 1.222516e+01 1.637739e+01 4.116391e+01

direct

3.414260e−03

9.206019e+16 difference

1.322919e+01 27.9347

Nella figura 6 vediamo che il risultato dell’algoritmo e l’approssimante diretto sembrano di qualit`a simile, questo viene confermato guardando la tabella 6: l’errore `e un leggermente migliore per l’interpolante multilevel, per un condizionamento uguale. Tabella 7: ε = {0.2, 0.2, 0.2, 0.2, 0.2} livello

RMS-error

cond(IM)

time spent (s)

1 2 3 4 5

3.517791e−02 1.231097e−02 8.887501e−03 5.662592e−03 3.404010e−03

1.494931e+10 2.691352e+12 3.190489e+13 3.062735e+14 1.540840e+15 total time spent

1.488970e−01 7.650670e−01 2.223326e+00 5.219420e+00 7.483184e+00 1.583989e+01

direct

3.404010e−03

1.540840e+15 difference

7.993426e+00 7.846464

13

D’altra parte, vediamo sulla tabella 7 che scgliendo di nuovo lo shape parameter ε costante, il risultato `e esattamente lo stesso sia usando il metodo multilevel che il metodo diretto, e comparandogli ai risultati della tabella 6, vediamo anche che sono peggiori che con lo shape parameter aggiustato ad ogni livello.

14

Figura 5: Plot dell’approssimante dei vari livelli a destra e Plot del risultato dell’interpolazione del residuo per ogni livello trane il primo a sinistra

Figura 6: Plot dell’interpolante diretto a destra e Plot dell’interpolante dell’ultimo livello a sinistra

15