Построение графика рациональной функции и вертикальной линии с помощью pgfplots

Построение графика рациональной функции и вертикальной линии с помощью pgfplots

Мне нужен код, который инструктирует TikZ построить график для рациональной функции y=(x^{2}+5x+6)/(x^{2}+2x-3). Я пробовал использовать addplot[very thin,blue]{frac(x^{2}+5x+6)/(x^{2}+2x-3)}. Этот график имеет вертикальную асимптоту x = 1. Какой код для построения этой линии - в виде пунктирной линии - со стрелками?

\documentclass[10pt]{amsart}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}

\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{amsthm}


\begin{document}

\hspace*{\fill}
\begin{tikzpicture}
\begin{axis}[axis equal image,
          xmax=8,ymax=7,
          axis lines=middle,
          restrict y to domain=-7:7,
          enlargelimits={abs=1cm},
          axis line style={latex-latex},
          ticklabel style={fill=white},
          ytick=\empty,
          xtick={-3}
          %xlabel=$x$,ylabel=$y$,
]
\addplot[domain=-10:10,mark=none,samples=10] {frac{x + 2}{x - 1} node [above left, yshift=3pt]{$\scriptstyle{y}=\frac{x^{2}+5x+6}{x^{2}+2x-3}$};
\draw [fill=white] (-3,0) circle [radius=1.5pt];
\end{axis}
\end{tikzpicture}
\hspace{\fill}

\end{document}

решение1

С моей версией PGFplots \addplotкоманда, которую вы предоставляете, даже не компилируется, поэтому мне пришлось угадывать, чего вы хотите добиться. В PGFplots вы можете просто записать дроби следующим образом: 1/(x^2).

С комментарием Мэтью к ответу Джейкаэтот вопросвы можете нарисовать асимптоту при , x=1используя клавишу vasymptote=1. Чтобы надежно усечь график без использования большого количества выборок (оранжевая кривая), вы можете построить две части отдельно, указав так, domainчтобы она заканчивалась немного раньше x=1(черная кривая).

Какая-то кривая

\documentclass[10pt]{amsart}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}

\pgfplotsset{vasymptote/.style={
    before end axis/.append code={
        \draw[densely dashed] ({rel axis cs:0,0} -| {axis cs:#1,0})
        -- ({rel axis cs:0,1} -| {axis cs:#1,0});
    }
}}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
    axis equal image,
    axis lines=middle,
    xmin=-10,xmax=10,
    ymin=-10,ymax=10,
    enlargelimits={abs=1cm},
    axis line style={latex-latex},
    ticklabel style={fill=white},
    ytick={-10,10},
    xtick={-3,-10,10},
    vasymptote=1,
]
% This doesn't clip to y=-10:10 nicely
% because there are too few samples near the asymptote:
\addplot[very thick, orange, domain=-10:10,samples=200, restrict y to domain=-10:10]
    {(x^2+5*x+6)/(x^2+2*x-3)};

% Draw the two parts separately with individual domains:
\addplot[samples=50,domain=-10:1-0.27] {(x^2+5*x+6)/(x^2+2*x-3)};
\addplot[samples=50,domain=1+0.33:10]  {(x^2+5*x+6)/(x^2+2*x-3)};

\draw [fill=white] (-3,0) circle [radius=1.5pt]; % What is this?
\end{axis}
\end{tikzpicture}
\end{document}

решение2

Решение Марка Виброу приведет к постоянной катастрофе, когда plotpoints=14*(2^n)+1(для любого неотрицательного целого числа n).

Поэтому для решения этой проблемы можно использовать следующее решение (просто ради развлечения).

\documentclass[pstricks,border=20pt,12pt]{standalone}
\usepackage{pst-plot}
\def\f{(x+2)/(x-1)}

\begin{document}
\begin{psgraph}[algebraic,plotpoints=1000,Dy=5,Dx=2]{->}(0,0)(-11,-30)(11,35){20cm}{20cm}
    \psset{linecolor=red}
    \psplot{-10}{0.9}{\f}
    \psplot{1.1}{10}{\f}
    \psset{linestyle=dashed,linecolor=blue}
    \psline(1,-30)(1,35)
    \psline(-11,1)(11,1)
\end{psgraph}
\end{document}

введите описание изображения здесь

решение3

Просто ради развлечения, с PSTricks :O

\documentclass[pstricks,border=5]{standalone}
\usepackage{pst-plot}
\begin{document}
\psset{xunit=20pt,yunit=20pt}
\begin{pspicture}*(-7.5,-7.5)(7.5,7.5)
  \psgrid[gridlabels=0,gridcolor=gray!25,subgridcolor=gray!10](-7,-7)(7,7)
  \psaxes[labels=none,ticksize=-2pt 2pt]{<->}(0,0)(-7,-7)(7,7)[$x$,-90][$y$,0]
  \psplot[linecolor=blue,plotstyle=line,algebraic, yMaxValue=7,plotpoints=1000]
      {-7}{7}{(x^2+5*x+6)/(x^2+2*x-3)} 
  \psline[linestyle=dashed](1,-7)(1,7)
  \rput(4.5,4){$\displaystyle f(x)=\frac{x^2+5x+6}{x^2+2x-3}$}
\end{pspicture}
\end{document} 

введите описание изображения здесь

решение4

Все, что вам нужно, это пара команд addplot:

  \addplot[domain=-10:10,samples=1000]
  {(x^2+5*x+6)/(x^2+2*x-3)};
  \addplot[dashed, purple, latex-latex]
  coordinates{(1,-6) (1,6)};

Первый должен построить график вашей реальной функции, второй рисует вертикальную линию с использованием координат. опция latex-latexдобавляет latexнаконечники стрелок на оба конца. Если вы не хотите наконечники стрелок на обоих концах, просто удалите соответствующий latex. Если вы хотите, чтобы вертикальная линия была длиннее, просто замените -6 и 6 в координатах на что-то большее, например, -15 и 15.

Вот полный пример:

\begin{tikzpicture}
\begin{axis}[axis equal image,
          xmin=-8, xmax=8,
          ymin=-7, ymax=7,
          axis lines=middle,
          restrict y to domain=-10:10,
          enlargelimits={abs=1cm},
          axis line style={-latex},
          ytick=\empty,
          xtick={-3},
          %xlabel=$x$,ylabel=$y$,
  ]
  \addplot[domain=-10:10,samples=1000]
  {(x^2+5*x+6)/(x^2+2*x-3)};
  \addplot[dashed, purple, latex-latex]
  coordinates{(1,-6) (1,6)};
\end{axis}
\end{tikzpicture}

Связанный контент