45
Calcolo di punti quasi ottimali per l’interpolazione polinomiale sul triangolo 25 novembre 2010 1

Calcolo di punti quasi ottimali per l’interpolazione ...alvise/TESI_STUDENTI/BRIANI.pdf · Importante e` notare che i punti di Fekete sono indipendenti dalla scelta del-la nostra

Embed Size (px)

Citation preview

Calcolo di punti quasi ottimali per

l’interpolazione polinomiale sul triangolo

25 novembre 2010

1

Indice

1 Introduzione 3

2 Richiami 3

3 Triangolo 63.1 Punti di Fekete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3.1.1 Algoritmo di ricerca . . . . . . . . . . . . . . . . . . . . . 63.1.2 Primo metodo . . . . . . . . . . . . . . . . . . . . . . . . . 73.1.3 Secondo metodo . . . . . . . . . . . . . . . . . . . . . . . 8

3.2 Punti di Lebesgue . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.2.1 Algoritmo di ricerca . . . . . . . . . . . . . . . . . . . . . 113.2.2 Primo Metodo . . . . . . . . . . . . . . . . . . . . . . . . . 133.2.3 Secondo Metodo . . . . . . . . . . . . . . . . . . . . . . . 14

4 Esperimenti Numerici 17

5 Codice 195.1 Demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195.2 Funzioni richiamate dalle demo . . . . . . . . . . . . . . . . . . . 24

6 Coordinate BSV 356.1 Punti di Fekete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356.2 Punti di Lebesgue . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

2

1 Introduzione

La ricerca di punti di ottimo per l’interpolazione polinomiale rimane una ques-tione aperta in ambito matematico. Mentre per il caso unidimensionale vi sonoimportanti risultati teorici, meno si sa riguardo al caso multidimensionale. Ilproblema consiste nel ricercare le disposizioni di punti che permettano l’in-terpolazione polinomiale col minor errore possibile. In letteratura, riguardoa queste configurazioni, si trovano diversi risultati numerici, in particolarerispetto a specifici domini nel caso bivariato. Nelle pagine seguenti illustr-eremo come sia stato possibile migliorare i risultati finora raggiunti riguardo aipunti nel triangolo. Nello specifico mostreremo come sia stato possibile trovaredei buoni punti approssimati di Fekete e come siano stati usati per la successivastima dei punti di ottima interpolazione.

2 Richiami

La costante di Lebesgue ha un ruolo fondamentale nell’interpolazione polino-miale in quanto indica al variare dei punti da interpolare la stabilita di tale pro-cesso e la qualita dell’errore rispetto a quello della migliore approssimazione.Richiamiamo ora la definizione di tale costante nel caso multivariato.

Indichiamo con Pn lo spazio dei polinomi di grado totale1 n e con Ω un

dominio compatto di Rd. Si dimostra che N ≡ dim(Pn) =(

n+dn

)

.Sia zk un insieme unisolvente su Ω per l’interpolazione polinomiale di

grado N cioe tale che la cardinalita di zk sia uguale alla dimensione di Pn einoltre se pΩzk = 0 necessariamente p ≡ 0.

Fissiamo nel dominio Ω una base pi, i = 1, . . . , N di Pn e denotiamo conV = V(z1, z2, . . . , zN) la matrice le cui componenti sono

Vij = pj(zi) : i, j = 1, . . . , N

Tale matrice quadrata e nota come matrice di Vandermonde.Definiamo ora i polinomi di Lagrange

Lk(z) =det(V(z1, . . . , zk−1, z, zk+1, . . . , zN))

det(V(z1, . . . , zN))k = 1, . . . , N

E facile osservare che Lk(zs) = δks e che quindi per l’unicita del polinomiointerpolatore corrispondano nel caso unidimensionale a

Lk(z) =

n∏i=0,i6=k

z− zi

zk − zi=

z − z0

zk − z0· · · z − zk−1

zk − zk−1

z− zk+1

zk − zk+1

· · · z − zm

zk − zn

Esiste per l’unisolvenza di zk un’unico polinomio p ∈ Pn tale che p(zk) =fk. Si dice che il polinomio p interpola le coppie (zk, fk). Dalle proprieta deipolinomi di Lagrange abbiamo

p(z) =

n∑k=o

fkLk(z)

1sono i polinomi p(x) =∑

σ cσxσ1

1· · · x

σd

d, σ = (σ1 . . . σd) ∈ Nd, ||σ||1 ≤ N

3

Supponiamo ora di non possedere gli esatti valori fk, ma un loro arrotonda-mento fk dovuto ad esempio ad una approssimazione del loro valore. Otteni-amo il polinomio interpolatore

p(z) =

n∑k=0

fkLk(z)

Possiamo ora studiare la differenza fra i due polinomi:

p(z) − p(z) =

n∑k=0

(fk − fk)Lk(z)

|p(z) − p(z)| ≤n∑

k=0

∣fk − fk∣

∣ |Lk(z)|

infine, ponendo

Λn = maxz∈Ω

n∑k=0

|Lk(z)|

otteniamo‖p(z) − p(z)‖∞ ≤

(

maxk

∣fk − fk∣

)

·Λn

Il valore Λn e noto come costante di Lebesgue dell’ insieme di punti zi. Dalladefinizione data si nota subito come la costante di Lebesgue sia in funzione deipunti zi, del dominio Ω e dello spazio Pn.

Sottolineiamo l’importanza di tale costante nel seguente modo. Conside-riamo il polinomio di miglior approssimazione p∗ ∈ Pn, ossia il polinomioche meglio approssima f in norma infinito. Considerando che p = INf (poli-nomio interpolatore di f) abbiamo che in generale p∗ 6= INf, ma sicuramentep∗ = INp∗. Otteniamo allora

||f− INf||∞ = ||f− p∗ + INp∗ − INf||∞

≤ ||f− p∗||∞ + ||IN||∞||p∗ − f||∞

≤ (1 + ||IN||∞)||f− p∗||∞

= (1 +Λn)||f− p∗||∞

Fissati Ω e Pn, i punti che minimizzano tale la costante sono detti i puntidi Lebesgue. Osserviamo che questi punti non sono noti nemmeno nel ca-so univariato. In [3] si asserisce che nel caso dell’intervallo limitato [a, b] gli“expanded-Chebyschev”

(a+ b− (a − b)cos ((2j − 1)π/(2n))

cos (π/(2n)))/2

sono quasi ottimi.Un’approccio allo studio dei punti di Lebesgue sono i punti di Fekete.Osserviamo che indipendentemente dalla dimensione essi vengono defini-

ti come i punti che massimizzano il valore assoluto del determinante dellamatrice di Vanderdermonde V

maxzi

|det(V(z1, z2, . . . , zN))|

4

Importante e notare che i punti di Fekete sono indipendenti dalla scelta del-la nostra base, infatti un cambio di base non farebbe altro che moltiplicare ildeterminante per una costante indipendente dai punti.

Poiche i punti massimizzano |det(V)| necessariamente

|Lk(z)| =|det(V(z1, . . . , zk−1, z, zk+1, . . . , zN))|

|det(V(z1, . . . , zN))|≤ 1

e quindi

Λn = maxz∈Ω

N∑1

|Lk(z)| ≤ N =

(

n + d

n

)

Per quanto riguarda il caso unidimensionale esistono dei risultati noti riguar-do questi punti che coincidono con i Gauss-Legendre-Lobatto [5],analiticamentepoco si sa riguardo ai casi in dimensione maggiore, cioe in cuiΩ sia un compat-to di Rd con d > 1. In ambito multivariato i punti di Fekete sono noti in pochidomini quali le circonferenze e nel caso dell n-cubo per lo spazio dei polinomitensoriali2 di gradoN.

Il nostro proposito, dopo i lavori di [1, 4, 6, 7, 9, 11, 12], e di calcolare sulsimplesso unitario dei punti che abbiano per un grado prefissato n costantidi Lebesgue Λn e determinanti di matrici di Vandermonde particolarmentefavorevoli.

In particolare definiremo un algoritmo, poi implementato in Matlab, cheper gradi inferiori a 20 permetta il calcolo di tali punti, le cui costanti vengonoparagonate con altre gia note per certi set.

2sono i polinomi p(x) =∑

σ cσxσ1

1 · · · xσd

d , σ = (σ1 . . . σd) ∈ Nd, ||σ||∞ ≤ N

5

3 Triangolo

3.1 Punti di Fekete

In questa sezione intendiamo calcolare in Matlab dei punti del triangolo cheabbiano valore assoluto dei determinanti di Vandermonde paragonabili, se nonmigliori, di quelli ottenuti numericamente da lavori precedenti con particolareriferimento a [11].

Per semplicita sceglieremo di volta in volta un opportuno triangolo di ri-ferimento. Cio non e restrittivo in quanto si dimostra che una trasformazione(affine) tra due triangoli T1 e T2 mappa punti di Fekete di T1 in punti di Feketedi T2. Grazie a questa proprieta, in seguito utilizzeremo il simplesso 2− di-mensionale di coordinate (0, 0), (0, 1), (1, 0) per l’implementazione degli algo-ritmi proposti e il triangolo equilatero di base per la stampa grafica dei risul-tati. Il passaggio da uno all’altro avviene mantenendo inalterate le coordinatebaricentriche dei punti.

3.1.1 Algoritmo di ricerca

La ricerca dei punti approssimati di Fekete nel simplesso 2−dimensionale estata effettuata con la funzione fmincon presente nell’optimization toolbox diMatlab che ha come utilizzo quello di minimizzare/massimizzare una partico-lare funzione obiettivo. Nel nostro caso la funzione obiettivo riceve in inputun set di punti del simplesso e restituisce il valore assoluto del determinantedella matrice di Vandermonde rispetto a una particolare base polinomiale. Sot-tolineiamo l’importanza della capacita’ di questo ottimizzatore di distribuireautomaticamente il carico di lavoro su diversi processori e quindi il calcolodistribuito avviene senza dover modificare il codice scritto per il singolo pro-cessore. Questo permette di sfruttare nativamente la potenza di calcolo di uncluster.

La routine fmincon usa quattro differenti algoritmi di ricerca e a secondadel tipo di problema si decide la scelta piu opportuna. Il nostro problema di

ottimo e di tipo vincolato, poiche gli N =(

n+dn

)

= (n + 1)(n + 2)/2 puntidi Fekete devono appartenere al triangolo di riferimento. In questo caso lascelta di fmincon e ricaduta sull’algoritmo active-set . Per le caratteristichedegli algoritmi e le loro pecularieta si rimanda alla documentazione online suwww.mathworks.com .

La base scelta e quella ortonormale di Dubiner-Legendre ossia la base dipolinomi bivariati gk tale che

∫Ω

gk(x)gs(x)dx = δks

implementata dalla nostra routine dubiner_leg .La funzione dubiner_leg(n, points) restituisce la matrice ortonormale

Vij = gj(zi) dove zi, i = 1, . . . , N sono i punti del simplesso descritti dal-la matrice, avente dimensione N × 2, points . Ricordiamo che la scelta diuna base piuttosto di un’altra non cambia il set di punti di Fekete perche hacome unico effetto il moltiplicare il determinante per una costante indipen-dente dai punti. D’altra parte, se i determinanti di Vandermonde sono parti-colarmente elevati, si potrebbero avere effetti negativi durante il processo di

6

ottimizzazione. L’implementazione della valutazione del valore assoluto deldeterminante della matrice di Vandermonde in Matlab avviene tramite

-abs(det(dubiner_leg(n, points)))

Osserviamo che il segno “−” e richiesto perche fmincon minimizza la fun-zione obiettivo.

Per la ricerca del massimo e necessario il calcolo approssimato o in formachiusa del gradiente e dell’hessiana della funzione obiettivo. Nel nostro casonon vengono esplicitati tramite una funzione ma approssimati numericamentedi volta in volta dall’ottimizzatore. E importante sottolineare che l’ottimiz-zatore si blocchera al raggiungimento di un massimo locale, potenzialmentedistante dal massimo globale.

Il problema di avvicinarsi il piu possibile al massimo globale e stato af-frontato in momenti successivi con due metodologie differenti. Nel primo nonsi e assunta nessuna congettura sulla disposizione dei punti nel simplesso, vin-colando i punti unicamente a non uscire dal dominio. Nella seconda si e pro-ceduto facendo delle assunzioni quali la disposizione dei punti lungo il bordoe la disposizione dei punti nel dominio secondo qualche simmetria.

3.1.2 Primo metodo

Nel primo metodo quale valore iniziale fornito ad fmincon si e scelta unadisposizione casuale di punti all’interno del triangolo equilateroΩ avente ver-

tici (0, 0), (0, 1), (1/2,√3/2). Cosa importante da sottolineare e che distingue

questo metodo dal successivo e che si richiede solo che i punti appartenganoal triangolo di riferimento (inclusi i suoi lati).

Poiche fmincon risolve problemi di ottimizzazione vincolata, tale routineagisce spostando la distribuzione dei punti (e quindi la soluzione) all’inter-no del simplesso. Questo ha prodotto risultati soddisfacenti andando in al-cuni gradi a migliorare il valore assoluto del determinante di Vandermondeottenuto con i punti di Taylor-Wingate-Vincent [11] relativamente alla baseortonormale di Dubiner-Legendre.

Per gradi elevati questo metodo richiede un alto numero di iterazioni edi valutazioni della funzione obiettivo che abbiamo implementato tramite ilcodice Matlab

-abs(det(dubiner_leg(n, points)))

I punti per cui si valuta il valore assoluto del determinante dellamatrice di Van-dermonde vengono passati tramite la matrice points di dimensione “Nx2”.La funzione dubiner_leg e pero stata implementata per ricevere in input puntiappartenenti al triangolo rettangoloΩ∗ di coordinate (0, 0), (0, 1), (1, 0). Questo,come visto in precedenza, non crea problemi in quanto trasformazioni affi-ni mappano punti di Fekete in punti di Fekete. I punti verranno determinatinel triangolo equilateroΩ, mappati nel nel triangolo rettangoloΩ∗ dove verravalutato il valore assoluto del determinante della matrice di Vandermonde.

Per cercare di velocizzare la ricerca ed ottenere risultati migliori si e prova-to ad usare una gia buona configurazione iniziale. La disposizione dei puntiiniziali casuali e stata quindi sostituita dai punti approssimati di Fekete trovatia partire da mesh debolmente ammissibili (WAM) [10]. Questi punti si rive-lano utili al nostro fine poiche sono gia una buona approssimazione di punti di

7

Fekete. Inoltre non risiedono in unmassimo locale, cosa che avrebbe altrimentivanificato l’uso dell’ottimizzatore.

Questo primo metodo e utilizzabile in Matlab lanciando la demo

demo_simplex_fek_freePts.m

All’interno di tale script e possibile settare il grado polinomiale che si vuolericercare tramite la variabile Me il set di punti iniziali scelto tramite la vari-abile stPts . Oltre alle diverse possibilita di set di punti iniziali (casuali, APFo da file) si trova anche implementata la possibilita di utilizzare la funzioneshakePts(points, k) che “scuote” i punti che le vengono passati in inputmantenendoli all’interno del simplesso. La perturbazione dipende dal para-metro k e vale

(rand(1,1)-1/2)/k

per ciascuna delle coordinate dei punti. Quindi minore sara k , maggiore sarala perturbazione. L’azione avviene punto dopo punto e controlla ad ogni stepche vengano soddisfatti i vincoli imposti, in caso contrario ripete l’operazione.Questa opzione e stata implementata per poter utilizzare quei set di punti i-niziali che gia risiedono in un massimo locale (perche ad esempio risultato diuna precedente ottimizzazione [11]) e verificare numericamente se una loroperturbazione possa portare a risultati migliori.

Nella Tabella 1 si mostrano alcuni risultati ottenuti per il grado 6 tramitequesto primo metodo. I risultati riportati in tabella riflettono i risultati rag-giunti anche negli altri gradi. I punti con il determinante maggiore, raggiuntipure dal nostro metodo, rimangono i punti di TWV [11]; tuttavia, in alcuni casi,certe disposizioni iniziali di punti casuali (salvate poi su file con il prefisso x0 )hanno portato a superare questi risultati.

Si osservi che i punti migliori trovati mostrano numericamente la validitadella congettura di Bos [2] riguardo ai punti sul bordo del simplesso. Notiamoinfatti che, fissato un grado d, sui lati del simplesso si trovano d + 1 puntidisposti come i punti di Gauss-Legendre-Lobatto [5] 1-dimensionali.

Questa osservazione ci consentira l’implementazione del secondo metodoed un alleggerimento del costo computazionale del problema.

3.1.3 Secondo metodo

Per ridurre il numero di punti, e quindi di variabili da passare all’ottimizza-tore, diminuendo cosı il tempo di calcolo, si ipotizza la valenza della conget-tura di Bos che ipotizza che i punti di Fekete sui lati siano disposti come quellidi Gauss-Legendre-Lobatto. Di conseguenza si fissano i punti sui lati del trian-golo e si ottimizzano solo quelli interni al simplesso. Su ogni lato i punti fissatisaranno “d + 1” di cui 2 sugli estremi e “d − 1” interni e quindi abbiamo untotale di “3 · d” punti distinti sui lati. Vediamo subito che per un fissato grado“d” i punti interni sono i punti totali meno i punti sui lati, ossia:

(d + 1)(d + 2)

2− 3 · d =

(d − 1)(d − 2)

2

Unulteriore alleggerimento per l’ottimizzatore puo avvenire sfruttando le ipote-si che i punti di Fekete interni al simplesso soddisfino determinate simme-trie. Consideriamo per ora solo le rotazioni di D3, il gruppo diedrale del

8

Tabella 1: Il grado 6 trattato dal primo metodo a

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

Random ptsOptim. pts

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

APF Wam ptsOptim. pts

Random Points Optim. Points APF fromWAM Optim. PointsDet: 3.36e04 Det: 1.98e29 Det: 3.71e28 Det: 9.66e28Leb: 52e3 Leb: 4.93 Leb: 12.08 Leb: 8.11

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

Shake APF Wam ptsOptim. pts

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

BSV Fek. M=6TWV Points M=6

Shake APF from WAM Optim Points BSV Points TWV PointsDet: 7.08e23 Det: 1.98e29 Det: 2.29e29 Det: 2.29e29Leb: 28.59 Leb: 4.93 Leb: 4.17 Leb: 4.17

a Alcuni punti di grado 6 nel triangolo. In ordine l’ottimizzatore ha utilizzato come punti dipartenza i punti casuali, i punti approssimati di Fekete ricavati da WAM, i punti approssimati diFekete ricavati da WAM scossi di un fattore k=15. L’ultima immagine mostra il confronto tra iTWV e i BSV. Ogni figura riporta il valore del determinante della matrice di Vandermonde e lastima delle costanti di Lebesgue per i punti iniziali e per i punti ottimizzati

9

triangolo. Dividiamo il triangolo equilatero di riferimento Ω avente vertici

(0, 0), (1, 0), (1/2,√3/2) nei tre triangoli formati a partire dal baricentro e dai

tre vertici del simplesso (vedi Figura 1). Scegliamo uno di questi triangoli, di-ciamo Ω∗, prendiamo un punto P all’interno di Ω∗ e calcoliamo le coordinatebaricentriche (λ1, λ2, λ3) rispetto a quest’ultimo. Utilizzando queste coordinatepossiamo identificare altri due punti all’interno dei due triangoli rimanenti ot-tenuti con le permutazioni (λ3, λ1, λ2) (λ2, λ3, λ1) ruotando P di 2π/3 e 4π/3

rispetto al baricentro. La Figura 1a mostra una di queste orbite.Per poter sfruttare questo tipo di costruzione il numero di punti all’interno

del simplesso deve essere sempre unmultiplo di tre. Questo non e pero semprepossibile e per alcuni gradi sarnecessario fissare, oltre ai bordi, anche un puntonel baricentro del triangolo (si veda la nota a fine paragrafo).

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

P

(a) orbita 3

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

P

(b) orbita 6

Figura 1: Punti di orbita 3 e 6 nel triangolo

Prendiamo come esempio illustrativo il caso in cui il grado sia “d = 12”.Con il metodo precedente avevamo 91 punti liberi di muoversi nel triangolo.Ora invece sono solo 18 in quanto sono fissati 36 punti sui bordi, 1 nel baricen-tro e rimangono (12+1)(12+2)/2−36−1 = 54 punti all’interno del simplesso.La posizione di questi 54 punti, grazie alle ipotesi fatte sopra, viene definitamuovendone solamente 54/3 = 18.

La Figura 1b mostra un orbita di ordine sei nel triangolo equilatero. Vienespontaneo domandarsi che risultati otterremmo sfruttando anche le orbite diordine sei, ossia sfruttando sia le rotazioni che le riflessioni del triangolo.

E da notare che fissato un determinato grado polinomiale non e semprepossibile che tutti punti interni appartengano ad orbite di ordine 6; basti pen-sare al grado 6 dove i punti interni sono 9 piu il baricentro. Oppure prendendoad esempio il grado 7 otteniamo 15 punti interni e non abbiamo particolari el-ementi per decidere se forzare la disposizione dei punti in 5 orbite di ordine 3oppure in 2 orbite di ordine 6 e 1 di ordine 3 o ancora in 1 orbita di ordine 6e 3 di ordine 3. Per ovviare a questo problema si e deciso di ricercare i puntiper tutte queste combinazioni. Si osserva numericamente che forzando tutti ipunti interni ad appartenere ad orbite di ordine 6 si ottengono risultati svariatiordini di grandezza inferiori rispetto ai TWV mentre i risultati migliori, che si

10

possono confrontare con altri nella Tabella 2, si sono ottenuti forzando i puntiinterni ad appartenere tutti ad orbite di ordine 3.

Per riprodurre questi risultati in Matlab, abbiamo implementato la demo

demo_simplex_fek_orbpts.m

All’interno di essa e possibile settare il grado polinomiale tramite il parametroMe il numero di orbite di ordine sei tramite il paramentro N orb6 . I determi-nanti ottenuti in questo modo hanno superato inmolti casi i migliori conosciutifino ad ora.

Nella Figura 2 si possono osservare i punti di ottimo trovati (BSV) per ilgrado dodici e confontarli con i punti di Taylor-Wingate-Vincent (TWV). Nel-la Tabella 2 si possono confrontare i risultati raggiunti da quelli presenti inletteratura.

Nota

Mostriamo come i punti interni del simplesso siano, a meno dell’eventualebaricentro, sempre divisibili per 3. L’asserto e vero per d = 1, d = 2, d = 3.

In generale i punti interni sono #d =(d−1)(d−2)

2. Se mod (d, 3) ≡ 1 allo-

ra mod (#d, 3) ≡ 0. Inoltre #d+1 = #d + (d − 1), #d = d2−3d+22

, #d+1 =d(d−1)

2= d2−d

2= d2−3d+2

2+ d2−d

2− d2−3d+2

2= #d + (d− 1). Di conseguenza

essendo mod (#d, 3) = 0 abbiamo mod (#d+1, 3) ≡ mod (#d+(d−1), 3) ≡mod (#d, 3) + mod (d − 1, 3) = mod (d − 1, 3) = 0. Quindi se µ = d + 1,mod (µ, 3) = 2 implica mod (#mu, 3) = 0. Infine da #d+2 = #d+1 + d abbi-amo mod (#d+2, 3) = mod (d+1+d, 3) = mod (#d+1, 3)+ mod (d, 3) =0+ 1 = 1. Cioe se mod (µ, 3) = 0 allora mod (#µ, 3) = 1.

3.2 Punti di Lebesgue

In questa paragrafo intendiamo mostrare come e stato possibile migliorare lecostanti di Lebesgue per i set di punti approssimati di Fekete precedentementetrovati. Illustreremo dapprima l’algoritmo proposto e successivamente entr-eremo nello specifico dei due metodi utilizzati. Come in precedenza nel pri-mo metodo i punti vengono vincolati unicamente a rimanere all’interno deldominio mentre nel secondo metodo sfrutteremo le rotazioni e le simmetrieillustrate precedentemente.

3.2.1 Algoritmo di ricerca

L’algoritmo di ricerca utilizzato per i punti di Lebesgue nel triangolo e analogoa quello visto per la ricerca dei punti di Fekete. InMatlab si e fatto di nuovo usodella funzione fmincon che tra le sue subroutines sceglie l’implementazionedell’algoritmo active-set .

La ricerca dei punti che minimizzino la costante di Lebesgue richiede peropiu attenzione rispetto la ricerca dei punti di Fekete. Si e visto, nella sezioneprecedente, come la verifica di ottimalita di un particolare set di punti avvenissetramite una funzione obiettivo che a partire dai punti considerati definiva unamatrice di Vandermonde tramite la base polinomiale scelta e ne calcolava quin-di il determinante.

11

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

BSV Points M=12

(a) BSV: Det 7.21e115

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

TWV Points M=12

(b) TWV: Det 6.15e115

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

BSV Points M=12TWV Points M=12

(c) BSV - TWV

Figura 2: BSV Fekete Points a confronto con i TWV Points nel grado 12

12

La valutazione della costante di Lebesgue Λn e fornita approssimativa-mente. Per prima cosa si stabilisce una mesh di controllo, ad esempio unaWAM sul triangolo di riferimento. Il calcolo di tale valore e avvenuto quindiper stima su una determinata griglia. SiaA la matrice di Vandermonde definitadai punti interni al triangolo mentre sia B la matrice di Vandermonde generatadai punti della mesh di controllo (valutate entrambe relativamente alla basedi Dubiner-Legendre). Si valuta quindi Λ∗

n = ||A ′\B ′|| dove A'B' fornisce lasoluzione del problema ai minimi quadrati A ′X = B ′. Si vede facilmente chese la mesh e sufficientemente fitta allora Λ∗

n ≈ Λn.La differenza principale dai metodi precedenti e l’utilizzo della nuova fun-

zione obiettivo:

leb_obj(n, points, V_controlmesh)

che restituisce la stima della costante di Lebesgue Λn dei punti points con-siderati rispetto ad unmesh scelta controlmesh Rispetto al metodo precedentela nostra ricerca dipende quindi dal tipo di griglia su cui decidiamo di stimaretale costante e, in particolare, fissato un determinato tipo di griglia, dipenderaanche dalla cardinalita dei punti presenti in essa.

La scelta di questa mesh di controllo e ricaduta sulle WAM. In Matlab talegriglia viene generata tramite la funzione:

computing_symplex_wam(wam_degree)

Mentre la matrice B sopra menzionata e fornita da

dubiner_leg(n,controlmesh)

E importante osservare che la funzione obiettivo leb_obj controlla la gran-dezza della costante di Lebesgue trovata e, se troppo grande (maggiore di 1e30)o se risulta NaN, la sostituisce con il valore 1e30 leggermente perturbato. Ques-ta aggiunta si e resa necessaria in quanto in alcuni casi capita che l’ottimizza-tore, dopo una determinata iterazione o calcolando numericamente il gradi-ente con opportune differenze finite, diventi instabile e interrompa il processoperdendo i risultati raggiunti fino a quel momento. Ricordiamo infatti che l’ot-timizzatore, alla fine della sua ricerca, non restituisce l’ultimo valore trovato,ma l’ottimo tra i valori raggiunti.

La perturbazione sul valore 1e30 e stata pensata per “ingannare” il gradi-ente approssimato dall’ottimizzatore e forzarlo cosı a muovere i punti fino alraggiungimento di una configurazione con costante di Lebesgue inferiore. None quest’ultimo un requisito fondamentale della funzione obiettivo, ma permet-te di continuare la ricerca senza crash anche partendo da punti con costanti diLebesgue pessime.

3.2.2 PrimoMetodo

Poiche la ricerca dei punti di Lebesgue e molto sensibile ai dati iniziali e il costocomputazionale e piu elevato del metodo descritto nei paragrafi precedenti, laricerca di punti di ottimo a partire da configurazioni casuali e stata possibilesolo per gradi relativamente bassi. Per gradi maggiori di 6 si e reso necessariopartire da dei buoni punti iniziali quali quelli approssimati di Fekete trovati

13

precedentemente. Questo ha prodotto ottimi risultati, andando a superare oad affiancare le migliori costanti di Lebesgue sul triangolo note in letteratura.

Bisogna sottolineare che non e stato sufficiente chiamare un’unica volta l’ot-timizzatore, ma si e dovuto far ricorso a piu’ restart dell’algoritmo di ottimiz-zazione. In alcuni restart e stato anche necessario cambiare la cardinalita del-la mesh di controllo per poter ottenere una maggiore precisione in quanto lafunzione fmincon non possiede il gradiente della funzione, ma una sua ap-prossimazione numerica derivante dalle valutazioni della funzione obiettivofatte fino a quel momento.

In particolare considerato un set di punti fornito a fine ciclo da fmincon ,esso puo essere riutilizzato come set di punti iniziale dello stesso ottimizzatore.All’ inizio di ogni “restart” viene ristabilita la cardinalita della mesh di control-lo e riapprossimato il gradiente della funzione obiettivo. Cio puo portare adegli ulteriori minoramenti della costante di Lebesgue. L’aumento del numerodi punti della mesh di controllo porta ad avere una maggiore precisione neirisultati.

L’azione combinata dei restart e dell’aumento della cardinalita della meshdi controllo ha permesso di raggiungere i risultati riportati nella Tabella 2

L’implementazione di questa ricerca puo essere testata lanciando

demo_simplex_leb.m

Nella Figura 3 si mostrano i punti di Lebesgue trovati per il grado dodici e ilconfronto con i punti approssimati di Fekete di partenza.

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

BSV Leb. Points M=12

(a) BSV Leb Points

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

BSV Leb. M=12BSV Fek. M=12

(b) BSV Leb-Fek Points

Figura 3: BSV Leb. e BSV Fek. Points a confronto

3.2.3 Secondo Metodo

Poiche la ricerca dei punti di Lebesgue risulta computazionalmente piu elevatarispetto a quella per i punti di Fekete, la ricerca di tali punti per gradi maggioridi 12 risulta assai dispendiosa. Si e quindi deciso di riutilizzare, come vistoprima, le rotazioni del triangolo.

In particolare fissati allo stesso modo i punti sui lati e l’eventuale punto nelbaricentro, si impone che tutti i punti interni abbiano orbita di ordine tre. In

14

questo modo otteniamo un notevole alleggerimento di variabili per l’ottimiz-zatore e la possibilita di utilizzare come punti di partenza i punti di Feketetrovati in precedenza con tali rotazioni. Si e infatti rivelato di fondamentaleimportanza nella minimizzazione della costante di Lebesgue la buona sceltadella configurazione iniziale di punti.

La differenza con il metodo precedente sta quindi nell’utilizzo di una dif-ferente funzione obiettivo che assolva alle richieste fatte. In particolare talefunzione e stata implementata da:

obj_simplex_leb_orbpts(x, pts, M, N_orbit_free, V_contr olmesh)

dove x sono i punti da ottimizzare, la variabile Mindica il grado polinomiale,pts i punti nel triangolo fissati per ipotesi, N orbit free indica il numero diorbite di ordine tre e sei, V controlmesh la matrice generata dalla mesh dicontrollo come spiegato in precedenza.

La routine che ne implementa l’utilizzo e

demo_simplex_orbleb.m

all’interno della quale e possibile settare il grado polinomiale Me la variabilefile indicante il file contenente le coordinate dei punti di partenza, nel nostrocaso i punti di Fekete trovati in precedenza.

Come nel metodo precedente la minimizzazione della costante di Lebesguee avvenuta grazie a diversi “restart” della demo. In particolare si e partiti daipunti di Fekete ed una mesh di controllo di grado doppio rispetto al gradoanalizzato, ed ad ogni restart si sono utilizzati come punti di partenza i pun-ti precedentemente ottimizzati e una mesh di controllo di grado raddoppiato.Grazie a questo metodo e stato possibile spingersi all’ottimizzazione di puntidi Lebesgue fino al grado 18. Si pensa che l’uso di clusters possa permettere diottenere punti aventi costanti di Lebesgue molto piccole per grado maggioredi 18, permettendo pure di affrontare il piu complesso problema di calcolare ipunti di Lebesgue per il tetraedro. Inoltre i set di punti trovati a cui e stato im-posto avere sui lati i punti Legendre Gauss Lobatto univariati, possono essereutilizzati nei metodi spettrali [8].

Dai risultati raggiunti ed elencati nella Tabella 2 sembrerebbe che la costantedi Lebesgue Λn abbia andamento lineare con coefficente angolare ≈ 1

2. Si sot-

tolinea che questi sono migliori di quelli ottenuti in precedenza da altri autorie disponibili su file fino a grado 18.

15

Tabella 2: Determinanti della matrice di Vandermonde e costanti di Lebesgue dei piu importanti set di punti.a

Grado BSV. Leb. BSV. Fek. BP. Leb. BP. Fek. TWV Hesthaven

1 1.00 5.87e1 1.00 5.88e1 1.00 5.87e1 1.00 5.88e1 - - 1.00 5.88e012 1.49 2.43e4 1.67 3.14e4 1.49 2.43e4 1.66 3.14e4 - - 1.67 3.14e043 1.97 2.01e8 2.11 3.45e8 1.97 2.00e6 2.11 3.41e8 2.11 3.45e8 2.11 3.45e084 2.42 4.32e13 2.73 9.62e13 2.45 2.84e13 2.61 8.64e13 - - 2.73 9.62e135 2.89 2.14e20 3.61 8.03e20 2.97 1.88e20 3.14 7.66e20 - - 3.61 8.03e206 3.39 3.18e28 4.17 2.29e29 3.65 2.54e28 3.87 2.00e29 4.17 2.29e29 4.17 2.29e297 4.09 1.07e38 5.20 2.59e39 4.36 1.72e38 4.66 1.84e39 - - 5.20 2.59e398 4.55 7.41e50 6.89 1.36e51 5.44 2.64e49 5.93 6.35e50 - - 6.89 1.36e519 5.27 2.37e64 6.97 3.79e64 6.69 2.28e62 7.39 8.72e63 6.80 2.39e64 6.97 3.79e6410 5.92 4.57e79 8.24 1.05e80 8.71 5.42e76 9.82 4.95e78 - - 8.24 1.05e8011 6.65 4.43e96 8.02 9.67e96 11.25 8.95e92 12.93 1.20e95 - - 8.02 9.67e9612 6.97 2.85e115 8.55 7.22e115 15.34 3.68e110 17.79 1.27e113 9.67 6.15e115 8.55 7.22e11513 7.74 5.71e135 9.81 4.46e136 21.02 1.18e130 24.50 6.00e132 - - 9.81 4.46e13614 8.29 9.95e157 10.89 2.51e159 29.65 1.08e151 34.69 1.27e154 - - 10.90 2.51e15915 9.04 1.89e182 11.40 9.66e183 42.37 7.17e173 49.57 1.23e177 10.01 4.60e183 11.40 9.66e18316 8.56 2.70e209 12.72 3.36e210 61.45 1.26e198 71.88 5.39e201 - - 12.72 3.36e21017 9.11 7.86e237 13.60 1.01e239 100.6 7.85e221 101.4 1.10e229 - - 15.50 9.34e23818 9.88 1.44e268 14.38 4.10e269 147.3 2.11e249 151.0 1.33e257 14.73 1.04e269 14.55 2.43e269

Grado Warb. Leb. Warb. Fek. Heinrichs Chen Babuska APF WAM 1 APF WAM 2

1 1.00 5.87e1 1.00 5.87e1 - - - - 1.00 5.87e1 1.00 5.872 1.66 3.14e4 1.66 3.14e4 - - 1.67 3.14e4 1.67 3.14e4 1.67 3.14e43 2.11 3.45e8 2.11 3.45e8 - - 2.11 3.45e8 2.26 3.01e8 2.20 3.24e84 2.66 9.53e13 2.66 9.53e13 - - 2.69 9.58e13 3.12 6.50e13 2.93 7.84e135 3.12 7.73e20 3.75 7.99e20 - - 3.30 7.91e20 4.14 4.63e20 3.76 5.91e206 3.70 2.14e29 3.82 2.04e29 3.68 1.84e29 3.79 2.21e29 5.34 1.00e29 7.26 1.01e297 4.27 2.20e39 4.54 1.93e39 - - 4.39 2.32e39 12.96 6.547e38 7.39 1.24e398 4.96 9.56e50 5.70 7.03e50 - - 5.09 1.01e51 10.09 3.082e50 13.29 5.31e509 5.73 1.84e64 6.60 2.15e64 5.59 1.42e64 5.91 1.93e64 11.32 5.170e63 11.69 1.54e6410 6.67 1.78e79 9.17 6.57e78 - - 7.08 1.75e79 11.63 9.616e78 16.30 1.92e7911 7.89 8.32e95 11.84 1.84e95 - - 8.33 7.88e95 14.62 3.398e95 10.00 1.60e9612 9.36 2.28e114 16.06 2.34e113 7.51 2.59e115 10.06 1.84e114 14.78 1.909e114 21.48 7.54e11413 11.47 3.23e134 12.08 4.41e134 - - 12.04 2.29e134 18.41 7.051e134 26.48 2.59e13514 13.95 2.96e156 30.33 3.92e154 - - - - 23.76 1.152e157 20.02 1.12e15815 17.61 1.54e180 42.61 5.31e177 9.25 - - - 29.51 1.720e181 20.76 1.66e18216 22.19 5.40e205 60.89 3.50e202 - - - - 26.56 3.588e207 29.35 7.71e20817 28.20 2.10e232 28.70 2.11e233 - - - - 36.41 4.196e235 27.27 4.28e23618 35.87 3.16e261 128.42 1.76e257 11.86 - - - 36.35 1.180e265 46.26 1.90e267

a Nel caso di piu configurazioni possibili per un determinato grado e metodo, e stato riportato solo il valore del determinantemaggiore o della costante di Lebesgue minore. Per ogni set di punti e riportata la stima della costante di Lebesgue e il valore deldeterminante della matrice di Vandermonde rispetto la base di Dubiner-Legendre. La stima delle costanti di Lebesgue e statavalutata tramite una WAM sul triangolo di grado 150 pari a 22651 punti.

16

4 Esperimenti Numerici

Il primo proposito di questa sezione e di indicare brevemente i metodi utilizzatiper avere dei punti quasi-ottimali relativamente alla costante di Lebesgue Λn

e al valore assoluto del determinante di Vandermonde V (rispetto alla baseortonormale di Dubiner-Legendre). In alcuni casi abbiamo ottenuti punti suun triangolo di riferimento via una generalizzazione di algoritmi noti seguitada un processo di ottimizzazione, in altri abbiamo reperito i dati accessibilidalle pertinenti pubblicazioni. Per i set disponibili abbiamo quindi valutatocon precisione la costante di Lebesgue Λn e il valore assoluto del determinantedella matrice di Vandermonde |det (Vn)|.

In letteratura si e spesso discusso su come calcolare punti sul triangolo cheavessero determinanti di Vandermonde il cui valore assoluto fosse particolar-mente elevato o aventi costante di Lebesgue particolarmente piccola.

In alcuni casi come in [4, 7, 1, 12] sono state individuate particolari config-urazioni aventi la particolarita di sfruttare le simmetrie del triangolo e specialidisposizioni simmetriche dei punti sui lati.

In [4, 7, 11] i punti vengono determinati con coordinate baricentriche (λ1,

λ2, λ3) con 0 ≤ λi ≤ 1 e∑3

i=1 λi = 1. Se i vertici del triangolo T sono V1, V2,V3, ogni suo punto P lo si puo descrivere univocamente come la combinazioneconvessa P =

∑λi

Vi. In [4, 7] se nella disposizione ci sta il punto (λ1, λ2, λ3)allora ci stanno pure le sue permutazioni. Se due coordinate baricentriche sonouguali allora si dice che il punto ha orbita 3 e le permutazioni possibili sono 3mentre se tutte le coordinate baricentriche di P sono distinte allora si dice cheil punto ha orbita 6 che e pari al numero delle sue permutazioni. Osserviamoche esiste un solo punto che ha tutte le coordinate baricentriche uguali, checorrisponde al baricentro.

Per compattezza, in due questi articoli si cita un solo punto per ogni orbita1, 3, 6 deducendo le altre possibili per permutazione. Quindi nelle tabelle com-pare (a, a, b) per citare non solo (a, a, b) ma pure (a, b, q) e (b, a, a). Il nostroprimo lavoro e stato di avere su file una descrizione meno sintetica che citassetutti gli elementi e non solo uno rappresentativo. In altre parole nelle nostretabelle compare tanto (a, a, b) quanto (a, b, q) e (b, a, a).

Osserviamo che la nostra base ortonormale di Dubiner-Legendre ha qualeriferimento il simplesso unitario, cioe il triangolo avente verticiV1=(0, 0), V2=(1,0), V3=(0, 1). Se P ha coordinate baricentriche (λ1, λ2, λ3) da

P = λ1(0, 0) + λ2(1, 0) + λ3(0, 1) = (λ2, λ3)

deduciamo che per determinare le coordinate cartesiane di P basta selezionare2 delle 3 coordinate baricentriche dello stesso.

I punti di [1, 12] possono essere invece descritti facilmente in coordinatecartesiane, con l’unica nota che il triangolo di riferimento di [12] non e il sim-plesso unitario. Entrambi queste ultime due disposizioni hanno i punti suilati del triangolo determinati da punti simmetrici, quelli di Gauss-Legendre-Lobatto. Sussistono due motivazioni per queste scelte: la congettura che ipunti di Fekete del triangolo abbiano una tal descrizione e che risulta favorev-ole una disposizione simmetrica e uguale per tutti i lati per il loro utilizzo inmetodi spettrali o elementi finiti [9]. In entrambi gli articoli viene citato unalgoritmo per calcolare i nodi interni al triangolo partendo dalla famiglia uni-

17

variata dei Gauss-Legendre-Lobatto. In particolare, in [12], si introduce unageneralizzazione della distribuzione di base via un parametro di warping α.

Per ottenere risultati migliori abbiamo usato le loro idee per generare famigliedi punti sul simplesso unitario T basate su punti di Gauss-Jacobi-Lobatto (enon solo Gauss-Legendre-Lobatto). L’ottimizzatore ha cercato di volta in voltaquegli esponenti della funzione peso di Jacobi che fornissero le migliori dis-tribuzioni relativamente alla costante di Lebesgue o al valore assoluto del de-terminante dellamatrice di Vandermonde relativa alla base di Dubiner-Legendrenei punti della distribuzione. Nel caso dei punti di Warburton, si e ottimizzatopure il coefficiente di warping.

Di seguito abbiamo implementato pure l’algoritmo diHeinrichs [6]. Purtrop-po la descrizione dell’algoritmo e risultata incompleta e non siamo riusciti ariprodurre quanto affermato dall’autore. In particolare l’algoritmo producepunti che non appartengono al simplesso unitario, nonostante sia affermatoil contrario. Cio nonostante, i punti forniti dalla pubblicazione, anche se soloper alcuni gradi, sono di ottima qualita. Similmente in [11] vengono fornitidei punti il cui determinante della matrice di Vandermonde e molto elevatoin modulo. L’algoritmo non e di semplice implementazione e non e forni-to dagli autori. Siamo comunque riusciti a calcolare le coordinate delle lorodistribuzioni di punti da quelle presenti per alcuni gradi sulla pubblicazione.In [11] si afferma comunque che possono fornire a richiesta insiemi per unqualsiasi grado inferiore a 18.

Per un implementazione dei nostri codici in Matlab si veda l’appendice diquesto lavoro.

18

5 Codice

5.1 Demo

demo_simplex_fek_freePts.m

1 clear all;2 %-------------------------------------------------- ---------------------3 % Setting polynomial degree and starting points (see below)4 %-----------------5 M = 17;6 stPts = 2;7

8 %-------------------------------------------------- ---------------------9 % Starting points

10 % stPts: 0 APF from WAM, 1 random pts, 2 file pts, 3 shake file pt s11 %-----------------12 switch stPts13 case 014 % Computing AFP from WAM15 pts_wam = computing_symplex_wam(M);16 V_wam = dubiner_leg(M,pts_wam);17 moms = ones(size(V_wam,2),1);18 startPts = computing_fekete_points(pts_wam,V_wam,2,mo ms,1);19 case 120 startPts = random_tri([0 0;0 1;1 0],(M+1) * (M+2)/2);21 case 222 startPts = recover_points( 'points/BSV_fek_M17' );23 case 324 startPts = shakePts(recover_points( 'points/BSV_fek_M17' ),30);25 end26

27 %-------------------------------------------------- ---------------------28 % Setting fmincon parameters29 %-----------------30 options = optimset( 'MaxIter' ,1e4, 'MaxFunEvals' ,1e4, 'Display' , 'iter' , ...31 'Algorithm' , 'active-set' , 'TolCon' ,1e-400, 'ObjectiveLimit' ,1e300, ...32 'TolX' ,1e-60, 'TolFun' ,1e-60, 'FunValCheck' , 'on' );33 [A,b] = simplexConst(M);34

35 %-------------------------------------------------- ---------------------36 % Starting optimization (down scale obj function to avoid37 % very big number error; why not log10 instead of38 % \1e100? To avoid log complex number error)39 %-----------------40 if (M < 12)41 [pts,fval] = fmincon(@(x)-abs(det(dubiner_leg(M,x))), ...42 startPts,A,b,[],[],[],[],[],options);43 elseif (M < 16)44 [pts,fval] = fmincon(@(x)-abs(det(dubiner_leg(M,x)))/ 1e100, ...45 startPts,A,b,[],[],[],[],[],options);46 elseif (M < 18)47 [pts,fval] = fmincon(@(x)-abs(det(dubiner_leg(M,x)))/ 1e150, ...48 startPts,A,b,[],[],[],[],[],options);49 else50 [pts,fval] = fmincon(@(x)-abs(det(dubiner_leg(M,x)))/ 1e200, ...51 startPts,A,b,[],[],[],[],[],options);52 end53

54 %-------------------------------------------------- ---------------------55 % Computing Vandermonde determinants and Lebesgue constan ts

19

56 %-----------------57 detV_startPts = abs(det(dubiner_leg(M,startPts)));58 detV_optimPts = abs(det(dubiner_leg(M,pts)));59 controlmesh = computing_symplex_wam(150);60 V_controlmesh = dubiner_leg(M,controlmesh);61 V_optimPts = dubiner_leg(M,pts);62 V_startPts = dubiner_leg(M,startPts);63 L_loc_optimPts = norm(V_optimPts'\V_controlmesh',1);64 L_loc_startPts = norm(V_startPts'\V_controlmesh',1);65

66 %-------------------------------------------------- ---------------------67 % Print results68 %-----------------69 fprintf( '\n \t POLYNOMAIL DEGREE: %d' ,M);70 fprintf( '\n \n \t CONDITION NUMBER:' )71 fprintf( '\n \t START POINTS: %2.2e' ,cond(V_startPts));72 fprintf( '\n \t OPTIM POINTS: %2.2e' ,cond(V_optimPts))73 fprintf( '\n \n \t VANDERMOND DETERMINANTS' );74 fprintf( '\n \t START POINTS: %2.2e' , detV_startPts);75 fprintf( '\n \t OPTIM POINTS: %2.2e' , detV_optimPts);76 fprintf( '\n \n \t LEBESGUE CONSTANTS' );77 fprintf( '\n \t START POINTS: %2.2e' ,L_loc_startPts);78 fprintf( '\n \t OPTIM POINTS: %2.2e' ,L_loc_optimPts);79 fprintf( '\n' );

demo_simplex_fek_orbpts.m

1 clear all;2 %-------------------------------------------------- ---------------------3 % Setting polynomial degree and number of orbit4 %-----------------5 M = 17; % M major equal 46 N_orb6 = 0; % Remember: N_orb6 must be less equal than N_pts_free/67

8 %-------------------------------------------------- ----------------------9 % Setting the boundary points and adding barycentric point i f necessary

10 % Setting fmincon parameters11 % Setting boundary limits12 %-----------13

14 N_pts=(M+1) * (M+2)/2;15 pts = gauss_lobatto_simplex_boundary(M);16 N_pts_free = N_pts-M * 3;17 if (mod(N_pts_free,3)==1)18 pts = [pts; 1/3 1/3];19 N_pts_free = N_pts_free-1;20 end21

22 options = optimset( 'MaxIter' ,1e6, 'MaxFunEvals' ,1e5, 'Display' , 'iter' , ...23 'Algorithm' , 'active-set' , 'TolCon' ,1e-400, 'ObjectiveLimit' ,1e300, ...24 'TolX' ,1e-60, 'TolFun' ,1e-60, 'FunValCheck' , 'on' , 'UseParallel' , 'always' );25

26 N_orbit_free = [(N_pts_free-6 * N_orb6)/3, N_orb6];27 [A, b] = simplexConstOrbit(N_orbit_free);28 lb = zeros(sum(N_orbit_free) * 2,1)';29 up = ones(sum(N_orbit_free) * 2,1)';30

31 %-------------------------------------------------- ----------------------32 % Setting random starting points33 %------------34

20

35 startOrb3 = [0 0;1 0;1/3 1/3];36 startOrb6 = [0 0;1/2 0;1/3 1/3];37 x0 = random_tri(startOrb3,N_orbit_free(1));38 x0 = [x0; random_tri(startOrb6,N_orbit_free(2))];39

40 %-------------------------------------------------- ----------------------41 % Starting optimization (down scale obj function to avoid42 % very big number error; why not log10 instead of43 % \1e100? To avoid log complex number error)44 %-------------45

46 if (M < 12)47 [pts_founded] = fmincon(@(x)obj_simplex_orbpts(x,pts, ...48 M,N_orbit_free) ,x0,A,b,[],[],lb,up,[],options);49 elseif (M < 16)50 [pts_founded] = fmincon(@(x)obj_simplex_orbpts(x,pts, ...51 M,N_orbit_free)/1e100 ,x0,A,b,[],[],lb,up,[],options );52 elseif (M < 18)53 [pts_founded] = fmincon(@(x)obj_simplex_orbpts(x,pts, ...54 M,N_orbit_free)/1e150 ,x0,A,b,[],[],lb,up,[],options );55 else56 [pts_founded] = fmincon(@(x)obj_simplex_orbpts(x,pts, ...57 M,N_orbit_free)/1e200 ,x0,A,b,[],[],lb,up,[],options );58 end59

60 %-------------------------------------------------- ----------------------61 % Generating pts output62 %-------------63

64 x = [];65 for i=1:N_orbit_free(1)66 x = [x ;orbit3_simplex(pts_founded(i,:))];67 end68 pts = [x ; pts];69 x = [];70 for i=1:N_orbit_free(2)71 x = [x ;orbit6_simplex(pts_founded(i+N_orbit_free(1),: ))];72 end73 pts = [x ; pts];74

75 %-------------------------------------------------- ---------------------76 % Computing and print Lebesgue constant and Vandermonde det erminant77 %--------------78

79 controlmesh = computing_symplex_wam(150);80 V_controlmesh = dubiner_leg(M,controlmesh);81 V_pts = dubiner_leg(M,pts);82 V_det = abs(det(V_pts));83 L_loc = norm(V_pts'\V_controlmesh',1);84 fprintf( '\n \t POLYNOMIAL DEGREE: %d' ,M);85 fprintf( '\n \t CONDITION NUMBER: %2.2e' ,cond(V_pts));86 fprintf( '\n \t LEBESGUE CONSTANT: %6.2f' ,L_loc);87 fprintf( '\n \t VANDERMONDE DETERMINAT: %2.2e' , V_det);

demo_simplex_leb_freePts.m

1 clear all;2 warning( 'off' , 'all' );3 %-------------------------------------------------- ---------------------4 % Setting polynomial degree, starting points (see below) an d degree of5 % control mesh

21

6 %-----------------7 M = 7;8 stPts = 0;9 mesh_degree = 40;

10 file = 'BSV_leb_M7' ; %to set if stPts=011

12 %-------------------------------------------------- ---------------------13 % Starting points14 % stPts: 0 file pts, 1 random pts15 %-----------------16

17 switch stPts18 case 019 fid = fopen(file);20 startPts = fscanf(fid, '%g %g' , [2 inf]);21 fclose(fid);22 startPts = startPts';23 case 124 startPts = random_tri([0 0;0 1;1 0],(M+1) * (M+2)/2);25 end26

27 %-------------------------------------------------- ---------------------28 % Setting fmincon parameters29 %-----------------30 options = optimset( 'MaxIter' ,1e5, 'MaxFunEvals' ,2e5, 'Display' , ...31 'iter' , 'Algorithm' , 'active-set' , 'TolCon' ,1e-400, 'ObjectiveLimit' , ...32 1e300, 'TolX' ,1e-60, 'TolFun' ,1e-6, 'FunValCheck' , 'on' );33 lb = zeros(1,(M+1) * (M+2));34 up = ones(1,(M+1) * (M+2));35 [A,b] = simplexConst(M);36

37 %-------------------------------------------------- ---------------------38 % Generating control mesh39 %-----------------40

41 controlmesh = computing_symplex_wam(mesh_degree);42 V_controlmesh = dubiner_leg(M,controlmesh);43

44 %-------------------------------------------------- ---------------------45 % Starting optimization46 %-----------------47 [pts, fval] = fmincon(@(x)leb_obj(M,x,V_controlmesh), ...48 startPts,A,b,[],[],lb,up,[],options);49 pts = reshape(pts,(M+1) * (M+2)/2,2);50

51 %-------------------------------------------------- ---------------------52 % Computing Vandermonde determinants and Lebesgue constan ts53 %-----------------54 detV_startPts = abs(det(dubiner_leg(M,startPts)));55 controlmesh = computing_symplex_wam(150);56 V_controlmesh = dubiner_leg(M,controlmesh);57 V_optimPts = dubiner_leg(M,pts);58 V_startPts = dubiner_leg(M,startPts);59 L_loc_optimPts = norm(V_optimPts'\V_controlmesh',1);60 L_loc_startPts = norm(V_startPts'\V_controlmesh',1);61

62 %-------------------------------------------------- ---------------------63 % Print results64 %-----------------65 fprintf( '\n \t POLYNOMAIL DEGREE: %d' ,M);66 fprintf( '\n \n \t CONDITION NUMBER:' )67 fprintf( '\n \t START POINTS: %2.2e' ,cond(V_startPts));

22

68 fprintf( '\n \t OPTIM POINTS: %2.2e' ,cond(V_optimPts))69 fprintf( '\n \n \t VANDERMOND DETERMINANTS' );70 fprintf( '\n \t START POINTS: %2.2e' , detV_startPts);71 fprintf( '\n \t OPTIM POINTS: %2.2e' , abs(det(dubiner_leg(M,pts))));72 fprintf( '\n \n \t LEBESGUE CONSTANTS' );73 fprintf( '\n \t START POINTS: %2.2e' ,L_loc_startPts);74 fprintf( '\n \t OPTIM POINTS: %2.2e' ,L_loc_optimPts);75 fprintf( '\n' );

demo_simplex_leb_orbPts.m

1 clear clear all;2 warning( 'off' , 'all' );3 %-------------------------------------------------- ---------------------4 % Setting polynomial degree, number of orbit, controlmesh d egree5 % and starting points6 %-----------------7 M = 11; % M major equal 48 N_orb6 = 0; % Remember: N_orb6 must be less equal than N_pts_free/69 mesh_degree = 150;

10 startPts = 1; % O Random, 1 from file11 file = 'points/BSV_leb_M11' ;12

13 %-------------------------------------------------- ----------------------14 % Setting fmincon parameters,15 % Generating controlmesh,16 % Setting boundary points and add barycentric if necessary17 % Setting boundary limits18 %-----------19

20 options = optimset( 'MaxIter' ,4, 'MaxFunEvals' ,3e5, 'Display' , 'iter' , ...21 'Algorithm' , 'active-set' , 'TolCon' ,1e-400, 'ObjectiveLimit' ,1e300, ...22 'TolX' , 1e-60, 'TolFun' ,1e-60, 'FunValCheck' , 'on' );23

24 controlmesh = computing_symplex_wam(mesh_degree);25 V_controlmesh = dubiner_leg(M,controlmesh);26

27 N_pts=(M+1) * (M+2)/2;28 pts = gauss_lobatto_simplex_boundary(M);29 N_pts_free = N_pts-M * 3;30 if (mod(N_pts_free,3)==1)31 pts = [pts; 1/3 1/3];32 N_pts_free = N_pts_free-1;33 end34

35 N_orbit_free = [(N_pts_free-6 * N_orb6)/3, N_orb6];36 [A, b] = simplexConstOrbit(N_orbit_free);37 lb = zeros(sum(N_orbit_free) * 2,1)';38 up = ones(sum(N_orbit_free) * 2,1)';39

40 %-------------------------------------------------- ----------------------41 % Setting starting points42 %------------43

44 switch startPts45 case 046 startOrb3 = [0 0;1 0;1/3 1/3];47 startOrb6 = [0 0;1/2 0;1/3 1/3];48 x0 = random_tri(startOrb3,N_orbit_free(1));49 x0 = [x0; random_tri(startOrb6,N_orbit_free(2))];50 case 1

23

51 fid = fopen(file);52 x1 = fscanf(fid, '%g %g' , [2 inf])';53 fclose(fid);54 x0 =[]; k=0;55 for i = 1:3:N_orbit_free(1) * 356 k = k+1;57 x0(k,:) = [x1(i), ...58 x1((M+1) * (M+2)/2+i)];59 end60 end61

62 %-------------------------------------------------- ----------------------63 % Starting optimization64 %-------------65

66 [pts_founded] = fmincon(@(x)obj_simplex_leb_orbpts(x, pts, ...67 M,N_orbit_free, V_controlmesh) ,x0,A,b,[],[],lb,up,[] ,options);68

69 %-------------------------------------------------- ----------------------70 % Generating pts output71 %-------------72

73 x = [];74 for i=1:N_orbit_free(1)75 x = [x ;orbit3_simplex(pts_founded(i,:))];76 end77 pts = [x ; pts];78 x = [];79 for i=1:N_orbit_free(2)80 x = [x ;orbit6_simplex(pts_founded(i+N_orbit_free(1),: ))];81 end82 pts = [x ; pts];83

84 %-------------------------------------------------- ---------------------85 % Computing and print Lebesgue constant and Vandermonde det erminant86 %--------------87

88 controlmesh = computing_symplex_wam(150);89 V_controlmesh = dubiner_leg(M,controlmesh);90 V_pts = dubiner_leg(M,[pts(:,1),pts(:,2)]);91 V_det = abs(det(V_pts));92 L_loc = norm(V_pts'\V_controlmesh',1);93 fprintf( '\n \t POLYNOMIAL DEGREE: %d' ,M);94 fprintf( '\n \t CONDITION NUMBER: %2.2e' ,cond(V_pts));95 fprintf( '\n \t LEBESGUE CONSTANT: %6.2f' ,L_loc);96 fprintf( '\n \t VANDERMONDE DETERMINAT: %2.2e' , V_det);

5.2 Funzioni richiamate dalle demo

computing_symplex_wam.m

1 function pts=computing_symplex_wam(deg)2

3 %-------------------------------------------------- ----------------------4 % OBJECT.5 %----------6 % COMPUTE WAM POINTS FOR UNIT SYMPLEX [0 0; 1 0; 0 1].7 %-------------------------------------------------- ----------------------8 % INPUT.9 %----------

24

10 % deg: WAM DEGREE.11 %-------------------------------------------------- ----------------------12 % OUTPUT.13 %----------14 % pts: WAM POINTS ON THE UNIT SYMPLEX [0 0; 1 0; 0 1].15 %-------------------------------------------------- ----------------------16

17 n1=2 * deg;18 n2=n1;19 j1=(0:1:deg-1);20 j2=(0:1:deg);21 [rho,theta]=meshgrid(cos(j1 * pi/n1),j2 * pi/n2);22

23 % Mapping to the simplex24 B=[rho(:). * cos(theta(:)) rho(:). * sin(theta(:))];25 meshT=[B(:,1).ˆ2 B(:,2).ˆ2];26

27 i1=find(rho == 1);28 i2=find(theta == pi/2);29 i3=find(theta == 0);30

31 nodes_x=meshT(:,1);32 nodes_y=meshT(:,2);33

34 pts=[nodes_x nodes_y; 0 0];

dubiner_leg.m

1

2 function V=dubiner_leg(n,pts)3

4 %-------------------------------------------------- ------------------------5 % OBJECT.6 %----------7 % VANDERMONDE MATRIX WRT THE LEGENDRE MEASURE ON THE UNIT SYMPLEX8 % [0 0; 1 0; 0 1] OF DEGREE n EVALUATED ON THE POINTS OF THE SYMPLEX pts.9 %-------------------------------------------------- ------------------------

10

11 x=pts(:,1); y=pts(:,2);12

13 c=1-y;14 t=2 * x-c;15

16 a1=0; b1=0;17

18 ab=r_jacobi(n,a1,b1);19 V1=eval_mod_op(n,ab,a1,b1,t,c,4);20

21 t=2 * y-1; V=[];22

23 for h=0:n24

25 a2=2 * h+1; b2=0;26

27 if n-h > 028 ab2=r_jacobi(n-h,a2,b2);29 else30 ab2=[];31 end32

33 V2loc=eval_op(n-h,ab2,t,a2,b2,3);

25

34 V1loc=repmat(V1(:,h+1),1,size(V2loc,2));35 V=[V V1loc. * V2loc];36 end

eval_mod_op.m

1

2 function V=eval_mod_op(deg,ab,a,b,t,c,type)3

4 if nargin < 35 a=0; b=0;6 end7

8 L=size(t,1);9 aa=ab(:,1);

10 bb=ab(:,2);11

12 switch type13 case 1 % MONIC JACOBI POLYNOMIALS.14 V=[zeros(L,1) ones(L,1)];15 cn=ones(size(ab,1),1);16 co=ones(size(ab,1),1);17 case 2 % CLASSICAL JACOBI (SEE WOLFRAM HOMESITE)18 V=[zeros(L,1) ones(L,1)];19 [cn,co]=c_standard(deg,a,b)20

21 case 3 % ORTHONORMAL JACOBI POLYNOMIALS.22 V=[zeros(L,1) (1/sqrt(ab(1,2))) * ones(L,1)];23 % "ab(1,2)" IS "int_-1ˆ1 w(x) dx".24 [cn,co]=c_orthnrm(deg,a,b);25

26 case 4 % ORTHONORMAL JACOBI POLYNOMIALS USED BY27 % DUBINER ORTHONORMAL BASIS OVER THE SYMPLEX.28 V=[zeros(L,1) (sqrt(8)/sqrt(ab(1,2))) * ones(L,1)];29 % "ab(1,2)" IS "int_-1ˆ1 w(x) dx".30 [cn,co]=c_dub(deg,a,b);31

32 end33

34 for ii=1:deg35 Vloc=cn(ii) * (t-c. * aa(ii)). * V(:,ii+1)-(c.ˆ2) * co(ii) * bb(ii). * V(:,ii);36 V=[V Vloc];37 end38

39 V=V(:,2: end);40

41

42

43

44 function [cn,co]=c_dub(ade,a,b)45

46 [cn_orth,co_orth]=c_orthnrm(ade,a,b);47 cn=2 * cn_orth;48 co=[1; cn(2: end ,:). * cn(1: end -1,:)];49

50

51

52

53 function [cn,co]=c_orthnrm(ade,a,b)54

55 [cn_st,co_st]=c_standard(ade,a,b);

26

56

57 ab=r_jacobi(1,a,b);58 an0=ab(1,2);59

60 n=(1:ade)';61

62 if length(n) > 063 if abs(b) > 064 anloc=(2ˆ(a+b+1)). * gamma(n+a+1). * gamma(n+b+1) ...65 ./((2 * n+a+b+1). * gamma(n+a+b+1). * gamma(n+1));66 else67 anloc=2ˆ(a+b+1)./(2 * n+a+b+1);68 end69 else70 anloc=[];71 end72

73 an=[an0; anloc];74

75 an=an.ˆ(-1/2);76 an_rat=an(2: end ,:)./an(1: end -1,:);77 cn=cn_st. * an_rat;78 co=[1; cn(2: end ,:). * cn(1: end -1,:)];79

80

81

82

83 function [cn,co]=c_standard(deg,a,b)84

85 s=a+b;86

87 % INITIALIZATION TO AVOID SOME POSSIBLE OVERFLOW PROBLEMS FOR NEGATIVE s.88 if (deg > 0)89 cn1=0.5 * gamma(2+s+1)/gamma(s+2);90 else91 cn1=[];92 end93

94 n=2:deg; n=n';95

96 if (abs(s-floor(s)) > 0)97 cnloc=(1./(2 * n)). * (gamma(2 * n+s+1)./gamma(2 * n+s-1)) ...98 . * (gamma(n+s)./gamma(n+s+1));99 else100 cnloc=(1./(2 * n)). * (2 * n+s). * (2 * n+s-1)./(n+s);101 end102

103 cn=[cn1; cnloc];104

105 co=[1; cn(2: end ,:). * cn(1: end -1,:)];

eval_op.m

1

2 function V=eval_op(deg,ab,x,a,b,type)3

4 if nargin < 35 a=0; b=0;6 end7

8 L=size(x,1);

27

9

10 if deg > 011 aa=ab(:,1);12 bb=ab(:,2);13 else14 ab=r_jacobi(1,a,b);15 aa=[];16 bb=[];17 end18

19 switch type20 case 1 % MONIC JACOBI POLYNOMIALS.21 V=[zeros(L,1) ones(L,1)];22 cn=ones(size(ab,1),1);23 co=ones(size(ab,1),1);24

25 case 2 % CLASSICAL JACOBI (SEE WOLFRAM HOMESITE)26 V=[zeros(L,1) ones(L,1)];27 [cn,co]=c_standard(deg,a,b);28

29 case 3 % ORTHONORMAL JACOBI POLYNOMIALS.30 V=[zeros(L,1) (1/sqrt(ab(1,2))) * ones(L,1)];31 % "ab(1,2)" IS "int_-1ˆ1 w(x) dx".32 [cn,co]=c_orthnrm(deg,a,b);33 end34

35 for ii=1:deg36 Vloc=cn(ii) * (x-aa(ii)). * V(:,ii+1)-co(ii) * bb(ii) * V(:,ii);37 V=[V Vloc];38 end39

40 V=V(:,2: end);41

42

43

44

45

46 function [cn,co]=c_orthnrm(ade,a,b)47

48 [cn_st,co_st]=c_standard(ade,a,b);49

50 ab=r_jacobi(1,a,b);51 an0=ab(1,2);52

53 n=(1:ade)';54

55 if length(n) > 056 if abs(b) > 057 anloc=(2ˆ(a+b+1)). * gamma(n+a+1). * gamma(n+b+1) ...58 ./((2 * n+a+b+1). * gamma(n+a+b+1). * gamma(n+1));59 else60 anloc=2ˆ(a+b+1)./(2 * n+a+b+1);61 end62 else63 anloc=[];64 end65

66 an=[an0; anloc];67

68 an=an.ˆ(-1/2);69 an_rat=an(2: end ,:)./an(1: end -1,:);70 cn=cn_st. * an_rat;

28

71 co=[1; cn(2: end ,:). * cn(1: end -1,:)];72

73

74

75

76

77 function [cn,co]=c_standard(deg,a,b)78

79 s=a+b;80

81 % INITIALIZATION TO AVOID SOME POSSIBLE OVERFLOW PROBLEMS FOR NEGATIVE s.82 if (deg > 0)83 cn1=0.5 * gamma(2+s+1)/gamma(s+2);84 else85 cn1=[];86 end87

88 n=2:deg; n=n';89

90 if (abs(s-floor(s)) > 0)91 cnloc=(1./(2 * n)). * (gamma(2 * n+s+1)./gamma(2 * n+s-1)) ...92 . * (gamma(n+s)./gamma(n+s+1));93 else94 cnloc=(1./(2 * n)). * (2 * n+s). * (2 * n+s-1)./(n+s);95 end96

97 cn=[cn1; cnloc];98

99 co=[1; cn(2: end ,:). * cn(1: end -1,:)];

gauss_lobatto_simplex_boundary.m

1 %-------------------------------------------------- ------------------------2 % gauss_lobatto_symplex_boundary3 %-------------------------------------------------- ------------------------4

5 function [pts] = gauss_lobatto_simplex_boundary(polynomial_deg ree)6

7 %-------------------------------------------------- ------------------------8 % OBJECT.9 %----------

10 %11 % COMPUTATION OF GAUSS LOBATTO POINTS ON THE SYMPLEX BOUNDARY12 %13 %-------------------------------------------------- ------------------------14 % INPUT.15 %----------16 %17 % polynomial_degree: POLYNOMIAL DEGREE18 %19 %-------------------------------------------------- ------------------------20 % OUTPUT.21 %----------22 %23 % pts: GAUSS LOBATTO POINTS ON THE SYMPLEX'S BOUNDARY [0 1;1 0;0 0]24 %25 %-------------------------------------------------- ------------------------26 % FUNCTIONS USED IN THIS ROUTINE.27 %---------------------------------28 %29 % 1. lglnodes.m (Written by Greg von Winckel - 04/17/2004)

29

30 %31 % -------------------------------------------------- ----------------------32

33 %LGL Points on the interval [0, 1]34 lgl = (lglnodes(polynomial_degree)+1)./2;35

36 x = [lgl, zeros(polynomial_degree+1,1)];37 y = [zeros(polynomial_degree,1), lgl(1: end -1)];38 xy= [sort(lgl(2: end-1), 'ascend' ), lgl(2: end -1)];39

40 pts = [x; y; xy];41

42 end

lglnodes.m

1 function [x,w,P]=lglnodes(N)2

3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%4 %5 % lglnodes.m6 %7 % Computes the Legendre-Gauss-Lobatto nodes, weights and t he LGL Vandermonde8 % matrix. The LGL nodes are the zeros of (1-xˆ2) * P'_N(x). Useful for numerical9 % integration and spectral methods.

10 %11 % Reference on LGL nodes and weights:12 % C. Canuto, M. Y. Hussaini, A. Quarteroni, T. A. Tang, "Spect ral Methods13 % in Fluid Dynamics," Section 2.3. Springer-Verlag 198714 %15 % Written by Greg von Winckel - 04/17/200416 % Contact: [email protected] %18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%19

20 % Truncation + 121 N1=N+1;22

23 % Use the Chebyshev-Gauss-Lobatto nodes as the first guess24 x=cos(pi * (0:N)/N)';25

26 % The Legendre Vandermonde Matrix27 P=zeros(N1,N1);28

29 % Compute P_(N) using the recursion relation30 % Compute its first and second derivatives and31 % update x using the Newton-Raphson method.32

33 xold=2;34

35 while max(abs(x-xold))>eps36

37 xold=x;38

39 P(:,1)=1; P(:,2)=x;40

41 for k=2:N42 P(:,k+1)=( (2 * k-1) * x. * P(:,k)-(k-1) * P(:,k-1) )/k;43 end44

45 x=xold-( x. * P(:,N1)-P(:,N) )./( N1 * P(:,N1) );

30

46

47 end48

49 w=2./(N * N1* P(:,N1).ˆ2);

obj_simplex_orbpts.m

1 function [V_det] = obj_simplex_orbpts(x,pts_freeze, ...2 polynomial_degree,N_orbit_free)3

4 %5 % OBJECT FUNCTION FOR fmincon6 %-------------------------------------------------- ------------------------7 % INPUT.8 %---------9 % x: fmincon VARIABLE

10 % pts_freeze: KNOW POINTS (I.E. BOUDARY GAUSS LOBATTO POINTS)11 % polynomial_degree: POLYNOMIAL DEGREE12 % N_pts_free: NUMBER OF NOT FIXED POINTS13 % (JUST TO IMPROVE THE OBJ FUNCTION SPEED)14 %-------------------------------------------------- ------------------------15 % OUTPUT:16 %---------17 % V_det : VANDERMONDE DETERMINANT18 %-------------------------------------------------- ------------------------19

20

21 if (N_orbit_free(1) > 0)22 x3 = zeros(N_orbit_free(1) * 3,2);23 for i=1:N_orbit_free(1)24 x3_toval = [x(i), x(sum(N_orbit_free)+i)];25 x3_tmp = orbit3_simplex(x3_toval);26 position = 1+3 * (i-1);27 x3(position,:) = x3_tmp(1,:);28 x3(position+1,:) = x3_tmp(2,:);29 x3(position+2,:) = x3_tmp(3,:);30 end31 else32 x3 = [];33 end34

35 if (N_orbit_free(2) > 0)36 x6 = zeros(N_orbit_free(2) * 6,2);37 for i=1:N_orbit_free(2)38 x6_toval = [x(i+N_orbit_free(1)), ...39 x(sum(N_orbit_free)+N_orbit_free(1)+i)];40 x6_tmp = orbit6_simplex(x6_toval);41 position = 1+6 * (i-1);42 x6(position,:) = x6_tmp(1,:);43 x6(position+1,:) = x6_tmp(2,:);44 x6(position+2,:) = x6_tmp(3,:);45 x6(position+3,:) = x6_tmp(4,:);46 x6(position+4,:) = x6_tmp(5,:);47 x6(position+5,:) = x6_tmp(6,:);48 end49 else50 x6= [];51

52 end53 pts = [pts_freeze; x3; x6];54 V_det = -abs(det(dubiner_leg(polynomial_degree,pts))) ;

31

55 end

orbit3_simplex.m

1 function [pts] = orbit3_simplex(point)2

3 %-------------------------------------------------- ------------------------4 % ON THE SYMPLEX [0 0; 1 0; 0 1]5 %-------------------------------------------------- ------------------------6 % INPUT.7 %---------8 % point : POINT IN THE SYMPLEX9 %-------------------------------------------------- ------------------------

10 % OUTPUT:11 %---------12 % pts : POINTS OBTAINED FROM SIMPLEX ROTATIONS13 %-------------------------------------------------- ------------------------14

15 lm1 = 1 - point(1,1) - point(1,2);16 lm2 = point(1,2);17 lm3 = point(1,1);18 pts = [point; lm1 lm3; lm2 lm1];19

20 end

orbit6_simplex.m

1 function [pts] = orbit6_simplex(point)2

3 %-------------------------------------------------- ------------------------4 % ON THE SYMPLEX [0 0; 1 0; 0 1]5 %-------------------------------------------------- ------------------------6 % INPUT.7 %---------8 % point : POINT IN THE SYMPLEX9 %-------------------------------------------------- ------------------------

10 % OUTPUT:11 %---------12 % pts : POINTS OBTAINED FROM SIMPLEX ROTATIONS AND REFLECTIONS13 %-------------------------------------------------- ------------------------14

15 pts = orbit3_simplex(point);16 triL = [0 0;1/2 0;1/3 1/3];17 rt = TriRep([1:3],triL(:,1),triL(:,2));18 b = cartToBary(rt,1,point);19 triR = [1 0;1/2 0;1/3 1/3];20 et = TriRep([1:3],triR(:,1),triR(:,2));21 point_sym = baryToCart(et,1,b);22

23 pts = [pts; orbit3_simplex(point_sym)];24

25 end

random_tri.m

1 function [pts] = random_tri(triangle, N_pts)2 pts = [];3 for i=1:N_pts4 pts(i,1) = rand(1,1);

32

5 pts(i,2) = rand(1,1);6 while (inpolygon(pts(i,1),pts(i,2),triangle(:,1),triangle (:,2)) == 0)7 pts(i,1) = rand(1,1);8 pts(i,2) = rand(1,1);9 end

10 end11 end

recover_points.m

1 %recupera punti2 function [pts] = recover_points(file_name)3 fid = fopen(file_name);4 pts = fscanf(fid, '%f %f' , [2 inf]);5 fclose(fid);6 pts = pts';7 end

r_jacobi.m

1

2 function ab=r_jacobi(N,a,b)3

4 nu=(b-a)/(a+b+2);5 mu=2ˆ(a+b+1) * gamma(a+1) * gamma(b+1)/gamma(a+b+2);6 if N==17 ab=[nu mu]; return8 end9

10 N=N-1;11 n=1:N;12 nab=2 * n+a+b;13 nuadd=(bˆ2-aˆ2) * ones(1,N)./(nab. * (nab+2));14 A=[nu nuadd];15 n=2:N;16 nab=nab(n);17 B1=4* (a+1) * (b+1)/((a+b+2)ˆ2 * (a+b+3));18 B=4* (n+a). * (n+b). * n. * (n+a+b)./((nab.ˆ2). * (nab+1). * (nab-1));19 abadd=[mu; B1; B'];20 ab=[A' abadd];21 end

save_points.m

1 function [] = save_points(pts,file_name)2 fid = fopen(file_name, 'w' );3 for i=1:size(pts,1)4 fprintf(fid, '%1.25f %1.25f\n' , pts(i,1), pts(i,2));5 end6 fclose(fid);7 end

shakePts.m

1 function [out_pts] = shakePts(in_pts,k)2 out_pts =[];3 for i=1:size(in_pts,1)4 out_pts(i,1) = in_pts(i,1) + (rand(1,1)-1/2)/k;

33

5 out_pts(i,2) = in_pts(i,2) + (rand(1,1)-1/2)/k;6 while (out_pts(i,1) < 0+eps || out_pts(i,2) < 0+eps || ...7 out_pts(i,1)+out_pts(i,2) > 1-eps)8 out_pts(i,1) = in_pts(i,1) + (rand(1,1)-1/2)/k;9 out_pts(i,2) = in_pts(i,2) + (rand(1,1)-1/2)/k;

10 end11 end12 end

simplexConst.m

1 function [A,b] = simplexConst(degree)2

3 %-------------------------------------------------- ------------------------4 % Generating matrix A and vector b for the fmincon linear ineq ualities.5 % Every point must satisfy the "A1 x ≤ b1" linear inequality.6 %----------------7

8 n_pts = (degree+1) * (degree+2)/2;9 A1 = [0 -1;1 1;-1 0];

10 b1 = [0; 1; 0];11

12 A2 = A1;13 for i = 1:n_pts-114 A2 = blkdiag(A2, A1);15 end16 A = [A2(:,1:2:n_pts * 2-1) A2(:,2:2:n_pts * 2)];17

18 b = b1;19 for i = 1:n_pts-120 b = vertcat(b,b1);21 end

simplexConstOrbit.m

1 function [A,b] = simplexConstOrbit(N_orbit_free)2

3 A3 = [0 -3; 1 2; -1 1];4 b3 = [0; 1; 0];5 A6 = [2 1;0 -3;-2 -2];6 b6 = [1; 0; 0];7

8 A = [];9 for i = 1:N_orbit_free(1)

10 A = blkdiag(A, A3);11 end12 for i = 1:N_orbit_free(2)13 A = blkdiag(A, A6);14 end15

16 A = [A(:,1:2:size(A,2)-1) A(:,2:2:size(A,2))];17

18 b = [];19 for i=1:N_orbit_free(1)20 b = [b; b3];21 end22 for i=1:N_orbit_free(2)23 b = [b; b6];24 end25 end

34

6 Coordinate BSV

Le coordinate di tutti i punti di Fekete e di Lebesgue trovati relative al sim-plesso (0, 0), (0, 1), (1, 0) si possono trovare all’indirizzo http://www.math.unipd.it/ ˜ alvise/software.html

6.1 Punti di Fekete

Tabella 3: BSV Points n=1

1.0000000000000000000000000 0.00000000000000000000000000.0000000000000000000000000 1.00000000000000000000000000.0000000000000000000000000 0.0000000000000000000000000

Tabella 4: BSV Points n=2

1.0000000000000000000000000 0.00000000000000000000000000.5000000000000000000000000 0.50000000000000000000000000.0000000000000000000000000 1.00000000000000000000000000.5000000000000000000000000 0.00000000000000000000000000.0000000000000000000000000 0.50000000000000000000000000.0000000000000000000000000 0.0000000000000000000000000

Tabella 5: BSV Points n=3

1.0000000000000000000000000 0.00000000000000000000000000.7236067919362746403422193 0.27639320806372547068008320.2763931933661959439163525 0.72360680663380394506134510.0000000000000000000000000 1.00000000000000000000000000.7236067940434681711181497 0.00000000000000000000000000.3333333318626450769706082 0.33333332720603220389321560.0000000000000000000000000 0.72360678327761007722074280.2763931956747817109132370 0.00000000000000000000000000.0000000000000000000000000 0.27639319806372530941018790.0000000000000000000000000 0.0000000000000000000000000

Tabella 6: BSV Points n=4

0.2165423575799505229166897 0.21654236130524082137860380.5669152736642281142920297 0.21654236503053111984051780.2165423650305311198405178 0.56691527366422811429202971.0000000000000000000000000 0.0000000000000000000000000

35

0.8273268307539021204632945 0.00000000000000000000000000.4999999944120645523071289 0.00000000000000000000000000.1726731580702270674176901 0.00000000000000000000000000.0000000000000000000000000 0.00000000000000000000000000.0000000000000000000000000 1.00000000000000000000000000.0000000000000000000000000 0.82732683535970819033167340.0000000000000000000000000 0.49999999441206455230712890.0000000000000000000000000 0.17267316552080766434151830.1726731617955173658796042 0.82732683820448271738712260.5000000037252902984619141 0.49999999627470970153808590.8273268382044827173871226 0.1726731617955173658796042

Tabella 7: BSV Points n=5

0.4208255272565297744336021 0.15834891548694063345692480.4208255472565296528841827 0.42082552725652977443360210.1583489154869406334569248 0.42082554725652965288418270.1480194690350228603481497 0.14801946903502286034814970.7039610654106960296871875 0.14801946903502286034814970.1480194690350228603481497 0.70396106541069602968718751.0000000000000000000000000 0.00000000000000000000000000.8825276542465745333032601 0.00000000000000000000000000.6426157558106220246685325 0.00000000000000000000000000.3573842376701199530231179 0.00000000000000000000000000.1174723392341674998995416 0.00000000000000000000000000.0000000000000000000000000 0.00000000000000000000000000.0000000000000000000000000 1.00000000000000000000000000.0000000000000000000000000 0.88252765424657453330326010.0000000000000000000000000 0.64261575581062202466853250.0000000000000000000000000 0.35738423767011995302311790.0000000000000000000000000 0.11747233923416749989954160.1174723392341674998995416 0.88252766076583255561160970.3573842447878605166344812 0.64261575521213942785436760.6426157558106220246685325 0.35738424418937797533146750.8825276607658325556116097 0.1174723392341674998995416

Tabella 8: BSV Points n=6

0.3162697888218031772034067 0.11718091328875741841120120.5665492978894394182631800 0.31626978882180317720340670.1171809095634670921937115 0.56654929788943941826318000.1063354596038695448756428 0.10633546332915987109313250.7873290670669707003170856 0.10633545960386954487564280.1063354596038695448756428 0.78732906706697070031708560.5665492878894393680155872 0.1171809132887574184112012

36

0.3162697988218031719398482 0.56654928788943936801558720.1171809095634670921937115 0.31626979882180317193984821.0000000000000000000000000 0.00000000000000000000000000.9151119465909423045246740 0.00000000000000000000000000.7344243972640558393294441 0.00000000000000000000000000.4999999981373548507690430 0.00000000000000000000000000.2655755990106538066974906 0.00000000000000000000000000.0848880496837673692578363 0.00000000000000000000000000.0000000000000000000000000 0.00000000000000000000000000.0000000000000000000000000 1.00000000000000000000000000.0000000000000000000000000 0.91511194659094230452467400.0000000000000000000000000 0.73442439726405583932944410.0000000000000000000000000 0.49999999813735485076904300.0000000000000000000000000 0.26557559901065380669749060.0000000000000000000000000 0.08488804968376736925783630.0848880496837673692578363 0.91511195031623271400889050.2655756027359441051594047 0.73442439726405583932944410.4999999962747097015380859 0.50000000372529029846191410.7344243972640558393294441 0.26557560273594410515940470.9151119503162327140088905 0.08488804968376736925783630.3333333287582365689338815 0.3333333287582365689338815

Tabella 9: BSV Points n=7

0.2001140992545168695304625 0.20011410297980719574795220.5997717877656760787630219 0.20011409925451686953046250.2001141029798071957479522 0.59977178776567607876302190.8205797969431020133512789 0.08971009966580383021561570.0897100996658038302156157 0.82057979694310201335127890.0897100996658038302156157 0.08971009966580383021561570.4024567885007316325740589 0.19508640299853682864572590.4024568085007315110246395 0.40245678850073163257405890.1950863992732465024282362 0.40245680850073151102463950.6170320214266669101021989 0.06628319975307583877821570.3166847788202572511195854 0.61703201770137661164028490.0662831997530758387782157 0.31668477882025725111958540.3166847353418913435518789 0.06628320695673227402888730.6170320577013763685414460 0.31668473882025743870727300.0662831997530758387782157 0.61703205770137636854144601.0000000000000000000000000 0.00000000000000000000000000.9358700665136122642806527 0.00000000000000000000000000.7958500870352274159102990 0.00000000000000000000000000.6046496077475046471150222 0.00000000000000000000000000.3953503885272049989119125 0.00000000000000000000000000.2041499092394823133833626 0.00000000000000000000000000.0641299297610973956240699 0.00000000000000000000000000.0000000000000000000000000 0.0000000000000000000000000

37

0.0000000000000000000000000 1.00000000000000000000000000.0000000000000000000000000 0.93587006651361226428065270.0000000000000000000000000 0.79585008703522741591029900.0000000000000000000000000 0.60464960774750464711502220.0000000000000000000000000 0.39535038852720499891191250.0000000000000000000000000 0.20414990923948231338336260.0000000000000000000000000 0.06412992976109739562406990.0641299297610973956240699 0.93587007023890267376486920.2041499092394823133833626 0.79585009076051771437221300.3953503885272049989119125 0.60464961147279494557693620.6046496114727949455769362 0.39535038852720499891191250.7958500907605177143722130 0.20414990923948231338336260.9358700702389026737648692 0.0641299297610973956240699

Tabella 10: BSV Points n=8

0.6666498775165357049132808 0.16589562938199059471955370.1674544893761834296608271 0.66664987751653570491328080.1658956331072809209370433 0.16745448937618342966082710.2141942392020642904615357 0.05220012980553935533212240.7336056272671060973777912 0.21419423920206429046153570.0522001298055393553321224 0.73360562726710609737779120.6722838212208379626844135 0.05185048980684187069911670.2758656889723202221276210 0.67228381749554766422249940.0518504898068418706991167 0.27586568897232022212762100.3197381388088825771021106 0.22160582289974431469126160.4586560482913730196763424 0.31973813880888257710211060.2216058191744539884737719 0.45865604829137301967634240.4155299084520304719880812 0.06595578347958590270661010.5185143080683837224498234 0.41552990845203047198808120.0659557797542955764891204 0.51851430806838372244982340.8556910868123022151365831 0.06476518975873085670613700.0795437197036765464286390 0.85569108681230221513658310.0647651897587308567061370 0.07954371970367654642863900.5107006080974919592918582 0.15457705314944591989956280.3347223387530621208085790 0.51070060809749195929185820.1545770562988918184199605 0.33472233875306212080857901.0000000000000000000000000 0.00000000000000000000000000.9498789964614249292651493 0.00000000000000000000000000.8385931368759970139237225 0.00000000000000000000000000.6815587274609958834403756 0.00000000000000000000000000.4999999981373548507690430 0.00000000000000000000000000.3184412688137138180977104 0.00000000000000000000000000.1614068593987126043476366 0.00000000000000000000000000.0501209998132847237006793 0.00000000000000000000000000.0000000000000000000000000 0.00000000000000000000000000.0000000000000000000000000 1.0000000000000000000000000

38

0.0000000000000000000000000 0.94987899646142492926514930.0000000000000000000000000 0.83859313687599701392372250.0000000000000000000000000 0.68155872746099588344037560.0000000000000000000000000 0.49999999813735485076904300.0000000000000000000000000 0.31844126881371381809771040.0000000000000000000000000 0.16140685939871260434763660.0000000000000000000000000 0.05012099981328472370067930.0501209998132847237006793 0.94987900008671521945302630.1614068593987126043476366 0.83859314060128742340793910.3184412688137138180977104 0.68155873118628618190228960.5000000008626451775128885 0.49999999813735485076904300.6815587311862861819022896 0.31844126881371381809771040.8385931406012874234079391 0.16140685939871260434763660.9498790000867152194530263 0.0501209998132847237006793

39

6.2 Punti di Lebesgue

Tabella 11: BSV Points n=1

1.0000000000000000000000000 0.00000000000000000000000000.0000000000000000000000000 1.00000000000000000000000000.0000000000000000000000000 0.0000000000000000000000000

Tabella 12: BSV Points n=2

1.0000000000000000000000000 0.00000000000000000000000000.4805908203125000000000000 0.48059082031250000000000000.0000000000000000000000000 1.00000000000000000000000000.4805908203125000000000000 0.03881835937500000000000000.0388183593750000000000000 0.48059082031250000000000000.0000000000000000000000000 0.0000000000000000000000000

Tabella 13: BSV Points n=3

0.0000000039438882353489857 0.99999983118888957633885180.7014238659418798871314493 0.02552734098081897370913220.7051937575733242535847012 0.27518752083257841389851710.9999997737783101747766068 0.00000022622168980266351770.0225531686606815252871261 0.27305653764434700825347590.0000000000000000000000000 0.00000031320151060360366910.2769008846828238668003053 0.70001556150865695826723820.0198481310289092272025613 0.70227542487054350761610520.3285629975703333038872245 0.33320865829650514466919730.2779286052952734675791646 0.0164613320384024847120585

Tabella 14: BSV Points n=4

0.1680493036523844074814349 0.82204603507939311146657250.8209536399421107910612250 0.17253189878103017407262600.2213540176989938212948061 0.23534506027522755777781070.0226044155848823084820065 0.49029083971870535130221920.1709954996386264247654196 0.00991842371750100565419570.0060104077273104685244509 0.16780675518178858607321050.5469729858440147696185818 0.21774131881805489086012530.4809675401079898104939048 0.49662982771771480017264370.0083561956884267915568465 0.81981885208245752760802820.9999998277157987613961154 0.0000001722842013197812458

40

0.4859696278467355301522446 0.02218844471511735583213460.2388012102560019278563175 0.54050928206016735089178840.8255523374124443813926177 0.00703851426980299423735720.0000000000000000000000000 1.00000000000000000000000000.0000000000000000000000000 0.0000012432123574616806548

Tabella 15: BSV Points n=5

0.0011490635784818156988479 0.88147140375186394667395010.6052375305843590291843270 0.01753956814034188932405200.3758539796176279534911657 0.01680318392561609003310610.0014310038506597747443722 0.14903368171922590224021120.6770497928506935547687817 0.15478493249578692547707700.3864799686749379459271836 0.60025028160061610904563170.0198779780218965550220300 0.38015036751462355502084730.9999789043540405764076695 0.00001938889728918759725210.1201742651964492897276315 0.87671160678067294735882340.0004445197678413811254693 0.99954995471541663309977820.8809548665535366085421742 0.00094841406555959655976660.0001094838619838359481751 0.00166991450547142078648930.1550938897015839701420958 0.16610211951746958747300200.4052807999770946523199200 0.43110828669699363668854630.6259549465763663000927863 0.35479890860703705568468540.0130087195183598326730934 0.61646641248471689689125700.1833089495833718218786856 0.41970106507547777496824890.8855709195982357506693461 0.11137373282729480516994870.3983186340849798057206499 0.17636484719019948630425180.1594655183271402043576614 0.67418500079890930631876240.1148327731628088488324835 0.0036918752113249517395055

Tabella 16: BSV Points n=6

0.9999909377377262931219093 0.00000648515413523207637110.0910269710137269622007850 0.90896771225906780600212190.1400977559060862520645685 0.32865296941220828452756560.9167538361788154510634286 0.00000000000000000000000000.7652274922605203366643423 0.11501236241584569808260600.1285302055576629243205389 0.13147598210799846252250230.7225282223441572559963220 0.01313873790263699395386430.1284023815335127716164010 0.75124995328192978316650400.0798170415830548318769644 0.00758688872636403659199810.0024225440982500309403114 0.91486689045661573338463770.0000000000000000000000000 0.00000206159061026145399300.0117024322073490411738605 0.27795196474328032198997110.9025235550914192383942236 0.0950852926256850333741610

41

0.3347753714110702771833417 0.12843930359783795047690090.0124809511149139573671363 0.70901038418067841018199720.3371053352356456200844548 0.52372566458565694702542710.5188616166675176222256027 0.01079405709125321431718360.5348485417624508908573944 0.14605480048735350329103260.0117361524697966283781181 0.49571283402771598725067290.5458904769048761318472884 0.32257054006109925348155800.2671039945961878325775274 0.71878141352517210815875610.0000031485119861641207585 0.09279136796839947132209400.2811199771511125322653868 0.01119323661137638752094410.0000000000000000000000000 0.99999622544648281152745990.6909712978548391282274110 0.29705881380554449711084430.1349018965023963123606165 0.54262325892628793244654160.4623605310744145491241852 0.52679886400084641184804470.3237181069321943271965836 0.3336388325029243651087540

Tabella 17: BSV Points n=7

0.0001494413427672991304986 0.36483081207346818031211910.6355828163920869133818314 0.24670838431429184534060540.9131230854369316585206207 0.07994588736077513912992030.9805006958901039126885735 0.00624456869190216645737480.4174365458261891093094675 0.15813361394770705792289790.2372225366817143354936093 0.14659150058869208077538810.3787383446706776846113485 0.05323747864414665048604650.2345052791861833574316165 0.56374494224821491972221570.4741533048644103742752520 0.43054436521947170302127010.2297596080032182075392200 0.38925370892139010692289960.8107888238161498062339660 0.08696167731347352602977450.4678350923766164126682554 0.30825176508209345405120420.0036673189846075419061344 0.99630098101410791144871840.0831961247153818889144006 0.90401908224806903913162160.0010423308236184999561735 0.07048416328242150530325460.0914527734997793578797243 0.76336577034628538829252880.9221900622300058802949252 0.00435682265430905983627510.6190753410995804006944354 0.10382010032465871507412200.2449924849713230323722257 0.75486991401136982471342660.5859990246456063811564263 0.01413209366429799516973190.0000167175880417602230421 0.80166468371986832064379770.0001300831271608996430027 0.00008355628570947749075150.7593587595157006431279001 0.00597995472145779628087010.4044020191302912792252755 0.00002048726392254444876180.2251389957012642217826226 0.71006669558477353287884170.7694657745079552801925615 0.21897480865029422814060920.0767042927763498388893382 0.30167008086129570854083680.4052791388248185855402994 0.58006352035123087684809210.0141687594164432231758077 0.1909098595608481330199169

42

0.5969025709049446959397756 0.39403522665883394804353660.0000407752644471921801253 0.58665497990966508634613770.0712793159515791446834143 0.55821013627955817781867150.0653836052972750630951637 0.00025034500696429439186440.0146572720541743653499545 0.92090556652771327073025990.2173896356758006631615388 0.01343905137269831018276280.1076286542978429350281289 0.0941823103761572771874810

Tabella 18: BSV Points n=8

0.6385853180929959016509656 0.18070733595354970812962850.1807073459534543902194059 0.63858531809299590165096560.1807073359535497081296285 0.18070734595345439021940590.1982592484987402148277624 0.05566664890983730878959430.7460741025914224833215371 0.19825924849874021482776240.0556666489098373087895943 0.74607410259142248332153710.6541804255818826074886374 0.04968201600649617410976330.2961375584116212045238115 0.65418042558188260748863740.0496820160064961741097633 0.29613755841162120452381150.3236725127320208006409530 0.22581081564177715725882930.4505166716262020143446421 0.32367251273202080064095300.2258108156417771572588293 0.45051667162620201434464210.4152475883117440758063310 0.08722769780023365004950620.4975247138880222186330116 0.41524758831174407580633100.0872276978002336500495062 0.49752471388802221863301160.8192561819109828169516163 0.08119750657330718213167130.0995463115157100009167124 0.81925618191098281695161630.0811975065733071821316713 0.09954631151571000091671240.5175015509963648563385163 0.16510879619566268261543480.3173896528079724888016244 0.51750155099636485633851630.1651087961956626826154348 0.31738965280797248880162441.0000000000000000000000000 0.00000000000000000000000000.9498789977057300326634959 0.00000000000000000000000000.8385931397553688659840532 0.00000000000000000000000000.6815587319130891330587474 0.00000000000000000000000000.5000000000000000000000000 0.00000000000000000000000000.3184412680869109224524038 0.00000000000000000000000000.1614068602446311340159468 0.00000000000000000000000000.0501210022942699118253529 0.00000000000000000000000000.0000000000000000000000000 0.00000000000000000000000000.0000000000000000000000000 1.00000000000000000000000000.0000000000000000000000000 0.94987899770573003266349590.0000000000000000000000000 0.83859313975536886598405320.0000000000000000000000000 0.68155873191308913305874740.0000000000000000000000000 0.50000000000000000000000000.0000000000000000000000000 0.31844126808691092245240380.0000000000000000000000000 0.1614068602446311340159468

43

0.0000000000000000000000000 0.05012100229426991182535290.0501210022942699118253529 0.94987899770573003266349590.1614068602446311340159468 0.83859313975536886598405320.3184412680869109224524038 0.68155873191308913305874740.5000000000000000000000000 0.50000000000000000000000000.6815587319130891330587474 0.31844126808691092245240380.8385931397553688659840532 0.16140686024463113401594680.9498789977057300326634959 0.0501210022942699118253529

44

Riferimenti bibliografici

[1] M. G. Blyth, C. Pozrikidis, A Lobatto interpolation grid over the triangle, IMAJ. Appl. Math. 71(1), 153-169 (2006)

[2] L. Bos, Bounding the Lebesgue function for Lagrange interpolation in a simplex,J. Approx. Theory, 38 (1983), pp 43-59.

[3] J. P. Boyd, A numerical comparison of seven grids for polynomial interpolationon the interval, Comput. Math. Appl. 38 (1999), no. 3-4, 3550.

[4] Q. Chen and Ivo Babuska, Approximate optimal points for polynomial inter-polation of real functions in an interval and in a triangle, Comput. MethodsAppl. Mech. Engrg., 128 (1995), pp 405-417.

[5] W. Gautschi, Orthogonal polynomials: computation and approximation, Num.Math. and Scient. Comput., Oxford University Press, Oxford 2004.

[6] W. Heinrichs, Improved Lebesgue constants on the triangle, J. Comput. Phys.207(2), 625-638 (2005)

[7] J. S. Hesthaven, From electrostatics to almost optimal nodal sets for polynomialinterpolation in a simplex, SIAM J. Numer. Anal. 35, 655-676 (1998)

[8] G. Karniadakis, S.J. Sherwin, Spectral/hp Element Methods for CFD Nu-merical Mathematics and Computation, Oxford University Press, London,(1999).

[9] R. Pasquetti, F. Rapetti, Spectral element methods on unstructured meshes,Journal of Scientific Comput. (2010)

[10] A. Sommariva, M. Vianello Computing approximate Fekete points by QR fac-torizations of Vandermonde matrices, Comput. Math. Appl. 57, 1324-1336(2009).

[11] M. A. Taylor, B. A. Wingate, R. E. Vincent An algorithm for computing Feketepoints in the triangle, SIAM J. Number. Anal. 38 (2000) 1707-1720

[12] T. Warburton, An explicit construction for interpolation nodes on the simplex,J. Eng. Math. 56(3), 247-262 (2006)

45