PGFplots 如何計算三角函數?

PGFplots 如何計算三角函數?

在繪製我的圖表時最後一個問題我發現我從 PGFplots 得到的圖並不完全正確。我試圖繪製(4.9/(w^2))*(cosh(w*x)-cos(w*x))的多個值w。在用戶 1010011010 和熱情的學生的幫助下,我能夠得到好看的圖表——直到我檢查了我應該用 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

作為參考,以下是 WolframAlpha 為我提供的w上面繪製的 (w=0.05w=1) 的最高值和最低值以及 的圖(4.9)*x^2在此輸入影像描述

很難說,但如果我刪除該4.9*x^2圖,您可以看到該圖w=0.05幾乎完全遵循它。

這與上面第一張圖片的行為非常不同。所以我的問題是 PGFplots 如何計算 、expcosh和等內容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}

或者,在pgfplotsv1.11 或更高版本中,新鍵trig format plots允許我們更改鍵設定1\addplot範圍內的所有命令的角度格式。在這裡,我在頂層使用來更改整個文件的行為,但它也可以應用於每個軸或每個圖。請注意,這只會影響'命令,而不影響任何普通 Titrig format plots=radpgfplots\addplotk具有三角函數的 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本人在評論中向我指出了這種新方法。

相關內容