pgfplots: forma más eficiente de declarar funciones por partes (diente de sierra con borde ascendente y descendente)

pgfplots: forma más eficiente de declarar funciones por partes (diente de sierra con borde ascendente y descendente)

Quiero dibujar una función repetitiva que sea similar a una función de diente de sierra. Hasta ahora comencé conesteposte y tres dientes definidos manualmente:

% starting https://tex.stackexchange.com/questions/132476/piecewise-function-using-pgfplots

\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}[
  declare function={
    func(\x) = 
    % 1st tooth
        % shifted by 0    
        (\x<=1) * (3*(\x-0))   +
        % shifted by 1
     and(\x>1, \x<=4) * (-1*(\x-1)+3) + 
    % 2nd tooth
        % shifted by 4    
     and(\x>4, \x<=5) * (3*(\x-4)) +
        % shifted by 5     
     and(\x>5, \x<=8) * (-1*(\x-5)+3) +
    % 3rd tooth
        % shifted by 8    
     and(\x>8, \x<=9) * (3*(\x-8)) +
        % shifted by 9     
     and(\x>9, \x<=12) * (-1*(\x-9)+3);     
  }
]
\begin{axis}[
  axis x line = middle, 
  axis y line = middle,
  samples = 1200, % I need sharp edges
  grid,
]
\addplot[red, 
        thick, 
        domain=0:12,
        mark=none,
        sharp plot
        ]
        {func(x)-1}; % y shift by -1
\end{axis}
\end{tikzpicture} 
\end{document}

ingrese la descripción de la imagen aquí

Aquí están mis preguntas:

Primera pregunta (la más importante)

¿Existe una forma inteligente de definir la función para un número arbitrario de dientes sin definir manualmente cada diente?

no consigo modulocosasjakela respuestaaquí- Quizás esta sea la clave.

Segunda pregunta (es bueno tenerla)

La pendiente ascendente es +1 y la pendiente descendente es -3. El período en el ejemplo es +4 y la amplitud es +3. ¿Pueden ser de alguna manera esos parámetros de la función? Por supuesto, los cuatro parámetros están conectados.

Tercera pregunta (también es bueno tenerla)

Me gustaría numerar los máximos y mínimos como en la imagen. Pero esto es realmente un "problema del primer mundo".

ingrese la descripción de la imagen aquí

Actualizar

Hasta que tenga una solución LaTeX, he creado una solución para pobres usando Excel.

El texto es alemán y significa algo así como diagrama de ángulo de torsión.

ingrese la descripción de la imagen aquí


Información adicional sobre la respuesta de percusión.

  • Conacomoperíodoybcomo elfracción del flanco ascendente(0,1 --> 10 %).
  • Tengo un sistema alemán por lo tanto elseparador decimales uncoma(,) en las siguientes imágenes.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Respuesta1

Aquí hay una forma de implementar la función. Los parámetros son el período de frecuencia de los dientes y el porcentaje que define cuánto del diente se gasta en levantarse.

La función está definida para asignarse, [0,1]de modo que pueda desplazarla sumándola y escalarla mediante multiplicación.

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}[
  declare function={func(\x,\a,\b) = (mod(\x,\a)/\a<\b? % If 
                                      mod(\x,\a)/\b/\a: % Yes
                                      (\a-mod(\x,\a))/(\a-\b*\a));} % No
]
\begin{axis}[axis x line = middle,axis y line = middle,
    samples = 301,grid,ymax=1.1,ymin=0,domain=0:4, no marks,thick]
\addplot {func(x,1,0.75)};
\addplot {func(x,2,0.1)};
\end{axis}
\end{tikzpicture} 
\end{document}

ingrese la descripción de la imagen aquí

información relacionada