Wie entlese ich einer pgfplotstable Werte, die von mehreren Parametern abhängen?
Hallo!
Mit dem Befehl
\def\getcell#1#2{
\pgfplotstablegetelem{#1}{#2}\of{\SumBinVertTab}\pgfplotsretval%
}
$P(X \leq k) = B(n,p;k) F(n,p;k) = \getcell{0}{2}$
entlese ich z.B. den Wert `0.59049` aus folgedner Tabelle.
- Wie kann ich den Befehl so anpassen, dass ich die Werte n, p, k eingeben muss und damit den richtigen Tabellenwert erhalte? Etwa `getSumBin{10}{0.25}{3}` `\getSumBin{10}{0.25}{3}` was dann `0.7759` liefern sollte.
- Am Rande: Die Option `precision=4` wird bei diesem Auslesen scheints ignoriert, es sollte jedoch schon der Wert ausgelesen werde, der auch in der Tabelle angezeigt wird.
- Es gibt bei der Tabelle noch ein **Problem**: Bei p >= 0.5 müsste 1-<Ablesewert> ausgegeben werden.
- Wie kann ich mit pgfplots-Rechnmitteln zwei ausgelesene Werte voneinader abziehen, um
`$P(X = k) = P(X \leq k) - P(X \leq k-1) = B(n,p;k) F(n,p;k) - B(n,p;k-1) F(n,p;k-1) = ???$` zu berechnen.
![alt text][1]
**Da längerer Code, hier wahlweise als Datei [SummierteBinomialverteilung.tex][2]**
%\documentclass[varwidth, \documentclass[varwidth, border=10pt]{standalone}
\documentclass[paper=a5]{scrbook}
\usepackage[left=1cm, %\documentclass[paper=a5]{scrbook}
%\usepackage[left=1cm, right=1cm]{geometry}
\usepackage{selinput}
\SelectInputMappings{adieresis={ä}, germandbls={ß}}
\usepackage[ngerman]{babel}
\usepackage{pgfplotstable}
\usepackage{amsmath, amssymb, amsfonts}% \binom
\usepackage{colortbl}% \rowcolor, \cellcolor
%\usepackage{multirow}
\usepackage{hhline}
\usepackage{diagbox} % \diagbox
\usepackage{xcolor, booktabs}
\usepackage{filecontents}
\begin{document}
\setlength\arrayrulewidth{0.905pt} % Um rules deutlich anzuzeigen
\begin{filecontents}{n5.txt}
5 0 0.59049 0.32768 0.23730 0.16807 0.07776 0.03125
5 1 0.91854 0.73728 0.63281 0.52822 0.33696 0.18750
5 2 0.99144 0.94208 0.89648 0.83692 0.68256 0.50000
5 3 0.99954 0.99328 0.98438 0.96922 0.91296 0.81250
5 4 0.99999 0.99968 0.99902 0.99757 0.98976 0.96875
10 0 10 0 0.34868 0.10737 0.05631 0.02825 0.00605 0.00098
10 1 10 1 0.73610 0.37581 0.24403 0.14931 0.04636 0.01074
10 2 10 2 0.92981 0.67780 0.52559 0.38278 0.16729 0.05469
10 3 10 3 0.98720 0.87913 0.77588 0.64961 0.38228 0.17188
10 4 0.99837 0.96721 0.92187 0.84973 0.63310 0.37695
10 5 0.99985 0.99363 0.98027 0.95265 0.83376 0.62305
10 6 0.99999 0.99914 0.99649 0.98941 0.94524 0.82813
10 7 1.00000 0.99992 0.99958 0.99841 0.98771 0.94531
10 8 1.00000 1.00000 0.99997 0.99986 0.99832 0.98926
10 9 1.00000 1.00000 1.00000 0.99999 0.99990 0.99902
\end{filecontents}
% ===============================
% ===============================
% Tabelle Summierte Binomial-Verteilung (SumBinVert)
% ===============================
% ===============================
% Farben in Tabelle =====================
\colorlet{FarbeOben}{pink}
\colorlet{FarbeUnten}{lightgray!60}
% ===============================
% Allgemeine Formatierungen für Tabelle (Schrift etc.) festlegen
\pgfplotstableset{
foreach column append style/.code 2 args = {
\pgfplotsforeachungrouped \col in {#1} {
\pgfplotstableset{
/pgfplots/table/columns/\col/.append style = {#2}
}
}
}
}
% ===============================
% Erste Zeile =========================
\def\SumBinVertHinweisEinsen{%
{\text{\tiny Nicht aufgeführte Werte sind (gerundet auf $4$ Dezimalstellen) gleich $1.0000$}}
}%
% --------------------------
\def\SumBinVertFormel{%
$\begin{matrix}
\displaystyle
P(X\leq k)
=
\sum_{v=0}^k \sum\limits_{v=0}^k \binom{n}{v} p^v (1-p)^{n-v} = F(n,k;p) \\
\SumBinVertHinweisEinsen
\end{matrix}$
}%
% --------------------------
\newcommand\ErsteZeile{%
\hhline{~|-------|} &
\multicolumn{7}{c|}{\cellcolor{FarbeOben} \SumBinVertFormel} \\
\hhline{~|-------|}
\rowcolor{FarbeOben}
}%
% ==============================
% Letzte Zeile ========================
\def\SumBinVertHinweisGrauzeile{%
{\tiny$
\begin{array}{l}
\text{Bei grau unterlegtem Eingang, d.h. $p \geq 0{,}5$: } %\\
\text{$P(X\leq k) = 1 -\langle\texttt{Ablesewert}\rangle$}
\end{array}
$}
}%
% --------------------------
\newcommand\LetzteZeile{%
\hhline{~|-------|-|}
\rowcolor{FarbeUnten}
\multicolumn{1}{c}{\cellcolor{white}} &
\cellcolor{white} &
$0{,}9$ &
$0{,}8$ &
$0{,}75$ &
$0{,}7$ &
$0{,}6$ &
$0{,}5$ &
\diagbox{$p$}{$k$} \\
% Anderes Design
\hhline{~~|>{\arrayrulecolor{FarbeUnten}}------>{\arrayrulecolor{black}}|-|}
%
\rowcolor{FarbeUnten}
\multicolumn{1}{c}{\cellcolor{white}} &
\multicolumn{1}{c|}{\cellcolor{white}} &
\multicolumn{7}{l|}{\SumBinVertHinweisGrauzeile} %& \cellcolor{FarbeUnten}
\\
\hhline{~~|-------|}
}%
% ==============================
% 1en ausblenden ====================
\pgfplotstableset{
discard if equal/.style = {
preproc cell content/.code={
\ifdim##1pt=#1pt
\typeout{##1=#1?}% Zu Debugging-Zwecken
\ifdim \dimexpr ##1pt-#1pt>-0.00005pt
\ifdim \dimexpr ##1pt-#1pt<0.00005pt
\typeout{Ja}% Zur Kontrolle
\pgfkeyssetvalue{/pgfplots/table/@cell content}{}
\fi
\fi
}
},
}
% ==============================
% Führende Nullen ausblenden =============
\makeatletter
\newif\ifpgfmathprintnumberskipzeroperiodandaddphantom
\def\pgfmathprintnumber@fixed@styleDEFAULT@impl@period#1.#2\pgfmathfloat@EOI{%
\ifpgfmathprintnumberskipzeroperiodandaddphantom
\pgfmathprintnumberskipzeroperiodtrue
\fi
\ifpgfmathprintnumberskipzeroperiod
\def\pgfmathfloat@loc@TMPb{#1}%
\ifx\pgfmathfloatparsenumber@tok@ZERO\pgfmathfloat@loc@TMPb
\else
\def\pgfmathfloat@loc@TMPc{-0}%
\ifx\pgfmathfloat@loc@TMPc\pgfmathfloat@loc@TMPb
\def\pgfmathresult{-}%
\else
\def\pgfmathfloat@loc@TMPc{+0}%
\ifx\pgfmathfloat@loc@TMPc\pgfmathfloat@loc@TMPb
\def\pgfmathresult{+}%
\else
\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod#1\pgfmathfloat@EOI\pgfmathfloat@EOI\pgfmathfloat@EOI
\fi
\fi
\fi
\else
\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod#1\pgfmathfloat@EOI\pgfmathfloat@EOI\pgfmathfloat@EOI
\fi
\ifpgfmathprintnumber@thousand@sep@in@fractional
\let\pgfmathresultfractional\pgfutil@empty%
\pgfmathprintnumber@thousand@sep@in@fractional#2MMMM\@@
\else
\def\pgfmathresultfractional{#2}%
\fi
\begingroup
\toks0=\expandafter{\pgfmathresult}%
\toks1=\expandafter{\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP@MARK}%
\ifpgfmathprintnumberskipzeroperiodandaddphantom
\toks2=\expandafter{\expandafter\phantom\expandafter{\expandafter0\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP}}
\else
\toks2=\expandafter{\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP}%
\fi
\toks3=\expandafter{\pgfmathresultfractional}%
\xdef\pgfmathfloat@glob@TMP{\the\toks0 \the\toks1 \the\toks2 \the\toks3 }%
\endgroup
\let\pgfmathresult=\pgfmathfloat@glob@TMP
}%
\makeatother
\pgfplotstableset{
skip 0. for all but first/.style = {
postproc cell content/.code={
\ifnum\pgfplotstablecol>1
\global\pgfmathprintnumberskipzeroperiodandaddphantomtrue
\fi
}
},
}
% ==============================
% Tabellen einlesen
\pgfplotstableread{n5.txt}{\SumBinVertTab}
%\pgfplotstableread{n10.txt}{\nX} % "n Römische Zahl"
% Tabellen zusammenführen % ToDO
%%\pgfplotstableread{dataA.dat}\dataA
%%\pgfplotstableread{dataB.dat}\dataB
%
%\pgfplotstablecreatecol[copy column from table={\nX}{[index] 0}] {par1} {\SumBinVertTab}
%\pgfplotstablecreatecol[copy column from table={\nX}{[index] 1}] {par2} {\SumBinVertTab}
%
%\pgfplotstabletypeset{\SumBinVertTab} \\
% --------------------------
% Tabelle setzen
\pgfplotstabletypeset[
% Allgemeine Einstellungen
fixed zerofill,
fixed,
precision=4,
% Null-Kommas Beseitigen
%ignore chars={\.0},
Führende Nullen ausblenden (bis auf erste)
skip 0. for all but first,
% --------------------------
% Erste Zeile definieren
every head row/.style = {
before row={\ErsteZeile},
after row=\hline
},
% --------------------------
% Letzte Zeile definieren
every last row/.style = {
after row={\LetzteZeile},
},
% --------------------------
% Nullte nSpalte definieren
create on use/nSpalte/.style = {%%
precision=0,
column type={|c},
create col/assign/.code = {%
\edef\nMethode{\ifnum \thisrow{1} = 0 \thisrow{0} \fi}
\pgfkeyslet{/pgfplots/table/create col/next content}\nMethode
},%
},%%
columns/nSpalte/.style = {%
column name ={\cellcolor{white}$n$},
precision=0,
column type={c},
},%
% --------------------------
% Erste k-Spalte definieren
columns/1/.style = {
column name={\diagbox{$k$}{$p$}},
precision=0,
column type={|>{\cellcolor{FarbeOben}\scriptsize}c|},
},
% --------------------------
% Letzte kSymSpalte definieren
create on use/kSymSpalte/.style={%
create col/expr={\thisrow{0}-1-\thisrow{1}},
},%
columns/kSymSpalte/.style={%
column name={\multicolumn1c{\cellcolor{white}}}, %$n-1-k$
column type={|>{\cellcolor{FarbeUnten}\scriptsize}c|},
precision=0
},%
% --------------------------
% Übrige Spalten benenen
columns/2/.style = {column name={$0{,}1$},discard if equal={1.0}},
columns/3/.style = {column name={$0{,}2$},discard if equal={1.0}},
columns/4/.style = {column name={$0{,}25$},discard if equal={1.0}},
columns/5/.style = {column name={$0{,}3$},discard if equal={1.0}},
columns/6/.style = {column name={$0{,}4$},discard if equal={1.0}},
columns/7/.style = {column name={$0{,}5$},discard if equal={1.0}},
% --------------------------
% Einsen beseitigen
%discard if equal={1.0}, % ToDo: Wie nur auf columns 1-6 anwenden?
% --------------------------
% "Null Komma" in Tabelle beseitigen
% ToDo....
% --------------------------
% Allgemeine Formatierungen festlegen
foreach column append style={nSpalte,2,3,4,5,6,7}{column type/.add={>{\scriptsize}}{}},
% Angezeigte Spalten definieren
columns={nSpalte,1,2,3,4,5,6,7,kSymSpalte}
]{\SumBinVertTab}
\bigskip
\def\getcell#1#2{
\pgfplotstablegetelem{#1}{#2}\of{\SumBinVertTab}\pgfplotsretval%
}
$P(X \leq k) = B(n,p;k) F(n,p;k) = \getcell{0}{2}$
$P(X = k) = P(X \leq k) - P(X \leq k-1) = B(n,p;k) F(n,p;k) - B(n,p;k-1) F(n,p;k-1) = ???$
\end{document}
[1]: http://texwelt.de/wissen/upfiles/55555555_23.png
[2]: http://matheplanet.de/matheplanet/nuke/html/dl.php?id=1823&1453260934http://matheplanet.de/matheplanet/nuke/html/dl.php?id=1825&1453485532