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입니다. 이것이 어떻게든 함수의 매개변수가 될 수 있나요? 물론 4개의 매개변수는 서로 연결되어 있습니다.

세 번째 질문(있으면 좋음)

그림과 같이 최대값과 최소값에 번호를 매기고 싶습니다. 그러나 이것은 실제로 "제1세계 문제"입니다.

여기에 이미지 설명을 입력하세요

업데이트

LaTeX 솔루션을 갖기 전까지 저는 Excel을 사용하여 가난한 사람의 솔루션을 만들었습니다.

텍스트는 독일어이며 토크 각도 다이어그램과 같은 것을 의미합니다.

여기에 이미지 설명을 입력하세요


타악기의 답변에 관한 추가 정보

  • 와 함께~처럼기간그리고으로상승 에지의 비율(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}

여기에 이미지 설명을 입력하세요

관련 정보