我如何才能强调这个图中的垂直渐近线?

我如何才能强调这个图中的垂直渐近线?

我正在使用以下代码绘制函数:

\documentclass[]{article}
\usepackage{tikz, pgfplots}

\begin{document}
\newcommand{\F}{(x-5)*(x-4)*(x-2)*(x+1)*(x+2)*(x+4)}
\newcommand{\G}{(x-3)*(x-3)*(x-1)*(x+3)}

\begin{tikzpicture}
\begin{axis}[
axis lines*=middle,
enlarge y limits=true,
enlarge x limits=false,
restrict x to domain=-5:5,
restrict y to domain=-60:60]
\addplot [thick, samples=50, smooth] {(\F)/(\G)};
\end{axis}
\end{tikzpicture}
\end{document}

我特别想强调这个函数的垂直渐近线,就像下面的例子一样。(最好,我想添加没有刻度的轴。)我该怎么做?我已经花了几个小时研究这些域,但没有得到令人满意的结果。

图形

答案1

如果以下示例适合您,请尝试一下:

\documentclass[border=3mm]{standalone}
    \usepackage{pgfplots}
\pgfplotsset{compat=1.12}

    \begin{document}
\newcommand{\F}{(x-5)*(x-4)*(x-2)*(x+1)*(x+2)*(x+4)}
\newcommand{\G}{(x-3)*(x-3)*(x-1)*(x+3)}

\begin{tikzpicture}
    \begin{axis}[
          axis lines = middle,
    enlarge y limits = false,
    enlarge x limits = true,
restrict x to domain = -5:5,
restrict y to domain = -60:60,
               xtick = \empty,
               ytick = \empty
                    ]
\addplot [very thick, draw=blue, samples=400, smooth] {(\F)/(\G)};
\draw[dashed] ( 1,-60) -- ( 1,+60);
\draw[dashed] ( 3,-60) -- ( 3,+60);
\draw[dashed] (-3,-60) -- (-3,+60);
    \end{axis}
\end{tikzpicture}
    \end{document}

通过它我得到了以下图表:

在此处输入图片描述

编辑:我在上面的图表中添加了缺失的渐近线。此外,渐近线坐标的书面记录也从 1.11 版开始采用到“pgfplots”版本,即从

 \draw[dashed] (axis cs: 1,-50) -- (axis cs: 1,+50);

 \draw[dashed] ( 1,-50) -- ( 1,+50);

正如汤姆·邦巴迪尔在他的评论中所建议的那样。

编辑(2):考虑到 Jens Polz 在他的回答中的建议,这个图片变得更有吸引力了。

答案2

您的样本数量太少。选择

\addplot [thick, samples=500, smooth] {(\F)/(\G)};

这应该已经有帮助了。

答案3

这是一个元帖子解决问题的方法。

在此处输入图片描述

prologues := 3;
outputtemplate := "%j%c.eps";

beginfig(1);

vardef fg(expr x) = 
(x-5)/(x-3)*(x-4)/(x-3)*(x-2)/(x-1)*(x+1)/(x+3)*(x+2)*(x+4)
enddef;

u = 1.618cm;
v = 1mm;

path seg[]; s = 1/16;
a := -5;   b := -3-s; seg1 = (a,fg(a)) for x=a+s step s until b: -- (x,fg(x)) endfor;
a := -3+s; b := +1-s; seg2 = (a,fg(a)) for x=a+s step s until b: -- (x,fg(x)) endfor;
a := +1+s; b := +3-s; seg3 = (a,fg(a)) for x=a+s step s until b: -- (x,fg(x)) endfor;
a := +3+s; b := +5;   seg4 = (a,fg(a)) for x=a+s step s until b: -- (x,fg(x)) endfor;

path xx, yy;
xx = (left--right) scaled  5u;
yy = (down--up)    scaled 60v;
drawoptions(withcolor .5 white);
draw xx; draw yy;

drawoptions(withcolor .67 red);
for i=1 upto 4: 
  draw seg[i] xscaled u yscaled v ;
endfor

drawoptions(withcolor .7 white);
for $=-3,1,3:
  draw yy shifted ($*u,0) dashed evenly;
endfor

clip currentpicture to unitsquare shifted -(1/2,1/2) 
           xscaled arclength xx yscaled arclength yy;

endfig;
end.

笔记

  • 在函数中交错分子和分母的项有助于避免普通的 Metapost 溢出;如果您使用“mpost -numbersystem=double”来处理输入,则没有必要这样做。

  • u为水平单位,v为垂直单位。

  • 由于函数中存在不连续性,我分别绘制了输出函数的四个部分。s = 1/16在这种情况下,步长给出的增量足够小,可以获得平滑的曲线。使用负 2 的幂有助于避免 MP 特殊算法中的舍入误差。

  • 渐近线是通过重新使用 y 轴路径并沿适当量移动来绘制的。

  • 最后的语句clip currentpicture ...将曲线剪裁成所需的大小。我使用轴的大小作为所需大小。

相关内容