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作为时期b作为上升沿的分数(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}

在此处输入图片描述

相关内容