[LaTeX] Plottare funzioni defn. a tratti

giuscri
In questi giorni sto scrivendo degli appunti in LaTeX di analisidue e mi e' capitato di voler disegnare una funzione definita a tratti ma di trovarmi spiazzato. Per esempio ...voglio disegnare il seguente cappello da strega:

\begin{equation*}
  f_n(x) =
   \begin{cases}
     n^2x & 0 \le x \le 1/n \\
     2n - n^2x & 1/n < x \le 2/n \\
     0 & 2/n < x \le 2
   \end{cases}
\end{equation*}


Ho pensato di provare a far mangiare la funzione `plotting_witch_hat()` a GNUOctave via:
function [] = plotting_witch_hat(index_of_sequence)
 x = 0:0.01:2
 y = []

 for i = 1:length(x)
  if x(i) <= 1/index_of_sequence
   y = [y, (index_of_sequence)^2 * x(i)]
   continue
  end
  if 1/index_of_sequence < x(i) && x(i) <= 2/index_of_sequence
   y = [y, 2*index_of_sequence - (index_of_sequence)^2 * x(i)]
   continue
  end
  if 2/index_of_sequence < x(i) && x(i) <= 2
   y = [y, 0]
   continue
  end
 end

 plot(x,y);


Domande: ci sono idee migliori? Il codice puo' essere scritto meglio? Per disegnare funzioni a tratti questa e' l'unica?

Risposte
claudio862
Non mi sembra proprio un cappello, non manca un tratto orizzontale a sinistra? Comunque potresti usare PGFPlots, anche se per funzioni parametriche sembra un po' complicato da usare (o forse non sono abbastanza pratico io).

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\begin{document}

  \foreach \n in {1.1, 2, 3, 10} {%
    \pgfmathsetmacro{\oneovern}{1/\n} % Can't parse 1/\n inside xtick="" and
    \pgfmathsetmacro{\twoovern}{2/\n} % can't use \pgfmathparse either.
    \begin{tikzpicture}
      \begin{axis}[
        title={$f_{\n}(x)$},
        xtick=      { 0,   \oneovern,     \twoovern,     2},
        xticklabels={$0$, $\frac{1}{n}$, $\frac{2}{n}$, $2$},
        ytick=      { 0,  \n},
        yticklabels={$0$, $n$},
      ]
        \addplot[domain=0:\oneovern]    expression {\n*\n*x};
        \addplot[domain=\oneovern:2/\n] expression {2*\n - \n*\n*x};
        \addplot[domain=\twoovern]    expression {0};
      \end{axis}
    \end{tikzpicture}
  }

\end{document}

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.