OldClaudio” post=72123Detto in altri termini: l’interpolazione lineare (curve di Bézier del primo ordine: segmenti) richiede un mucchio di punti; [omissis] . Le curve di Bézier del terzo ordine sono raccordate in modo da mantenere la continuità della tangente sia quella della concavità. Fidatevi di Bézier: le quadratiche vanno già bene; le cubiche vanno ottimamente. Sia tikz sia pgfplots possono usare tranquillamente le curve di Bézier; con grossi vantaggi sul disegno e sull’impiego modesto della memoria.
Su questo punto non sono d’accordo ad occhi chiusi. Ci sono dei grafici per i quali le curve di Bézier vanno benissimo e sono quelli in cui, come hai detto tu, tra le proprietà della curva c’è la continuità della tangente e della concavità. Ci sono però delle curve che non hanno questa proprietà e tracciarle con l’interpolazione cubica può dare problemi se i punti non sono scelti bene. Prendi ad esempio il grafico di una rampa o una qualunque curva con un punto angoloso. Se i nodi sono scelti uniformemente nel dominio e sono radi, rischi di prendere fischi per fiaschi. Se invece i nodi sono uniformemente distribuiti e densi va tutto bene, ma a questo punto a che ti serve l’interpolazione non lineare? Per mantenere basso il numero dei nodi, la soluzione è addensarli in prossimità del punto angoloso e diradarli altrove, che è ciò che fanno Matlab e Mathematica quando determinano il luogo delle radici, ad esempio. Ma se non usiamo un algoritmo del genere? Pensa ad un campionamento uniforme con acquisizione dati. Affideresti alla cieca la tua analisi alle curve di Bézier? La figura che segue mostra la differenza di comportamento della rampa nel caso di interpolazione lineare e cubica su nodi equispaziati, ottenuto con questo codice:
`\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis} [legend pos=north west, no marks]
\addplot+[thick, dashed] coordinates {(-3,0) (-2,0) (-1,0) (0,0) (1,1) (2,2) (3,3)};
\addplot+[smooth, thick] coordinates {(-3,0) (-2,0) (-1,0) (0,0) (1,1) (2,2) (3,3)};
\legend{lineare,cubica}
\end{axis}
\end{tikzpicture}
\end{document}`
[attachment=246]rampa.png[/attachment]
Altro aspetto è quello del risparmio di memoria. Perché pensi che l’interpolazione di ordine superiore faccia risparmiare memoria? Secondo te dove vengono memorizzati i punti inermedi tra i nodi (*)? Quei punti che non ci metti tu nella definizione della curva se li deve calcolare e memorizzare lui per tracciare il grafico: non è che i punti sul pdf se li può inventare. Quindi non solo non risparmi memoria, ma rallenti anche la compilazione(**). Fa una prova. Io ho provato a tracciare una retta con un numero di campioni spinto quasi al limite. Ho aggiunto l’opzione [tt]smooth[/tt] e la compilazione si è arrestata per sforamento della capacità. L’interpolazione cubica serve solo a rendere più dolci i grafici quando i punti a disposizione sono pochi e ad ottenere risultati decenti non rallentando troppo la compilazione(**) con un numero sproporzionato di campioni. La soluzione sta semplicemente nel non esagerare con i nodi, ma io preferisco (quasi) sempre campioni veri a campioni inventati.
O sbaglio? Ciao
*************************************
Edit: forse ho capito ora che con “impiego modesto della memoria” volevi dire che con le curve di Bézier servono meno punti in più che con l’interpolazione lineare per ottenere generalmente buoni risultati con un modesto incremento della memoria. Se è così siamo d’accordo (con le obiezioni sollevate all’inizio), ma è bene chiarire che l’interpolazione cubica ha bisogno di ulteriore spazio di memoria per definire le curve rispetto a quella riservata ai campioni.
*************************************
(*) non intendo i punti che costituiscono la linea, ma quelli necessari a determinare univocamente l’equazione della curva.
(**) rallenti la compilazione rispetto al caso in cui non aumenti tu i nodi, ma se per evitare le curve di Bézier aumenti i campioni, il discorso è vero fintantoché la funzione della quale vuoi disegnare il grafico è più “semplice” di un polinomio di terzo grado e quindi quasi mai.