如何对函数进行非均匀采样?

如何对函数进行非均匀采样?

参见此示例代码:

\documentclass{article} 
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\begin{document}
  \begin{tikzpicture}
    \begin{axis}[
                 xmin=-0.1,
                 xmax=1.1,
                 ymin=-1.1,
                 ymax=1.1,
                 domain=0:1,
                 samples=30
                ]
      \addplot[blue] {sqrt(x)};
      \addplot[purple] {-sqrt(x)};
    \end{axis}
  \end{tikzpicture}
\end{document}

结果看起来远离零是可以接受的,但在接近零时,采样不足太多:

上述代码的结果

增加samples值会使绘图更美观,但会大大减慢处理速度。作为一种解决方法,我可以在参数图中绘制逆运算(即(y^2,y)),但在我的实际代码中,这需要相当多的额外工作。

有没有办法提供自定义采样函数或指定域中不同部分的不同样本密度?

答案1

samplesdomain可用作plot选项,您可以对多个域重复相同的功能。这不是解决方案,而是一种变通方法。下图中上部(橙色+蓝色)显示了一个示例。

另一种选择(由敲击) 包括使用samples at选项指定样本。此选项遵循foreach(TikZ - pgffor) 语法。示例如下半部分(紫色)所示。

在此处输入图片描述

\documentclass{article} 
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\begin{document}
  \begin{tikzpicture}
    \begin{axis}[
                 xmin=-0.1,
                 xmax=1.1,
                 ymin=-1.1,
                 ymax=1.1,
                 domain=0:1,
                % samples=30
                ]
      \addplot[blue, domain=0:.2,samples=30] {sqrt(x)};
      \addplot[orange, domain=0.2:1,samples=10] {sqrt(x)};
      \addplot[purple, samples at={0,0.005,...,0.1,0.15,...,1}] {-sqrt(x)};
    \end{axis}
  \end{tikzpicture}
\end{document}

相关内容