So zeichnen Sie eine hyperbolische Funktion mit Tikz

So zeichnen Sie eine hyperbolische Funktion mit Tikz

Ich versuche, diese Ewan-Webster-Funktion mit Tikz darzustellen:

Bildbeschreibung hier eingeben

Das obige Bild wird in Python mithilfe der Numpy-Funktion generiert:

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)

Aber mein Plot läuft nicht wie erwartet. Mein Code lautet wie folgt:

\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}

Antwort1

Ich habe Ihren Code korrigiert.

Sie müssen angeben, dass Sie im Argument des Sinus das Bogenmaß verwenden (es ist mit dem r).

Ich habe die X-Skala und die Y-Skala geändert (weil die Exponentialfunktion schnell wächst).

Ich habe den smoothSchlüssel hinzugefügt, damit die Kurve geglättet wird und nicht mit geraden Linien zwischen den Punkten gezeichnet wird.

Ich habe die Samples auf 500 Punkte erweitert (standardmäßig sind es 25).

Aber ich muss den Plotbereich einschränken auf 0:1.7statt0:2 beschränken , denn es sei denn, dass, TikZ beschwert sich überAbmessung zu großFehler.

\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}

Bildbeschreibung hier eingeben

Für dieAbmessung zu großFehler, statt Ti zu verwendenkZ können wir verwendenpgfplots.

Hier ist ein erster Versuch:

\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}

Bildbeschreibung hier eingeben

Wie Sie sehen, ist es am Ende nicht perfekt.

Wir können die Ziehung in zwei Bereiche aufteilen, wobei der letztere Bereich für x zwischen 1,2 und 2 eine dichtere Stichprobe verwendet.

\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}

Wir erhalten eine bessere Darstellung:

Bildbeschreibung hier eingeben

Wir können die Präsentation anpassen:

\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}

Bildbeschreibung hier eingeben

Antwort2

Asymptote bietet mehr Kontrolle über mathematische Graphen. In diesem Fall arbeiten die Anzahl der Stichprobenpunkte n=1000und der Verbindungstyp Hermiterecht gut zusammen.

Bildbeschreibung hier eingeben

// 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));

verwandte Informationen