Gibt es eine Möglichkeit, einfach zu berechnendie ERF-Funktion(oder die kumulative Verteilungsfunktion des Normalgesetzes) in LaTeX?
Derzeit führe ich pgf
Berechnungen 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 gnuplot
wird verwendet.
Code (muss --shell-escape
aktiviert 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
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}
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}
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.
- Völlig
gnuplot
pgfplots
ruft aufgnuplot
- Völlig
Matlab
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- epslatex
Terminal dargestellt werden. Die Gnuplot-Terminalausgabe wird automatisch eingebettet mitAbonnierenPaket. terminal=pdf
rendert keine mathematischen Beschriftungen, daher epslatex
wurde 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
2. pgfplots
ruft 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
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
gnuplot 4.4
, pgfplots 1.8
und pdflatex -shell-escape
Motor wurden verwendet.