Ich versuche, diese Ewan-Webster-Funktion mit Tikz darzustellen:
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 smooth
Schlü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.7
statt0: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}
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}
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:
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}
Antwort2
Asymptote bietet mehr Kontrolle über mathematische Graphen. In diesem Fall arbeiten die Anzahl der Stichprobenpunkte n=1000
und der Verbindungstyp Hermite
recht gut zusammen.
// 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));