PGFplots は三角関数をどのように計算しますか?

PGFplots は三角関数をどのように計算しますか?

私のグラフをプロットすると最後の質問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、、、などのものをどのように計算するのかcoshcosそして将来的にどうすればより良い近似値を得ることができるのかということです。

答え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}

あるいは、pgfplotsv1.11以降では、新しいキーを使用して、キー設定1の範囲内のtrig format plotsすべてのコマンドの角度フォーマットを変更できます。ここでは、ドキュメント全体の動作を変更するためにトップレベルで使用していますが、軸ごとまたはプロットごとに適用することもできます。これは、 'コマンドにのみ影響し、単純なTiには影響しないことに注意してください。\addplottrig format plots=radpgfplots\addplotpolar三角関数を使用した Z コード。また、このキーは多少実験的なもので、やなどの特殊な軸タイプでは正しく動作しない可能性があります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コメントでこの新しい方法を指摘してくださった著者本人に感謝します。

関連情報