[LaTeX] Grafico di funzione con tikzpicture
Il codice
produce

Il problema è ovviamente nelle "gobbette": le funzioni sono valori assoluti
... Qualcuno ha qualche idea, per cortesia, per come ovviare a questo stupido e spiacevole incoveniente? Le ho già provate un po' tutte, ma non riesco a togliere quella brutta "smussatura", temo sia un problema legato alla definizione di valore assoluto... Qualche idea, per favore?
Grazie.
\begin{tikzpicture} \begin{axis} [enlargelimits, xmin=-5,xmax=5,ymin=-1,ymax=1, axis x line=middle, axis y line=middle] \addplot [smooth, samples=50, blue] {-abs(x)+1}; \addplot [smooth, samples=50, thick, blue] {-abs(x-4)+1}; \addplot [smooth, samples=50, thick, blue] {-abs(x+4)+1}; \end{axis} \end{tikzpicture}
produce

Il problema è ovviamente nelle "gobbette": le funzioni sono valori assoluti

Grazie.
Risposte
A praticamente un mese esatto, ce l'ho fatta: ho aggiornato la distribuzione LaTeX. Ora pare funzionare tutto, anche questi benedetti grafici (finalmente appuntiti a dovere!).
Ringrazio tutti per l'aiuto e per i preziosi consigli.
Ringrazio tutti per l'aiuto e per i preziosi consigli.
Sono passati diversi anni e forse il problema si trova in qualche bug o incompatibilità della versione che usi. Io ti direi di provare ad aggiornare la distribuzione LaTeX.
Nulla di più probabile... Latex l'ho installato appena comprato questo computer, era l'estate 2009. Per l'installazione, l'avevo scaricato da qui, ma poi non l'ho mai aggiornato. Che cosa mi consigli di fare?
Grazie ancora.
Grazie ancora.
! Package pgfkeys Error: I do not know the key '/pgfplots/compat' and I am goin
g to ignore it. Perhaps you misspelled it.
See the pgfkeys package documentation for explanation.
Type Hfor immediate help.
Potrebbe essere che il tuo pacchetto PGFPlots sia così vecchio da non supportare quel parametro (e magari nemmeno samples e samples at correttamente, avremmo capito il problema). Ma dovrebbe essere molto vecchio (da una breve ricerca sembra compat sia stato introdotto con la versione 1.3, intorno al 2009/2010). Come hai installato il pacchetto / la distribuzione Latex?
Con questo
ottengo

Invece, ed era questo che cercavo malamente di dirti prima, con il codice
non ottengo nulla. L'errore in fase di compilazione è:
Possibile che ci sia un errore nel mio pacchetto? Che cosa devo fare? Grazie mille.
\documentclass{article} \usepackage{pgfplots} \begin{document} \begin{tikzpicture} \begin{axis} [enlargelimits, xmin=-5,xmax=5,ymin=-1,ymax=1, axis x line=middle, axis y line=middle ] \addplot+[samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, blue] {-abs(x)+1}; \addplot+[samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, thick, blue] {-abs(x-4)+1}; \addplot+[samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, thick, blue] {-abs(x+4)+1}; \end{axis} \end{tikzpicture} \end{document}
ottengo

Invece, ed era questo che cercavo malamente di dirti prima, con il codice
\documentclass{article} \usepackage{pgfplots} \pgfplotsset{compat=1.7} \begin{document} \begin{tikzpicture} \begin{axis} [enlargelimits, xmin=-5,xmax=5,ymin=-1,ymax=1, axis x line=middle, axis y line=middle ] \addplot+[samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, blue] {-abs(x)+1}; \addplot+[samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, thick, blue] {-abs(x-4)+1}; \addplot+[samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, thick, blue] {-abs(x+4)+1}; \end{axis} \end{tikzpicture} \end{document}
non ottengo nulla. L'errore in fase di compilazione è:
! Package pgfkeys Error: I do not know the key '/pgfplots/compat' and I am goin
g to ignore it. Perhaps you misspelled it.
See the pgfkeys package documentation for explanation.
Type Hfor immediate help.
Possibile che ci sia un errore nel mio pacchetto? Che cosa devo fare? Grazie mille.
L'opzione compat non dovrebbe essere causa di niente, se non ricordo male è dovuto al fatto che tra diverse versioni del pacchetto cambiano le regole per la spaziatura tra gli assi e il grafico. È meglio impostarlo esplicitamente, così se in una versione successiva cambiano ancora, i grafici rimangono gli stessi. Si usa così:
Prova a compilare questo in un file nuovo, per vedere se almeno così funziona:
\usepackage{pgfplots} \pgfplotsset{compat=1.7}
Prova a compilare questo in un file nuovo, per vedere se almeno così funziona:
\documentclass{article} \usepackage{pgfplots} \begin{document} \begin{tikzpicture} \begin{axis} [enlargelimits, xmin=-5,xmax=5,ymin=-1,ymax=1, axis x line=middle, axis y line=middle ] \addplot+[samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, blue] {-abs(x)+1}; \addplot+[samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, thick, blue] {-abs(x-4)+1}; \addplot+[samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, thick, blue] {-abs(x+4)+1}; \end{axis} \end{tikzpicture} \end{document}
Niente da fare, per un attimo ho sperato che tutto si sistemasse cancellando i file della compilazione, ma nulla... Per quanto riguarda PGFPlots non saprei proprio che fare. Noto però che ho dei problemi con questo pacchetto: stando al manuale, uno dovrebbe poter usare l'opzione - quando si carica il pacchetto - compat, che dovrebbe riguardare la compatibilità tra vecchie e nuove versioni. Se però io lo metto nelle opzioni di \usepackage{pgfplots} il compilatore mi dice che non capisce. Sono davvero perplesso.
Di solito compilo e uso PdfLatex: ho pensato potesse dipendere anche da quello, così ho provato a compilare Latex ma nulla... Grazie ancora.
Di solito compilo e uso PdfLatex: ho pensato potesse dipendere anche da quello, così ho provato a compilare Latex ma nulla... Grazie ancora.
Ma è assurdo!
I punti campionati non sono quelli specificati.
A questo punto sono a corto di idee… Prova a cancellare tutti i file generati durante la compilazione (ma non dovrebbe dipendere da questo). Vedi anche se riesci a capire che versione di PGFPlots stai usando (non saprei come).

A questo punto sono a corto di idee… Prova a cancellare tutti i file generati durante la compilazione (ma non dovrebbe dipendere da questo). Vedi anche se riesci a capire che versione di PGFPlots stai usando (non saprei come).
Niente, proprio non capisco:

Mettendo addplot+ con l'opzione smooth mi viene lo stesso grafico, con l'unica differenza dell'archetto in alto... Grazie ancora.
\begin{tikzpicture}[] \begin{axis} [enlargelimits, xmin=-5,xmax=5,ymin=-1,ymax=1, axis x line=middle, axis y line=middle] \addplot+[samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, blue] {-abs(x)+1}; \addplot+[samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, thick, blue] {-abs(x-4)+1}; \addplot+[samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, thick, blue] {-abs(x+4)+1}; \end{axis} \end{tikzpicture}

Mettendo addplot+ con l'opzione smooth mi viene lo stesso grafico, con l'unica differenza dell'archetto in alto... Grazie ancora.
Qualcosa non torna… Prova a stampare anche i punti, non solo la linea interpolante (\addplot+ invece di \addplot).
"claudio86":
Strano, a me già con samples=100 da un grafico quasi corretto (bisogna zoomare un po' prima di notare qualcosa). Probabilmente però ti conviene togliere il parametro smooth, dato che vuoi disegnare una linea spezzata.
Non so davvero che cosa pensare. Scusa se continuo a rompere le scatole, ma con il codice che mi hai gentilmente indicato tu
\begin{tikzpicture}[] \begin{axis} [enlargelimits, xmin=-5,xmax=5,ymin=-1,ymax=1, axis x line=middle, axis y line=middle] \addplot [samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, blue] {-abs(x)+1}; \addplot [samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, thick, blue] {-abs(x-4)+1}; \addplot [samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, thick, blue] {-abs(x+4)+1}; \end{axis} \end{tikzpicture}
ottengo

che è esattamente quella che ottengo senza l'opzione smooth. A questo punto, dov'è il problema?

Grazie.
Strano, a me già con samples=100 da un grafico quasi corretto (bisogna zoomare un po' prima di notare qualcosa). Probabilmente però ti conviene togliere il parametro smooth, dato che vuoi disegnare una linea spezzata.
Eventualmente puoi anche impostare esplicitamente i punti in cui campionare con samples at.
\begin{tikzpicture}[] \begin{axis} [enlargelimits, xmin=-5,xmax=5,ymin=-1,ymax=1, axis x line=middle, axis y line=middle] \addplot [samples=500, blue] {-abs(x)+1}; \addplot [samples=500, thick, blue] {-abs(x-4)+1}; \addplot [samples=500, thick, blue] {-abs(x+4)+1}; \end{axis} \end{tikzpicture}
Eventualmente puoi anche impostare esplicitamente i punti in cui campionare con samples at.
\begin{tikzpicture}[] \begin{axis} [enlargelimits, xmin=-5,xmax=5,ymin=-1,ymax=1, axis x line=middle, axis y line=middle] \addplot [samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, blue] {-abs(x)+1}; \addplot [samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, thick, blue] {-abs(x-4)+1}; \addplot [samples at={-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5}, thick, blue] {-abs(x+4)+1}; \end{axis} \end{tikzpicture}
Ciao Sergio, no, purtroppo no. Anzi, ho provato ad aggiungere smooth sperando che sistemasse le cose, ma nulla. E' come se lui vedesse strettamente positivo il valore assoluto di 0... insomma, secondo lui \( |0| \simeq 0.25\). Grazie mille comunque per l'aiuto.
Grazie mille per il tuo aiuto. E' comunque molto possibile che sia io a fare casino, non ho grande dimestichezza con questo benedetto pacchetto tikz e già qualche giorno fa ho avuto problemi con un grafico. Ti allego il mio preambolo, se puoi dare uno sguardo mi fai un piacere.
\documentclass[10pt,a4paper,twoside]{amsbook} \usepackage[utf8x]{inputenc} \usepackage{ucs} \usepackage{setspace} \usepackage[italian]{babel} \usepackage{calc} \usepackage{lmodern} \usepackage{url} \usepackage{graphicx, subfig, wrapfig} \usepackage{xcolor} \usepackage{tikz} \usepackage{pgf} \usepackage{pgfplots} \usepackage{mathtools} \usepackage{amssymb,amsmath,amsthm,amsfonts} \usepackage{mathrsfs, dsfont, a4wide} \usepackage[ colorlinks=true, urlcolor=blue, citecolor=Violet, linkcolor=blue]{hyperref} \usepackage{esint} \parskip2ex \onehalfspacing \author{} \title{} \begin{document} \maketitle \tableofcontents \newpage [...] E' ben noto [...] \begin{tikzpicture}[] \begin{axis} [enlargelimits, xmin=-5,xmax=5,ymin=-1,ymax=1, axis x line=middle, axis y line=middle] \addplot [smooth, samples=5000, blue] {-abs(x)+1}; \addplot [smooth, samples=500, thick, blue] {-abs(x-4)+1}; \addplot [smooth, samples=500, thick, blue] {-abs(x+4)+1}; \end{axis} \end{tikzpicture} \end{document}
Mostra il documento intero. A me con 500 campioni viene ben appuntito.
Ti ringrazio molto per la tua risposta. Purtroppo però avevo già provato ad aumentare il numero di samples, ma nulla. C'è proprio un problema legato alla funzione abs: possibile che non si riesca a mettere a posto
? Uffi...
Grazie ancora.

Grazie ancora.
Aumenta il numero dei campioni, es. samples=500.