PGFplot은 삼각함수를 어떻게 계산하나요?

PGFplot은 삼각함수를 어떻게 계산하나요?

내 그래프를 그릴 때마지막 질문나는 PGFplots에서 얻은 플롯이 완전히 정확하지 않다는 것을 발견했습니다. (4.9/(w^2))*(cosh(w*x)-cos(w*x))의 여러 값을 플롯하려고 했습니다 w. 사용자 1010011010과 Enthusiastic Student의 도움으로 보기 좋은 플롯을 얻을 수 있었습니다. 이는 WolframAlpha에서 무엇을 얻어야 하는지 확인하기 전까지였습니다.

w위의 공식에서 로 가는 것처럼 0함수는 4.9*x^2위에서부터 으로 점근해야 합니다. 그것은 데이터가 보여주는 것이 아닙니다. 위 링크에 있는 기본적으로 1010011010인 이 코드를 사용하면,

\documentclass{standalone}
\usepackage{pgfplots}
\def\mycolone{yellow}
\def\mycoltwo{green}
\pgfplotsset{every axis legend/.append style={at={(.5,-.2)}, anchor=north}} 
\begin{document}
\begin{tikzpicture} 
\begin{axis}[xmin=-10,xmax=10,ymin=-0.5,ymax=100,no markers, grid=both, samples=100, restrict y to domain=0:1000]
\foreach \w in {5,10,...,100} {\edef\tmp{\noexpand\addplot[\mycolone!\w!\mycoltwo, domain=-10:10]}
\pgfmathparse{\w/100}
\edef\x{\pgfmathresult}
\tmp{(4.9/((\w/100)^2))*(cosh(\w*x/100)-cos(\w*x/100))};
\edef\legendentry{\noexpand\addlegendentry{$\omega = \noexpand\pgfmathprintnumber[fixed,fixed zerofill, precision=2]{\x}$}};
\legendentry}
\addplot[draw=red, domain=-10:10] {4.9*x^2};
\end{axis}
\end{tikzpicture}
\end{document}

나는 다음과 같은 플롯을 얻습니다. 여기에 이미지 설명을 입력하세요 여기서 빨간색 플롯은 입니다 (4.9)*x^2.

w참고로, WolframAlpha가 위에 플롯된 ( w=0.05및 ) 의 최고 및 최저 값 w=1과 플롯 에 대해 제공한 내용은 다음과 같습니다 (4.9)*x^2. 여기에 이미지 설명을 입력하세요

말하기는 어렵지만 플롯을 제거하면 플롯이 거의 정확하게 이어지는 4.9*x^2것을 볼 수 있습니다 .w=0.05

이는 위의 첫 번째 이미지와는 매우 다른 동작입니다. 그래서 내 질문은 PGFplots가 exp, cosh, 와 같은 것을 어떻게 계산하고 cos앞으로 더 나은 근사치를 어떻게 얻을 수 있느냐는 것입니다.

답변1

삼각함수는 pgf각도 입력을 가정합니다. 각도를 라디안 단위로 입력하려면 특수 r연산자 인 를 cos(\w*x/100)로 바꾸십시오 cos(\w*x/100 r).

\documentclass{standalone}
\usepackage{pgfplots}
\def\mycolone{yellow}
\def\mycoltwo{green}
\pgfplotsset{compat=1.12,every axis legend/.append style={at={(.5,-.2)}, anchor=north}} 
\begin{document}
\begin{tikzpicture} 
\begin{axis}[xmin=-10,xmax=10,ymin=-0.5,ymax=100,no markers, grid=both, samples=100, restrict y to domain=0:1000]
\foreach \w in {5,10,...,100} {\edef\tmp{\noexpand\addplot[\mycolone!\w!\mycoltwo, domain=-10:10]}
\pgfmathparse{\w/100}
\edef\x{\pgfmathresult}
\tmp{(4.9/((\w/100)^2))*(cosh(\w*x/100)-cos(\w*x/100 r))};
\edef\legendentry{\noexpand\addlegendentry{$\omega = \noexpand\pgfmathprintnumber[fixed,fixed zerofill, precision=2]{\x}$}};
\legendentry}
\addplot[draw=red, domain=-10:10] {4.9*x^2};
\end{axis}
\end{tikzpicture}
\end{document}

또는 v1.11 이상 에서는 pgfplots새 키를 사용하여 키 설정 1 범위 내의 trig format plots모든 명령에 대한 각도 형식을 변경할 수 있습니다 . 여기서는 전체 문서의 동작을 변경하기 위해 최상위 수준을 사용 하지만 축별 또는 플롯별로 적용할 수도 있습니다. 이는 일반 Ti가 아닌 ' 명령에만 영향을 미칩니다.\addplottrig format plots=radpgfplots\addplot케이삼각 함수가 포함된 Z 코드입니다. 또한 이 키는 다소 실험적이므로 polar및 같은 좀 더 이국적인 축 유형에서는 제대로 작동하지 않을 수 있습니다 smithchart. 패키지 매뉴얼에는 기본 축에 대해서만 테스트되었다고 언급되어 있습니다.

\documentclass{standalone}
\usepackage{pgfplots}
\def\mycolone{yellow}
\def\mycoltwo{green}
\pgfplotsset{
  compat=1.12,
  every axis legend/.append style={at={(.5,-.2)}, anchor=north},
  trig format plots=rad,
} 
\begin{document}
\begin{tikzpicture} 
\begin{axis}[xmin=-10,xmax=10,ymin=-0.5,ymax=100,no markers, grid=both, samples=100, restrict y to domain=0:1000]
\foreach \w in {5,10,...,100} {\edef\tmp{\noexpand\addplot[\mycolone!\w!\mycoltwo, domain=-10:10]}
\pgfmathparse{\w/100}
\edef\x{\pgfmathresult}
\tmp{(4.9/((\w/100)^2))*(cosh(\w*x/100)-cos(\w*x/100))};
\edef\legendentry{\noexpand\addlegendentry{$\omega = \noexpand\pgfmathprintnumber[fixed,fixed zerofill, precision=2]{\x}$}};
\legendentry}
\addplot[draw=red, domain=-10:10] {4.9*x^2};
\end{axis}
\end{tikzpicture}
\end{document}

두 방법 모두 올바른 결과를 제공합니다.

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

1 덕분에크리스티안 포이어생거, pgfplots댓글을 통해 이 새로운 방법을 알려 주신 저자입니다.

관련 정보