tikzを使用して双曲線関数をプロットする方法

tikzを使用して双曲線関数をプロットする方法

私は tikz を使用してこの Ewan webster 関数をプロットしようとしています:

ここに画像の説明を入力してください

上記の画像は、numpy 関数を使用して Python で生成されています。

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}

ここに画像の説明を入力してください

ご覧のとおり、結局は完璧ではありません。

より密度の高いサンプリングを使用して、抽選を 2 つの領域に分割できます。後者の領域では、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));

関連情報