
私は 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
。そうでない場合は、TiけZは不満を言う寸法が大きすぎるエラー。
\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}
のために寸法が大きすぎるエラーを回避するために、TiけZ、私たちは使うことができます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));