我想绘制一个类似于锯齿函数的重复函数。到目前为止,我开始这桩和手动定义的三个牙齿:
% 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}