pgfplots: Maneira mais eficiente de declarar funções por partes (dente de serra com borda ascendente e descendente)

pgfplots: Maneira mais eficiente de declarar funções por partes (dente de serra com borda ascendente e descendente)

Quero desenhar uma função de repetição semelhante a uma função dente de serra. Até agora comecei comessepostar e definir manualmente três dentes:

% 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}

insira a descrição da imagem aqui

Aqui estão minhas perguntas:

1ª pergunta (a mais importante)

Existe uma maneira inteligente de definir a função para um número arbitrário de dentes sem definir manualmente cada dente?

Eu não entro modulonas coisasJakea respostaaqui- talvez esta seja a chave.

2ª pergunta (é bom ter)

A inclinação ascendente é +1 e a inclinação descendente é -3. O período no exemplo é +4 e a amplitude é +3. Esses podem de alguma forma ser parâmetros da função? Claro, os quatro parâmetros estão conectados.

3ª pergunta (também é bom ter)

Gostaria de numerar os máximos e mínimos como na imagem. Mas este é realmente um “problema de primeiro mundo”.

insira a descrição da imagem aqui

Atualizar

Até ter uma solução LaTeX, criei uma solução pobre usando o Excel.

O texto é alemão e significa algo como diagrama de ângulo de torque.

insira a descrição da imagem aqui


Informações adicionais sobre a resposta da percussão

  • ComacomoperíodoebEnquanto ofração da borda ascendente(0,1 --> 10%).
  • Eu tenho um sistema alemão, portanto oseparador decimalé umvírgula(,) nas fotos a seguir.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Responder1

Aqui está uma maneira de implementar a função. Os parâmetros são o período de frequência dos dentes e a porcentagem que define quanto do dente é gasto na subida.

A função é definida para ser mapeada [0,1]para que você possa deslocá-la adicionando e dimensionando-a por multiplicação.

\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}

insira a descrição da imagem aqui

informação relacionada