使用 pgfplots 绘制振荡函数

使用 pgfplots 绘制振荡函数

我正在绘制函数,这些函数在接近 0 时会快速振荡。振荡似乎无法识别,我得到的是该函数的简化版本。我怎样才能至少让一些振荡出现?

这是一个有效的例子:

\begin{tikzpicture}[
      declare function={
        func(\x)= (\x<-1) * (0) + 
        and(\x>= -1, \x<= 0) * ((\x-1)/2)   +
         and(\x>0, \x<=0.5) * (\x-0.5*sin(pi/\x))     +
         and(\x>0.5,  \x<=1) * (\x) +
         (\x>1) * (0);
      }
    ]
    \begin{axis}[
      axis x line=middle, axis y line=middle,
      ymin=-1, ymax=1, ytick={-1,0,1}, ylabel=$y$,
      xmin=-1, xmax=1, xtick={-1,0,1}, xlabel=$x$,
    ]
    \pgfplotsinvokeforeach{-1, 0, 0.5, 1}{
      \draw[dashed] ({rel axis cs: 0,0} -| {axis cs: #1, 0}) -- ({rel axis cs: 0,1} -| {axis cs: #1, 0});}
    \addplot[blue, domain=-1:1]{func(x)};
    \end{axis}
\end{tikzpicture}

显示的图如下: 错误数字

答案1

你正在紧张的 tex 算术,你最好使用 gnuplot 或其他数值系统来生成数据,然后只使用 pgfplots 来绘制最终的图,但如果我使用 fp lib 来获得更好的算术并增加样本数量,我几乎可以得到两个振荡

在此处输入图片描述

\documentclass{article}

\usepackage{pgfplots}
\usetikzlibrary{fixedpointarithmetic}
\begin{document}
\begin{tikzpicture}[
      declare function={
        func(\x)= (\x<-1) * (0) + 
        and(\x>= -1, \x<= 0) * ((\x-1)/2)   +
         and(\x>0, \x<=0.5) * (\x-0.5*sin(pi/\x))     +
         and(\x>0.5,  \x<=1) * (\x) +
         (\x>1) * (0);
      }
    ]
    \begin{axis}[
      axis x line=middle, axis y line=middle,
samples=1600,
      ymin=-1, ymax=1, ytick={-1,0,1}, ylabel=$y$,
      xmin=-1, xmax=1, xtick={-1,0,1}, xlabel=$x$,
    ]
    \pgfplotsinvokeforeach{-1, 0, 0.5, 1}{
      \draw[dashed] ({rel axis cs: 0,0} -| {axis cs: #1, 0}) -- ({rel axis cs: 0,1} -| {axis cs: #1, 0});}
    \addplot[blue, domain=-1:1]{func(x)};
    \end{axis}
\end{tikzpicture}
\end{document}

相关内容