pgfplots: Effizientere Möglichkeit zum Deklarieren stückweiser Funktionen (Sägezahn mit steigender und fallender Flanke)

pgfplots: Effizientere Möglichkeit zum Deklarieren stückweiser Funktionen (Sägezahn mit steigender und fallender Flanke)

Ich möchte eine sich wiederholende Funktion zeichnen, die einer Sägezahnfunktion ähnelt. Bisher begann ich mitDasStift und manuell definierte drei Zähne:

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

Bildbeschreibung hier eingeben

Hier sind meine Fragen:

1. Frage (die wichtigste)

Gibt es eine clevere Möglichkeit, die Funktion für eine beliebige Anzahl von Zähnen zu definieren, ohne jeden Zahn manuell zu definieren?

Ich bekomme keine moduloSachen reinJake's AntwortHier- vielleicht ist das der Schlüssel.

2. Frage (schön zu haben)

Die steigende Steigung beträgt +1 und die fallende Steigung -3. Die Periode im Beispiel beträgt +4 und die Amplitude +3. Können das irgendwie Parameter der Funktion sein? Natürlich hängen die vier Parameter zusammen.

3. Frage (auch schön zu haben)

Ich würde gerne die Maxima und Minima wie im Bild nummerieren. Aber das ist wirklich ein „First World Problem“.

Bildbeschreibung hier eingeben

Aktualisieren

Bis ich eine LaTeX-Lösung habe, muss ich mit Excel eine Arme-Leute-Lösung erstellen.

Der Text ist deutsch und bedeutet so viel wie Drehmoment-Winkel-Diagramm.

Bildbeschreibung hier eingeben


Zusätzliche Informationen zur Antwort von Percusse

  • MitAalsZeitraumUndBals dieBruchteil der steigenden Flanke(0,1 --> 10 %).
  • Ich habe ein deutsches System, daher dieDezimaltrennzeichenist einKomma(,) in den folgenden Bildern.

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Antwort1

Hier ist eine Möglichkeit, die Funktion zu implementieren. Die Parameter sind die Frequenzperiode der Zähne und der Prozentsatz, der definiert, wie viel des Zahns zum Aufsteigen benötigt wird.

Die Funktion ist als Abbildung in definiert, [0,1]sodass Sie sie durch Addition verschieben und durch Multiplikation skalieren können.

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

Bildbeschreibung hier eingeben

verwandte Informationen