Tikz falsche Berechnung zeichnen Exponentialfunktion

Tikz falsche Berechnung zeichnen Exponentialfunktion

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.

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

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

expDies 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.384nahe -0.790569*(\x)ist -9, also e^xzu wird e^{-9}.

Deraktuelle Umsetzung vonexp(x)gibt einfach zurück 1/65536 ~= 0.00002, wenn x < -9(eingeführt durchbegehen29a3525e6f5fim Jahr 2008 von pgf2,10), was den springenden Wert in die Nähe von verursacht -9.

Die Verwendung eines kleineren Sprungpunkts anstelle von -9führt häufiger zu Fehlern dimension too largeund ist daher keine gute Lösung. Wenn Sie beispielsweise mit -10die Funktion des OP plotten, wird sie dimension too largein der Nähe von ansteigen x = 12.3.

Besser ist die Verwendung eines Dienstprogramms zur Gleitkommaberechnung. Die neueste Codebasis tikz-pgfhat einen neuen Schlüssel eingeführt /pgf/fpu/install only={<math function list>}, mit dem Implementierungen bestimmter mathematischer Funktionen lokal auf ihre fpuVersion umgestellt werden können.

Das folgende Beispiel verwendet den install onlySchlüssel und erzeugt die gleiche Ausgabe wie inDaleifs Antwort. Ich vermute, pgfplotsdass 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, pgfplotswo 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}

( pgfplotshat eine riesige Menge an Konfigurationsoptionen)

Und das Ergebnis ist:

Bildbeschreibung hier eingeben

verwandte Informationen