График x*cos(1/x)

График x*cos(1/x)

Я пытаюсь нарисовать в tikz график f(x)=x*cos(1/x)и использую следующий код:

\documentclass[10pt]{article}
\usepackage{pgf,tikz}
\usetikzlibrary{arrows}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}[line cap=round,line join=round,>=triangle 45,x=1.0cm,y=1.0cm]
\draw[->,color=black] (-0.45754230805133705,0.0) -- (0.6210968701809529,0.0);
\foreach \x in {-0.4,-0.30000000000000004,-0.20000000000000004,-0.10000000000000003,0.19999999999999998,0.3,0.4,0.5,0.6}
\draw[shift={(\x,0)},color=black] (0pt,2pt) -- (0pt,-2pt) node[below] {\footnotesize $\x$};
\draw[->,color=black] (0.0,-0.340872843559345) -- (0.0,0.38634286875659907);
\foreach \y in {-0.30000000000000004,-0.20000000000000004,-0.10000000000000003,0.19999999999999998,0.3}
\draw[shift={(0,\y)},color=black] (2pt,0pt) -- (-2pt,0pt) node[left] {\footnotesize $\y$};
\draw[color=black] (0pt,-10pt) node[right] {\footnotesize $0$};
\clip(-0.45754230805133705,-0.340872843559345) rectangle (0.6210968701809529,0.38634286875659907);
\draw[smooth,samples=100,domain=-0.45754230805133705:0.6210968701809529] plot(\x,{(\x)*\sigma\upsilon\nu((1.0/(\x))*180/pi)});
\end{tikzpicture}
\end{document}

Однако он не компилируется. Я предполагаю, что проблема в том, что функция не определена в нуле. Код выше мне предоставила Geogebra. Есть идеи? Я хотел бы получить полный код!

решение1

Я бы просто построил график, используя pgfplotsпакет, который создан на основе pgf, но представляет собой более «естественный» интерфейс для построения графиков:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[samples = 1000]
    \addplot[mark = none] {x * cos ( 180 / ( x / pi ) ) };
  \end{axis}
\end{tikzpicture}
\end{document}

Мне нужно было добавить примеры, иначе здесь недостаточно подробностей: я не совсем уверен, какую часть сюжета вы на самом деле ищете!

(Обратите внимание, что pgfматематическая система ожидает углы в градусах, поэтому, как и в автоматически сгенерированном коде в вопросе, мне пришлось преобразовать значение xв радианах.)

Перемещение осей из «ящика» (обычный стиль научного графика) в центр (более распространенный для построения формул) и «увеличение масштаба» можно осуществить относительно легко.

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[axis lines = middle, domain = -1:1, samples = 1000]
    \addplot[mark = none] {x * cos ( 180 / ( x / pi ) ) };
  \end{axis}
\end{tikzpicture}
\end{document}

решение2

Простое развлекательное решение с PSTricks.

\documentclass[pstricks,border=20pt,12pt,dvipsnames]{standalone}
\usepackage{pst-plot}

\def\f{x*cos(1/x)}

\begin{document}

\begin{psgraph}[algebraic,Dx=0.025,Dy=0.01,plotpoints=1000]{->}(0,0)(-.1,-.1)(.1,.1){15cm}{!}
    \psplot[linecolor=Red]{-.1}{-0.005}{\f}
    \psplot[linecolor=Red]{0.005}{.1}{\f}
\end{psgraph}
\end{document}

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

Анимация с увеличением

\documentclass[pstricks,border=20pt,12pt,dvipsnames]{standalone}
\usepackage{pst-plot}
\usepackage[nomessages]{fp}

\def\f{x*cos(1/x)}

\begin{document}
\foreach \i in {1.5,1.4,...,0.1}{%
\FPeval\D{round(\i/5:2)}%
\begin{psgraph}[algebraic,Dx=\D,Dy=\D,plotpoints=1000]{->}(0,0)(-\i,-\i)(\i,\i){20cm}{!}
    \psplot[linecolor=Red]{-\i}{\D\space 10 div neg}{\f}
    \psplot[linecolor=Red]{\D\space 10 div}{\i}{\f}
\end{psgraph}}
\end{document}

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

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