
Ao traçar o gráfico do meuultima questãoDescobri que os gráficos que recebo do PGFplots não estão totalmente corretos. Eu estava tentando traçar (4.9/(w^2))*(cosh(w*x)-cos(w*x))
vários valores de w
. Com a ajuda dos usuários 1010011010 e Enthusiastic Student, consegui obter gráficos bonitos - isso até verificar o que deveria obter com o WolframAlpha.
Como w
na minha fórmula acima vai para 0
, a função deve ser assíntota 4.9*x^2
de cima. Não é isso que os dados mostram. Usando este código, que é essencialmente apenas 1010011010 no link acima,
\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}
Eu recebo os seguintes gráficos.
Aqui está o gráfico vermelho
(4.9)*x^2
.
Para referência, aqui está o que o WolframAlpha me fornece para os valores mais altos e mais baixos w
plotados acima ( w=0.05
e w=1
) e o gráfico de (4.9)*x^2
:
É difícil dizer, mas se eu remover o 4.9*x^2
enredo você pode ver que o enredo w=0.05
segue exatamente isso.
Este é um comportamento muito diferente da primeira imagem acima. Então, minha pergunta é como o PGFplots calcula coisas como exp
,, cosh
e cos
, e como posso obter uma melhor aproximação no futuro?
Responder1
As funções trigonométricas pgf
assumem entradas em graus. Para inserir um ângulo em radianos, use o r
operador especial: substitua cos(\w*x/100)
por 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}
Alternativamente, com pgfplots
v1.11 ou mais recente, uma nova chave trig format plots
nos permite alterar o formato do ângulo para todos \addplot
os comandos no escopo da configuração de chave 1 . Aqui, uso trig format plots=rad
no nível superior para alterar o comportamento de todo o documento, mas também pode ser aplicado por eixo ou por plotagem. Observe que isso afetará apenas os comandos pgfplots
' \addplot
, e não qualquer Ti simpleskCódigo Z com funções trigonométricas. Além disso, esta chave é um tanto experimental e pode não funcionar corretamente com tipos de eixo mais exóticos, como polar
e smithchart
. O manual do pacote menciona que ele foi testado apenas para eixos padrão.
\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}
Ambos os métodos fornecem o resultado correto:
1 Graças aChristian Feuersänger, o pgfplots
próprio autor, por me apontar esse novo método em um comentário.