样本间距不均匀的图(“样本间距”尝试失败)

样本间距不均匀的图(“样本间距”尝试失败)

我正在绘制一个函数,该函数需要在某些部分对大量样本进行评估,以避免出现明显的错误,即使使用平滑选项也是如此。为了避免在不需要的样本处使用太多样本,我将我的图分成几个域,每个域都有自己的\addplot样本数量。这是一个混乱的编程,并且有一些小的图形错误。所以当我遇到时samples at,我想尝试一下,但没有成功:

以下是简化的代码:

    \documentclass[border=2pt]{standalone}
    \usepackage[utf8]{inputenc}
    \usepackage{tikz,pgfplots}

    \newcommand*{\addZreModif}[2]{ 
                %\addplot[#2,thick=3pt,ultra thick,samples at={0,((2*pi/W)/500),...,((2*pi/W)/10),((2*pi/W)*1.1/10),...,(2*pi/W),(2*pi*1.02/W),...,(4*pi/W),...,Ttrace}] {  
                \addplot[#2,thick=3pt,ultra thick,samples at={0,((2*pi/W)/500),...,((2*pi/W)/10)}] {  
                        ( 1 - ( (exp(-W*#1*x)/sqrt(1-#1^2)) *cos((W*x*sqrt(1-#1^2) 
                        - (atan(#1/sqrt(1-#1^2))*pi/180) ) *180/pi) )  ) *\Kg }; 
            }

    \begin{document}
    \begin{tikzpicture}[
      declare function={
        W=pi*2;
        Ttrace=3;
      }]
    \def\Kg{2}
    \def\Ezero{1}
    \begin{axis}
       \addZreModif{0.2}{red,dotted}
    \end{axis}
    \end{tikzpicture}
    \end{document}

有趣的部分在于\newcommandaddplot 选项中的 :

这个:

\addplot[#2,thick=3pt,ultra thick,samples at={0,((2*pi/W)/500),...,((2*pi/W)/10)}] {

是有效的。它代表第一个域(曲线的起点,我不想错过水平起始斜率),有 50 个点

较长的一个,在所呈现的代码中进行了注释:

\addplot[#2,thick=3pt,ultra thick,samples at={0,((2*pi/W)/500),...,((2*pi/W)/10),((2*pi/W)*1.1/10),...,(2*pi/W),(2*pi*1.02/W),...,(4*pi/W),...,Ttrace}] {  

是我希望使用的那个,基于我所见过的例子,sample at但它无法计算,这就是我在这里的原因。顺便说一下,我看过两篇文章:

samples at={0,firstStep1,...,end1,firstStep2,...,end2}

samples at={0,firstStep1,...,end1,end1,firstStep2,...end2}

我不知道哪一个是正确的,我都尝试过了但是都没有成功...

我试过 :

\addplot[#2,thick=3pt,ultra thick,samples at={0,(1/500),...,(1/10),(1.1/10),...,1}] {  

\addplot[#2,thick=3pt,ultra thick,samples at={0,(1/500),...,(1/10),(1/10),(1.1/10),...,1}] {  

如果您能告诉我哪里出了问题,我提前谢谢您。

答案1

最好的办法是将样本列表构建为宏,在本例中为\mylist。我花了很长时间才弄清楚像 {2,...,3} 这样的序列应该完成什么。您应该始终至少包含一个额外的点来建立间距。

顺便说一句,做计算时千万不要使用#1^2for #1*#1。它们不一样!

\documentclass[border=2pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{tikz,pgfplots}

\newcommand*{\addZreModif}[2]{ 
            %\addplot[#2,thick=3pt,ultra thick,samples at={0,((2*pi/W)/500),...,((2*pi/W)/10),((2*pi/W)*1.1/10),...,(2*pi/W),(2*pi*1.02/W),...,(4*pi/W),...,Ttrace}] {  
            \addplot[#2,thick=3pt,ultra thick,samples at={\mylist}] {  
                    ( 1 - ( (exp(-W*#1*x)/sqrt(1-#1*#1)) *cos((W*x*sqrt(1-#1*#1) 
                    - (atan(#1/sqrt(1-#1*#1))*pi/180) ) *180/pi) )  ) *\Kg }; 
        }

\begin{document}
\begin{tikzpicture}[
  declare function={
    W=pi*2;
    Ttrace=3;
  }]
\xdef\mylist{0}
\foreach \i in {1,2,...,50} {\pgfmathparse{\i/500}%
  \xdef\mylist{\mylist,\pgfmathresult}};
\foreach \i in {1.1,1.2,...,10} {\pgfmathparse{\i/10}%
  \xdef\mylist{\mylist,\pgfmathresult}};
\foreach \i in {1.02,1.04,...,2} {\xdef\mylist{\mylist,\i}};
\foreach \i in {2.1,2.2,...,3} {\xdef\mylist{\mylist,\i}};
\def\Kg{2}
\def\Ezero{1}
\begin{axis}
   \addZreModif{0.2}{red,dotted}
\end{axis}
\end{tikzpicture}
\end{document}

演示

相关内容