如何使用 tikz 绘制双曲函数

如何使用 tikz 绘制双曲函数

我正在尝试使用 tikz 绘制这个 Ewan webster 函数:

在此处输入图片描述

上面的图像是在python中使用numpy函数生成的:

import numpy as np
import matplotlib.pyplot as plt
 
a = 0
b = 2
x = np.linspace(a,b,points)
y = np.exp(x)* np.sin(100*np.cosh(x)) 
plt.plot(x,y)

但是我的情节并没有像预期的那样。我的代码如下:

\documentclass[tikz]{standalone}
\usepackage{tikz}

\begin{document}    
\begin{tikzpicture}[domain=0:2]

  \draw[->] (-0.2,0) -- (3,0) node[right] {$x$};
  \draw[->] (0,-1.2) -- (0,4) node[above] {$f(x)$};

  \draw[color=red]    plot (\x,\x)             node[right] {$f(x) =x$};
  \draw[color=orange] plot (\x,{exp(\x)*sin(100*cosh(\x))}) node[right] {$f(x) = \frac{1}{20} \mathrm e^x$};
\end{tikzpicture}
\end{document}

答案1

我已修正你的代码。

您需要指定在正弦的参数中使用弧度(它与 一起r)。

我修改了 x 比例和 y 比例(因为指数增长迅速)。

我已经添加了smooth键,因此曲线变得平滑,而不是在点之间画直线。

我已将样本增加到 500 点(默认情况下为 25 点)。

但我必须将绘图域限制为0:1.7而不是0:2因为除非 TiZ 抱怨尺寸太大错误。

\documentclass[tikz]{standalone}

\begin{document}    
\begin{tikzpicture}[domain=0:1.70,samples=500,smooth,xscale=3,yscale=0.5]

  \draw[->] (-0.2,0) -- (2.5,0) node[right] {$x$};
  \draw[->] (0,-5) -- (0,5) node[above] {$f(x)$};

  \draw[color=orange] plot (\x,{exp(\x)*sin(100*cosh(\x) r)}) node[right] 
      {$f(x) = \mathrm e^x\sin\left(100\cosh\left(x\right)\right)$};
\end{tikzpicture}
\end{document}

在此处输入图片描述

为了尺寸太大错误,而不是使用 TiZ,我们可以使用pgf图

这是第一次尝试:

\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}

\begin{tikzpicture}
\begin{axis}[samples=500,domain=0:2]
\addplot[orange]plot (\x, {exp(\x)*sin(100*cosh(\x) r)});
\end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

正如你所见,最终结果并不完美。

我们可以将绘制分为两个域,后一个域针对 x 在 1.2 和 2 之间,使用更密集的采样。

\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}

\begin{tikzpicture}
\begin{axis}
\addplot[orange,samples=500,domain=0:1.5]plot (\x, {exp(\x)*sin(100*cosh(\x) r)});
\addplot[orange,samples=1000,domain=1.5:2]plot (\x, {exp(\x)*sin(100*cosh(\x) r)});
\end{axis}
\end{tikzpicture}

\end{document}

我们得到了更好的绘图:

在此处输入图片描述

我们可以定制演示文稿:

\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}

\begin{tikzpicture}
\begin{axis}[axis x line=middle,axis y line=left,xlabel=$x$,legend pos=north west]
\addplot[orange,samples=500,domain=0:1.5]plot (\x, {exp(\x)*sin(100*cosh(\x) r)});
\addplot[orange,samples=1000,domain=1.5:2]plot (\x, {exp(\x)*sin(100*cosh(\x) r)});
\legend{\textcolor{orange}{$\mathrm e^x\sin\left(100\cosh\left(x\right)\right)$}}
\end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

Asymptote 对数学图形有更多控制。在这种情况下,采样点的数量n=1000和连接类型Hermite配合得很好。

在此处输入图片描述

// http://asymptote.ualberta.ca/
import graph;
unitsize(5cm,4mm);
real a=0,b=2;
real y(real x) {return exp(x)*sin(100*cosh(x));}
path gr=graph(y,a,b,n=1000,Hermite);
draw(gr,magenta);
axes();

shipout(bbox(5mm,invisible));

相关内容