Erf-Funktion in LaTeX

Erf-Funktion in LaTeX

Gibt es eine Möglichkeit, einfach zu berechnendie ERF-Funktion(oder die kumulative Verteilungsfunktion des Normalgesetzes) in LaTeX?

Derzeit führe ich pgfBerechnungen durch, habe aber keine Möglichkeit gefunden, ERF mithilfe von zu berechnen pgf.

Ich würde gerne jedes verfügbare Paket zur Berechnung von ERF oder jede benutzerdefinierte Lösung zur Berechnung dieser Funktion verwenden.

Antwort1

Für genaue Werte empfehle ich die Berechnung auszulagern, hier gnuplotwird verwendet.

Code (muss --shell-escapeaktiviert werden)

\documentclass{article}
\usepackage{amsmath,pgfmath,pgffor}
\makeatletter
\def\qrr@split@result#1 #2\@qrr@split@result{\edef\erfInput{#1}\edef\erfResult{#2}}
\newcommand*{\gnuplotErf}[2][\jobname.eval]{%
    \immediate\write18{gnuplot -e "set print '#1'; print #2, erf(#2);"}%
    \everyeof{\noexpand}
    \edef\qrr@temp{\@@input #1 }%
    \expandafter\qrr@split@result\qrr@temp\@qrr@split@result
}
\makeatother
\DeclareMathOperator{\erf}{erf}
\begin{document}
\foreach \x in {-50,...,50}{%
\pgfmathparse{\x/50}%
\gnuplotErf{\x/50.}%
$ x = \pgfmathresult = \erfInput, \erf(x) = \erfResult$\par
}
\end{document}

Ausgabe

Bildbeschreibung hier eingeben

Antwort2

Bezogen aufdiese Antwort.

\documentclass{standalone}
\usepackage{tikz}
\makeatletter
\pgfmathdeclarefunction{erf}{1}{%
  \begingroup
    \pgfmathparse{#1 > 0 ? 1 : -1}%
    \edef\sign{\pgfmathresult}%
    \pgfmathparse{abs(#1)}%
    \edef\x{\pgfmathresult}%
    \pgfmathparse{1/(1+0.3275911*\x)}%
    \edef\t{\pgfmathresult}%
    \pgfmathparse{%
      1 - (((((1.061405429*\t -1.453152027)*\t) + 1.421413741)*\t 
      -0.284496736)*\t + 0.254829592)*\t*exp(-(\x*\x))}%
    \edef\y{\pgfmathresult}%
    \pgfmathparse{(\sign)*\y}%
    \pgfmath@smuggleone\pgfmathresult%
  \endgroup
}
\makeatother
\begin{document}
\begin{tikzpicture}[yscale = 3]
  \draw[very thick,->] (-5,0) -- node[at end,below] {$x$}(5,0);
  \draw[very thick,->] (0,-1) -- node[below left] {$0$} node[at end,
  left] {$erf(x)$} (0,1);
  \draw[red,thick] plot[domain=-5:5,samples=200] (\x,{erf(\x)});
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Antwort3

Verwendung dergleiche Näherungsidee wie Cjorssen(Ich habe die Taylor-Reihe ausprobiert, wie Qrrbrbirlbel vorgeschlagen hat, aber es ist ziemlich hoffnungslos, auf diese Weise eine vernünftige Näherung zu erhalten.) Ich habe die Funktion neu geschrieben, ohne Low-Level-PGF zu verwenden. Da wir hier bereits so viele 2D-Diagramme haben, verwende ich einfach mein 3D-Diagramm, das ich bereits hatte.

\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{tikz}
\pgfplotsset{
colormap={bluewhite}{ color(0cm)=(rgb:red,18;green,64;blue,171); color(1cm)=(white)}
}
\begin{document}
\begin{tikzpicture}[
    declare function={erf(\x)=%
      (1+(e^(-(\x*\x))*(-265.057+abs(\x)*(-135.065+abs(\x)%
      *(-59.646+(-6.84727-0.777889*abs(\x))*abs(\x)))))%
      /(3.05259+abs(\x))^5)*(\x>0?1:-1);},
    declare function={erf2(\x,\y)=erf(\x)+erf(\y);}
]
\begin{axis}[
    small,
    colormap name=bluewhite,
    width=\textwidth,
    enlargelimits=false,
    grid=major,
    domain=-3:3,
    y domain=-3:3,
    samples=33,
    unit vector ratio*=1 1 1,
    view={20}{20},
    colorbar,
    colorbar style={
        at={(1,-.15)},
        anchor=south west,
        height=0.25*\pgfkeysvalueof{/pgfplots/parent axis height},
    }
]
\addplot3 [surf,shader=faceted] {erf2(x,y)};
\end{axis}
\end{tikzpicture}
\end{document}

3D-Diagramm von erf(x)+erf(y)

Die Näherung hat einen maximalen Fehler von 1,5·10 -7 (Quelle).

Dank anJakefürErkennen und Fixierendie falsche Syntax, die ich zuerst in diesem Code hatte.

Antwort4

Die Berechnung der Fehlerfunktion erf(x)und die Abbildungsanatomie (Achsen, Legenden und Beschriftungen) wurden in drei Ansätzen dargestellt.

  1. Völliggnuplot
  2. pgfplotsruft aufgnuplot
  3. VölligMatlab

Es gibt bereits gute Antworten, beispielsweise von Qrrbrbirlbel und cjorssen, die beide pgfmath auf Makroebene nutzen.

1. Vollständiggnuplot

Fehlerfunktionsberechnung erf(x)in Gnuplot mit Achsen, Legenden und Beschriftungen, die im Gnuplot- epslatexTerminal dargestellt werden. Die Gnuplot-Terminalausgabe wird automatisch eingebettet mitAbonnierenPaket. terminal=pdfrendert keine mathematischen Beschriftungen, daher epslatexwurde das Terminal verwendet.

\documentclass[preview=true,12pt]{standalone}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{gnuplottex}
\begin{document} 
\begin{gnuplot}[terminal=epslatex,terminaloptions=color]
  set grid
  set size square
  set key left 
  set title 'Error function in gnuplot  $ erf(x) = \frac{2}{\sqrt{\pi}} \int_{0}^{x}e^{-t^{2}}\, dt$'
  set samples 50
  set xlabel "$x$"
  set ylabel "$erf(x)$"
  plot [-3:3] [-1:1] erf(x) title 'gnuplot' linetype 1 linewidth 3
\end{gnuplot}
\end{document}

1) Gnuplot-Ausgabebild Bildbeschreibung hier eingeben

2. pgfplotsruft aufgnuplot

Fehlerfunktionsberechnung erf(x)in Gnuplot, aufgerufen durch pgfplots, und Achsen, Legenden und Beschriftungen werden durch pgfplots gerendert

\documentclass[preview=true,12pt]{standalone}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\begin{document} 
\begin{tikzpicture}
\begin{axis}[xlabel=$x$,ylabel=$erf(x)$,title= {Error function in pgfplots $erf(x)=\frac{2}{\sqrt{\pi}}\int_{0}^{x}e^{-t^{2}}\, dt$},legend style={draw=none},legend pos=north west,grid=major,enlargelimits=false]
\addplot [domain=-3:3,samples=50,red,no markers] gnuplot[id=erf]{erf(x)};
% Note: \addplot function { gnuplot code } is alias for \addplot gnuplot { gnuplot code };
\legend{pgfplots-gnuplot}
\end{axis}
\end{tikzpicture}
\end{document}

2. pgfplots (Gnuplot-Backend) gibt Abbildung aus

Bildbeschreibung hier eingeben

3) VollständigMatlab

Berechnung der Fehlerfunktion $erf(x)$ in Matlab mit Achsen, Legenden und Beschriftungen, dargestellt mitmatlabfrag(basierend auf dem psfrag-Tag) undmlf2pdfFunktionen.

Notiz:Im Gegensatz zu den oben genannten Ansätzen werden Schriftarten in PDF-Dateien eingefroren, können aber vor der Erstellung geändert werden mlf2pdf.m.

** erf(x)Matlab-Skript verwendet mlf2pdf (Matlabfrag als Backend) zum Generieren von PDF **

clear all
clc
% Plotting section
    set(0,'DefaultFigureColor','w','DefaultTextFontName','Times','DefaultTextFontSize',12,'DefaultTextFontWeight','bold','DefaultAxesFontName','Times','DefaultAxesFontSize',12,'DefaultAxesFontWeight','bold','DefaultLineLineWidth',2,'DefaultLineMarkerSize',8);

% x and y data
x=linspace(-3,3,50);
y=erf(x);

figure(1);plot(x,y,'r');
grid on
axis([-3 3 -1 1]);
xlabel('$x$','Interpreter','none');
ylabel('$erf(x)$','Interpreter','none');
legend('Matlab');legend('boxoff');
title('Error function in Matlab $erf(x)=\frac{2}{\sqrt{\pi}}\int_{0}^{x}e^{-t^{2}}\, dt$','Interpreter','none');
mlf2pdf(gcf,'error-func-fig');

3. Ausgabebild Bildbeschreibung hier eingeben

gnuplot 4.4, pgfplots 1.8und pdflatex -shell-escapeMotor wurden verwendet.

verwandte Informationen