Liebe Community,

ich würde gerne die Funktion f(x)=x! mit TikZ plotten, jedoch betrachtet TikZ in der Form, in der ich es eingegeben habe, nur die natürlichen x-Werte, bei rationalen behält der Graph den gleichen Funktionswert bei.

Ich vermute, ich brauche hier die Gamma-Funktion, jedoch weiß ich nicht, wie ich dies genau umsetzen soll.

Ich bedanke mich für eure Hilfe im Voraus! :)

\documentclass[11pt]{article}

%Weitere Attribute
\setlength{\parindent}{0px}

%Pakete
\usepackage[utf8]{inputenc}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage{graphicx}
\usepackage{mathtools}
\usepackage{adjustbox}
\usepackage{color}
\usepackage[T1]{fontenc}
\newcommand{\semitransp}[2][35]{\color{fg!#1}#2}

\begin{document}

\begin{tikzpicture}

%Nummerierung
\foreach \x in {1,2,3,4,5,6,7,8,9}
\draw [xshift=\x cm] (0,2pt) -- (0,-2pt)
node [below,] {$\x$};

\foreach \y in {1,2,3,4,5,6,7,8,9}
\draw [yshift=\y cm] (2pt, 0) -- (-2pt,0)
node [left, ] {$\y$};

%Achsen
\draw [->, thick] (-0.5,0) -- (9.5,0) node[right] {$x$};
\draw [->, thick] (0, -0.5) -- (0,9.5) node[above] {$f(x)$};

%f
\draw [color=blue, thick, domain=0:3] plot (\x,{\x!}) node [right] {$f$};

\end{tikzpicture}

\end{document}

gefragt 10 Dez '19, 21:10

DrPoet's gravatar image

DrPoet
5126
Akzeptiert-Rate: 0%


Die Fakultät ist in der Tat nur für natürliche Zahlen definiert.

Weder TikZ/pgf noch pgfplots bieten derzeit AFAIK die Gamma-Funktion. Einige Tabellenkalkulationen wie LibreOffice Calc bieten die Funktion jedoch als GAMMA. Man könnte nun beispielsweise damit eine Wertetabelle erstellen und dann diese plotten. Wer gnuplot installiert hat, kann mit pgfplots die Berechnung auch daran delegieren. Dazu muss man -shell-escape aktivieren. Tut man das, so produziert:

\documentclass[11pt]{article}

\usepackage{parskip}% --> https://komascript.de/faq_parindent

\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\usepackage[T1]{fontenc}
\usepackage{lmodern}% LM ist besser und näher an CM als EC

\begin{document}

\begin{tikzpicture}
  \begin{axis}
    \addplot gnuplot [domain=0:3,color=blue] { gamma(x) };
  \end{axis}
\end{tikzpicture}

\end{document}

Die Ausgabe:

Gamma-Plot für 0<x<=3

Wie man die Ausgabe des Plots verändern kann, ist der Anleitung zu pgfplots zu entnehmen.

Aber natürlich kann man sich auch auf tikz beschränken, da auch dies auf gnuplot zurückgreifen kann. Auch dann muss -shell-escape aktiviert werden (siehe oben):

\documentclass[11pt]{article}

%Weitere Attribute
%\setlength{\parindent}{0px}% --> https://komascript.de/faq_parindent
\usepackage{parskip}% --> ebenda

%Pakete
%\usepackage[utf8]{inputenc}% seit LaTeX 2018-04-01 überflüssig
%\usepackage{xcolor}% wird von tikz ohnehin geladen
\usepackage{tikz}% wird von pgfplots ohnehin geladen
%\usepackage{graphicx}% wird von tikz ohnehin geladen
%\usepackage{mathtools}% wird im Beispiel nicht verwendet
%\usepackage{adjustbox}% wird im Beispiel nicht verwendet
%\usepackage{color}% bei Verwendung von xcolor überlüssig
\usepackage[T1]{fontenc}
\usepackage{lmodern}% LM ist besser und näher an CM als EC
%\newcommand{\semitransp}[2][35]{\color{fg!#1}#2}% wird im Beispiel nicht verwendet

\begin{document}

\begin{tikzpicture}
%Nummerierung
\foreach \x in {1,2,3,4,5,6,7,8,9}
\draw [xshift=\x cm] (0,2pt) -- (0,-2pt)
node [below,] {$\x$};

\foreach \y in {1,2,3,4,5,6,7,8,9}
\draw [yshift=\y cm] (2pt, 0) -- (-2pt,0)
node [left, ] {$\y$};

%Achsen
\draw [->, thick] (-0.5,0) -- (9.5,0) node[right] {$x$};
\draw [->, thick] (0, -0.5) -- (0,9.5) node[above] {$f(x)$};

%f
\draw [color=blue, thick, domain=0:3] plot function{gamma(x)} node [right] {$f$};

\end{tikzpicture}

\end{document}

ohne pgfplots nur mit tikz

Permanenter link

beantwortet 11 Dez '19, 10:10

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 11 Dez '19, 10:19

Hallo,

ich danke dir vielmals für deine Ratschläge und werde diese auf jeden Fall befolgen. Dir noch einen schönen Tag! :)

Mit besten Grüßen Dein DrPoet

(11 Dez '19, 14:32) DrPoet

Im Gegensatz zu TikZ kennt PSTricks (konkret pst-math) die GAMMA-Funktion und auch die GAMMALN-Funktion. Daher kann man mit:

\documentclass[a4paper]{article}

\usepackage{pstricks,pst-plot,pst-math}
\usepackage{pst-pdf}

\begin{document}
\begin{pspicture*}(-.5,-.5)(6.2,6.2)
  \psaxes{->}(0,0)(-.5,-.5)(6,6)
  \psplot[linecolor=blue,linewidth=1.5pt,plotpoints=200]{.1}{6}{x GAMMA}
  \psplot[linecolor=red,linewidth=1.5pt,plotpoints=200]{.1}{6}{x GAMMALN}
\end{pspicture *}

\end{document}

ebenfalls einen entsprechenden Plot machen. Das Ergebnis ist dann auf Seite 10 der pst-math-Anleitung pst-math-doc.pdf zu finden:

alt text

Permanenter link

beantwortet 11 Dez '19, 18:28

Vitali_Szarmach's gravatar image

Vitali_Szarmach
1005
Akzeptiert-Rate: 12%

Guten Abend,

ich bin echt von der Hilfsbereitschaft der Community begeistert! ^^ Danke dir!

Einen schönen Abend dir noch Dein DrPoet

(11 Dez '19, 18:46) DrPoet

Ansonsten könnte für zeichnerische Genauigkeit auch eine Näherungsfunktion ausreichen; dafür reicht pgfplots:

alt text

Man erkennt eine gute Übereinstimmung mit der exakten gnuplot-Kurve:

alt text


MWE:

\documentclass[margin=5mm, tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\begin{document}
\begin{tikzpicture}[]
\begin{axis}[
xmin =0, xmax = 5.1, 
%ymin = -3.5, ymax = 3.5,  
restrict y to domain=-6:6,
axis lines = middle,
xlabel={$x$}, 
ylabel={$y$},
enlarge x limits=0.05,
enlarge y limits=0.1,
x label style={at={(ticklabel* cs:1.00)}, inner sep=5pt, anchor=north},
y label style={at={(ticklabel* cs:1.00)}, inner sep=2pt, anchor=south east},
]
\addplot[color=blue, samples=222, smooth, 
domain = 0:5] {sqrt(2*pi)*x^(x-0.5)*exp(-x)*exp(1/(12*x))};
\end{axis}
\end{tikzpicture}
\end{document}
Permanenter link

beantwortet 11 Dez '19, 21:39

haver555's gravatar image

haver555
199512
Akzeptiert-Rate: 7%

bearbeitet 11 Dez '19, 21:40

1

Ergänzender Hinweis: Wenn man das als TikZ-draw formuliert, muss man darauf achten, dass man nicht durch 0 dividiert und auch keinen arithmetic overflow produziert, also beispielsweise die Original-domain-Angabe von 0:3 in 0.1:3 o. ä. ändern. Die Anweisung zum Einfügen in das Originalbeispiel wäre dann beispielsweise:

\draw[color=red, samples=222, smooth,domain = 0.1:3] plot (\x,{sqrt(2*pi)*\x^(\x-0.5)*exp(-\x)*exp(1/(12*\x))}) node [right] {$f$};

Wobei diese Näherung ohnehin nur für x>0 funktioniert.

(12 Dez '19, 08:12) gast3

Ich habe erst jetzt gesehen, dass bereits gnuplot erwähnt wurde, das mit pgfplots kommuniziert und die Gammafunktion enthält.
Hier dennoch eine Erweiterung auf negative x-Werte.

alt text

% arara: pdflatex: {shell: yes}
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\begin{document}
\begin{tikzpicture}[]

\begin{axis}[
xmin = -4.9, xmax = 5.1, 
%ymin = -3.5, ymax = 3.5,  
restrict y to domain=-6:6,
axis lines = middle,
axis line style={-latex},  
xlabel={$x$}, 
ylabel={$y$},
%enlarge x limits={upper={val=0.2}},
enlarge y limits=0.05,
x label style={at={(ticklabel* cs:1.00)}, inner sep=5pt, anchor=north},
y label style={at={(ticklabel* cs:1.00)}, inner sep=2pt, anchor=south east},
]

\addplot[color=red, samples=222, smooth, 
domain = 0:5] gnuplot{gamma(x)};

\foreach[evaluate={\N=\n-1}] \n in {0,...,-5}{%
\addplot[color=red, samples=555, smooth,  
domain = \n:\N] gnuplot{gamma(x)};
%
\addplot [domain=-6:6, samples=2, densely dashed, thin] (\N, x);
}%
\end{axis}
\end{tikzpicture}
\end{document}
Permanenter link

beantwortet 11 Dez '19, 14:11

haver555's gravatar image

haver555
199512
Akzeptiert-Rate: 7%

bearbeitet 11 Dez '19, 22:38

Hallo,

vielen Dank für die Mühe! Ich wünsche dir noch einen schönen Tag! :)

Mit besten Grüßen Dein DrPoet

(11 Dez '19, 14:34) DrPoet

Das compat hatte ich drin beim Hin- und Her-Kopieren ging es wieder raus.

(11 Dez '19, 14:50) haver555
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×731
×10
×4
×1

gestellte Frage: 10 Dez '19, 21:10

Frage wurde gesehen: 7,232 Mal

zuletzt geändert: 12 Dez '19, 08:12