Danke im Vorraus für deine Hilfe:)
Ich habe ein Problem mit Tikz, da es die Werte meiner Funktion falsch berechnet/druckt.
Die Funktion ist f(x) = (ax³+bx²+cx)*e^(dx)
mita=-3.01718 b=11.8804 c=0.753323 d=-0.790569
Das Tikz-Diagramm sieht sehr gut aus vonx=0 to x=11.2
Die Grafik wird falsch vonx > 11.4
Sie können das Tikz-Diagramm mit dem Diagramm von Geogebra vergleichen.
Dies ist der Code:
\documentclass[a4paper,11pt]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}%[scale=0.5]
\draw[thin,color=gray,xstep=1,ystep=1, solid] (0,-3) grid (13,7);
\draw[->,line width=0.8mm] (0,0) -- (13,0);
\draw[->,line width=0.8mm] (0,-3) -- (0,7);
\foreach \x/\xtext in {1/1, 2/2, 3/3, 4/4, 5/5, 6/6, 7/7, 8/8, 9/9, 10/10, 11/11, 12/12}
\draw[shift={(\x,0)}] (0pt,2pt) -- (0pt,-2pt) node[below] {$\xtext$};
\foreach \y/\ytext in {-2/-2, -1/-1, 0/0, 1/1, 2/2, 3/3, 4/4, 5/5, 6/6}
\draw[shift={(0,\y)}] (2pt,0pt) -- (-2pt,0pt) node[left] {$\ytext$};
\draw[line width=0.4mm, domain=0:12.8,smooth,variable=\x,black] plot ({\x},{((-3.017180*
(\x)^3+11.88040*(\x)^2+0.753323*(\x))*e^(-0.790569*(\x))) });
\end{tikzpicture}
\end{document}
Vielen Dank für Ihre Hilfe!
Antwort1
exp
Dies liegt an der Implementierung der pgf-Mathematikfunktion . Ein vereinfachtes Beispiel:
\documentclass{article}
\usepackage{pgfmath, pgffor}
\begin{document}
\foreach \i in {8.9, 9.0, 9.1} {
\pgfmathparse{exp(-\i)}exp(-\i) = \pgfmathresult\par
}
\end{document}
Die Ausgabe ist
exp(-8.9) = 0.00012
exp(-9.0) = 0.00012
exp(-9.1) = 0.00002 % <<< see the jump from 1.2e-4 to 2e-5
Die Beziehung zwischen dem Beispiel des OP und meinem besteht darin, dass, wenn x ~= 11.384
nahe -0.790569*(\x)
ist -9
, also e^x
zu wird e^{-9}
.
Deraktuelle Umsetzung vonexp(x)
gibt einfach zurück 1/65536 ~= 0.00002
, wenn x < -9
(eingeführt durchbegehen29a3525e6f5f
im Jahr 2008 von pgf
2,10), was den springenden Wert in die Nähe von verursacht -9
.
Die Verwendung eines kleineren Sprungpunkts anstelle von -9
führt häufiger zu Fehlern dimension too large
und ist daher keine gute Lösung. Wenn Sie beispielsweise mit -10
die Funktion des OP plotten, wird sie dimension too large
in der Nähe von ansteigen x = 12.3
.
Besser ist die Verwendung eines Dienstprogramms zur Gleitkommaberechnung. Die neueste Codebasis tikz-pgf
hat einen neuen Schlüssel eingeführt /pgf/fpu/install only={<math function list>}
, mit dem Implementierungen bestimmter mathematischer Funktionen lokal auf ihre fpu
Version umgestellt werden können.
Das folgende Beispiel verwendet den install only
Schlüssel und erzeugt die gleiche Ausgabe wie inDaleifs Antwort. Ich vermute, pgfplots
dass beim Plotten ähnliche Tricks zum Durchführen von Gleitkommaberechnungen verwendet werden.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fpu}
\begin{document}
\begin{tikzpicture}[declare function={
f(\x) = (-3.017180*(\x)^3+11.88040*(\x)^2+0.753323*(\x))*e^(-0.790569*(\x));
}]
\draw[thin,color=gray]
(0,-3) grid (13,7);
\draw[->,line width=0.8mm]
(0,0) -- (13,0)
(0,-3) -- (0,7);
\foreach \x in {1, 2, ..., 12}
\draw[shift={(\x,0)}] (0pt,2pt) -- (0pt,-2pt) node[below] {$\x$};
\foreach \y in {-2, -1, ..., 6}
\draw[shift={(0,\y)}] (2pt,0pt) -- (-2pt,0pt) node[left] {$\y$};
% use "/pgf/fpu/install only={exp}"
\draw[line width=0.4mm, domain=0:12.8, smooth, /pgf/fpu/install only={exp}]
plot (\x, {f(\x)});
\end{tikzpicture}
\end{document}
Andere Möglichkeiten
Siehe pgfmanual
, v3.1.5b,
- Abs. 22.4Aus einer externen Datei gelesene Punkte plottenUnd
- Abs. 22.6Plotten einer Funktion mit Gnuplot.
Antwort2
Keine Ahnung, warum dieses spezielle Diagramm so aussieht, aber ich würde eine Funktion nie so von Hand zeichnen. Ich würde verwenden, pgfplots
wo es so aussieht
\documentclass[a4paper,11pt,border=10pt,]{standalone}
\usepackage{tikz,pgfplots}
\begin{document}
\begin{tikzpicture}%[scale=0.5]
\begin{axis}[
width=13cm,
ymin=-2.1,
ymax=5.5,
domain=0:12.8,
no marks,
axis x line=center,
axis y line=center,
]
\addplot[smooth] {((-3.017180*(\x)^3+11.88040*(\x)^2+0.753323*(\x))*e^(-0.790569*(\x)))};
\end{axis}
\end{tikzpicture}
\end{document}
( pgfplots
hat eine riesige Menge an Konfigurationsoptionen)
Und das Ergebnis ist: