pgfplots:聲明分段函數的更有效方法(具有上升和下降沿的鋸齒)

pgfplots:聲明分段函數的更有效方法(具有上升和下降沿的鋸齒)

我想畫一個類似鋸齒函數的重複函數。到目前為止我從發布並手動定義三個牙齒:

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

在此輸入影像描述

這是我的問題:

第一個問題(最重要的一個)

有沒有一種巧妙的方法可以定義任意數量的齒的函數,而無需手動定義每個齒?

我拿不到modulo東西傑克的回答這裡——也許這就是關鍵。

第二個問題(很高興有)

上升斜率為+1,下降斜率為-3。範例中的周期為+4,幅度為+3。這些可以作為函數的參數嗎?當然,這四個參數是有連結的。

第三個問題(也很高興)

我想對圖中的最大值和最小值進行編號。但這確實是一個「第一世界問題」。

在此輸入影像描述

更新

在我有了 LaTeX 解決方案之前,我已經使用 Excel 製作了一個窮人的解決方案。

文字是德語,意思類似扭力角度圖。

在此輸入影像描述


有關打擊樂答案的附加信息

  • A作為時期作為上升沿的分數(0.1 --> 10%)。
  • 我有一個德國系統,因此小數點分隔符是一個逗號以下圖片中的 (,)。

在此輸入影像描述

在此輸入影像描述

在此輸入影像描述

在此輸入影像描述

在此輸入影像描述

在此輸入影像描述

在此輸入影像描述

答案1

這是實現該功能的一種方法。這些參數是齒的頻率週期和定義齒數用於上升的百分比。

該函數被定義為映射,[0,1]因此您可以透過添加來移動它並透過乘法來縮放它。

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

在此輸入影像描述

相關內容