二项分布

二项分布

好吧,我在网上寻找一些关于二项分布和泊松分布(不是累积分布)的 LaTeX 格式的表格。但我只找到了累积分布代码,我不想要。然后我四处寻找其他格式(不是 LaTeX),但我只找到大型表格(3-4 页)。

所以我想,是否可以让 LaTeX 根据一些变量进行计算,然后给出表格。这可能吗?

最后的想法是, 哪一个是可怕老师给我们的桌子。

编辑: 这是我原来的想法(我知道的唯一方法):

\documentclass[tikz]{standalone}
\standaloneconfig{border=2mm}
\begin{document}
    \begin{tikzpicture}
        \foreach \c in {2,...,7}{
        \def\n{0.6*\c}
        \draw (-1,-\n^2/2 -\n/2) node {$\c$};
        \draw (-1.5,-\n^2/2 -\n/2 + 0.3) -- (22,-\n^2/2 -\n/2 + 0.3);
        \foreach \k in {0,...,\c}{
        \draw (0, -\n^2/2 -\n/2 -0.6*\k) node {$\k$};
        \foreach \p/\h in {0.01/1,0.05/2,0.1/3,0.15/4,0.2/5,0.25/6,0.3/7,0.3333333333/8,0.35/9,0.4/10,0.45/11,0.49/12,0.5/13}{
        \draw (1.6*\h, -\n^2/2 -\n/2 -0.6*\k) node {\pgfmathparse{\n!/(\k!*(\n-\k)!)*\p^(\k)*(1-\p)^(\n-\k)}\pgfmathresult};
        }
        }
        }
    \end{tikzpicture}
\end{document}

它需要一些调整,但这是最初的想法。问题是我不能让\cgo 达到 10,我得到了一个算术溢出(我不知道它是什么),当然,这不是一张真正的桌子。

编辑2:这是我的第二版。现在有一些小问题,但几乎被@Qrrbrbirlbel 解决了。还有一些小问题我忽略了,因为这对我来说没有必要,但将来可能会有人问到它:

  • \myHeadList{0.1,0.5,0.10,...,0.30}首先,如果你尝试用来写,它就不能很好地工作...,PGF 在这里有一些问题(对于非整数)。Qrrbrbirlbel 的回答部分解决了这个问题。

  • 其次,为了使行的颜色交替,我们可以\usepackage[table]{xcolor}在序言和\rowcolors{2}{gray!10}{white}文档内部使用。但booktabs这种方法效果不太好。

答案1

以下代码展示了一种无需使用外部应用程序的解决方案。

二项分布

我现在已经包含了 PGF 自己的fpu库。希望它的设置是正确的。
甚至n > 8现在就可以编译(之前:! Dimension too large.,这是由于二项式系数的计算。)

使用的软件包:

  • geometry更改纸张布局,
  • booktabs用于表格的美观布局(\top- 、\mid- 和\toprule
  • pgf对于计算,
    • fpu图书馆,
    • pgf/number format
  • pgffor对于\foreach循环,以及
  • etoolbox用于简单地编写表格内容。
  • amsmath应该使用\binomand来代替and !\frac\choose\over

如何使用。

存在一个用户宏:\binomTable[<zero>]{<start n>}{<end n>}

可选参数决定是否应该对<zero>零单元格 ( ) 进行排版( :已排版,其他所有内容:均未排版)。 [这是硬编码的,对键的任何更改都必须手动进行隐藏。]0.000000.00000.0000
/pgf/number format/precision

第二和第三个参数定义开始和结束n, 分别。

二项式系数

对于二项式系数,我使用了以下公式i = \j
在此处输入图片描述

pgfplotstable

是的,请问一下。
我不知道如何使用pgfplotstable

代码

\documentclass[landscape]{article}
\usepackage[landscape, margin=.5cm]{geometry}
\usepackage{booktabs}
\usepackage{pgf,pgffor}
\usepackage{etoolbox}
\usepgflibrary{fpu}
\pgfkeys{/pgf/fpu}
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}
\pgfkeys{/pgf/number format/.cd,fixed,fixed zerofill,precision=4}

%%% Defining basic stuff
\def\myHeadList{0.01, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 1/3, 0.35, 0.40, 0.45, 0.49, 0.50}
%\def\startN{9}
%\def\endN{10}

\newif\ifsomanyzeroesshouldbeprinted
\newcommand*{\binomTable}[3][0]{% #1  = 0 => results in the form 0.0000 are typeset
                                % #1 != 0 => results in the form 0.0000 are omitted
                                % #2 = startN
                                % #3 = endN
    \edef\startN{#2}%
    \edef\endN{#3}%
    \expandafter\ifnum#1=0\relax%
        \somanyzeroesshouldbeprintedtrue%
    \else%
        \somanyzeroesshouldbeprintedfalse%
    \fi%
    %
    %%% Building head of table
    \def\myHead{ $n$ & $k$ & $n\choose k$}%
    \foreach \p in \myHeadList {%
        \xappto\myHead{& {$\p$}}%
    }%
    \appto\myHead{\\}%
    %
    %%% Bulding body of table
    \def\myTable{}%
    \def\myN{\startN,...,\endN}%
    \foreach \n in \myN {%
        \foreach \k in {0,...,\n}{%
            \ifnum\k=0\relax%
                \xappto\myTable{\noexpand\midrule\n}%
            \fi%
            \xappto\myTable{& \k}%
            \pgfmathsetmacro{\binomProduct}{1}%
            \xdef\myTempValue{\binomProduct}%
            \ifnum\k=0\relax%
                \xdef\oldK{\k}%
            \else%
                    \foreach \j in {1,...,\k}{%
                        \pgfmathsetmacro{\binomProduct}{\myTempValue*(\n+1-\j)/\j}%
                        \xdef\myTempValue{\binomProduct}%
                    }%
            \fi%
            \pgfmathsetmacro{\myTempValue}{round(\myTempValue)}%
            \xappto\myTable{& \noexpand\pgfmathprintnumber[/pgf/number format/.cd,fixed,precision=0,set thousands separator={\,},min exponent for 1000 sep=4]{\myTempValue}}%
            \foreach \p in \myHeadList {%
                \pgfmathsetmacro{\result}{\myTempValue*\p^(\k)*(1-\p)^(\n-\k)}%
                \ifsomanyzeroesshouldbeprinted%
                    \xappto\myTable{& \noexpand\pgfmathprintnumber{\result}}%
                \else%
                \ifdim\result pt<0.00005pt\relax%
                        \gappto\myTable{&}%
                    \else%
                        \xappto\myTable{& \noexpand\pgfmathprintnumber{\result}}%
                    \fi%
                \fi%
            }%
            \gappto\myTable{\\}%
        }%
    }%
}
\pagestyle{empty}

\def\formulae{%
    \begin{tabular}{@{}l@{}}
        $\displaystyle p(\xi=k)={{n}\choose{k}} p^k q^{n-k}$ \\
        $\displaystyle  {n\choose k}=\prod_{j=1}^k {n+1-j \over j}$
    \end{tabular}%
}
\begin{document}

\binomTable[1]{2}{8}
\begin{tabular}{rrr*{13}{r}}
    \toprule\myHead\myTable\midrule\myHead\bottomrule
\end{tabular}
\hfill\formulae

\binomTable[1]{9}{11}
\begin{tabular}{rrr*{13}{r}}
    \toprule\myHead\myTable\midrule\myHead\bottomrule
\end{tabular}
\hfill\formulae

\binomTable[1]{12}{14}
\begin{tabular}{rrr*{13}{r}}
    \toprule\myHead\myTable\midrule\myHead\bottomrule
\end{tabular}
\hfill\formulae

\binomTable[1]{15}{16}
\begin{tabular}{rrr*{13}{r}}
    \toprule\myHead\myTable\midrule\myHead\bottomrule
\end{tabular}
\hfill\formulae
\end{document}

输出

这些是旧图像,当前代码在n \choose k给定的位置添加了另一列。

在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

泊松分布

在我看来你的代码很好。

众所周知, PGF在处理非整数值时\foreach存在精度问题。 我的解决方法是:使用...

\foreach \ll in \myLList {%
    \pgfmathsetmacro{\l}{.1*\ll}

然后你可以用

\poissonTable[1]{1,...,40}{12}

有趣的\pgfmathsetmacor{\l}{\ll/10}是,它不起作用。

在下面给出的示例中,我使用了{.1*1,.1*...,.1*40}并将其解析为\l。宏\poissonTable采用1.1*40作为分隔参数,而宏\poissonTableL需要列表本身。

我添加了一个选项,通过测试是否\l可以被整除来将每 _5_ 行分隔开.5。我们可以只使用行计数器来检查可整除性,但这会在第二个示例中为我们提供一个单独的最后一行(就像您的教授的一样)。

对最后一行进行测试可以开箱即用,\poissonTable但需要一点帮助\poissonTable

这个解决方案非常特殊,如果行与该方案差别很大,则可能需要格外小心。

也许你想要一种更明确的给出行的方式,比如我的另一个答案您可以在哪里说{.1,.2,.3,.4,[1].5,.6,.7,.8,.9,[1]1,…}以便行距为[<x>]... <x>ex

代码(无输出)

\documentclass[landscape]{article}
\usepackage[landscape,margin=.5cm]{geometry}
\usepackage[table]{xcolor}
\usepackage{booktabs}
\usepackage{pgf,pgffor}
\usepackage{etoolbox}
\usepgflibrary{fpu}
\pgfkeys{/pgf/fpu}
\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}
\pgfkeys{/pgf/number format/.cd,fixed,fixed zerofill,precision=4}

\edef\mysecondtest{false}%
\def\mc#1{\multicolumn{1}{c}{#1}}
\newif\ifsomanyzeroesshouldbeprinted
\newcommand*{\poissonTable}[5][0]{% #1   = 0 => results in the form 0.0000 are typeset
                                  % #1 != 0 => results in the form 0.0000 are omitted
                                  % #2 = startN
                                  % #3 = midN
                                  % #4 = endN
                                  % #5 = endK
    \edef\startN{#2}\edef\midN{#3}\edef\endN{#4}%
    \edef\myLList{\midN\startN,\midN...,\midN\endN}%
    \edef\lastN{\midN\endN}%
    \poissonTableL[#1]{\myLList}{#5}
}
\newcommand*{\poissonTableL}[3][0]{% #1   = 0 => results in the form 0.0000 are typeset
                                   % #1 != 0 => results in the form 0.0000 are omitted
                                   % #2 = Liste
                                   % #3 = endK
    \edef\myLList{#2}
    \edef\endK{#3}%
    \expandafter\ifnum#1=0\relax%
        \somanyzeroesshouldbeprintedtrue%
    \else%
        \somanyzeroesshouldbeprintedfalse%
    \fi%
    %%% Building head of table
    \def\myLHead{\mc{$\lambda$} }%
    \foreach \k in {0,...,\endK} {%
        \ifnum\k=0\relax%
            \xappto\myLHead{& \noexpand\mc{\llap{$k\to{}$}$\k$}}% or \to replaced by =
        \else%
            \xappto\myLHead{& \noexpand\mc{\k}}%
        \fi
        }%
    \appto\myLHead{\\}%
    %%% Bulding body of table
    \def\myLTable{}%
    \foreach \ll in \myLList {%
        \pgfmathsetmacro{\l}{\ll}%
        \xappto\myLTable{ $\l$}%
        \foreach \k in {0,...,\endK}{%
            \pgfmathsetmacro{\Lresult}{e^(-\l)*((\l)^(\k))/((\k)!)}%
            \ifsomanyzeroesshouldbeprinted%
                \xappto\myLTable{& \noexpand\pgfmathprintnumber{\Lresult}}%
            \else\ifdim\Lresult pt<0.00005pt\relax%
                     \gappto\myLTable{&}%
                \else%
                     \xappto\myLTable{& \noexpand\pgfmathprintnumber{\Lresult}}%
                \fi%
            \fi%
        }%
    \gappto\myLTable{\\}%
    \pgfkeys{/pgf/fpu=false}%
    \pgfmathsetmacro{\lastRow}{\ll==\lastN?"0":"1"}%
    \pgfmathsetmacro{\lastRow}{\mysecondtest?"0":"\lastRow"}%
    \pgfmathparse{mod(\l,.5)==0?"[\lastRow ex]":""}%
    \xappto\myLTable{\pgfmathresult}%
    }%
    \edef\mysecondtest{false}%
}
\pagestyle{empty}

\begin{document}
\poissonTable[1]{1}{.1*}{40}{12}
\begin{tabular}{rr*{13}{r}}
    \toprule\myLHead\midrule\myLTable\midrule\myLHead\bottomrule
\end{tabular}

\edef\lastN{10}%
\def\mysecondtest{mod(\ll,1)==0}%
\poissonTableL[1]{.1*1,.1*...,.1*20,.1*22,.1*24,.1*...,.1*40,5,6,...,10}{12}
\begin{tabular}{rr*{13}{r}}
    \toprule\myLHead\midrule\myLTable\midrule\myLHead\bottomrule
\end{tabular}
\end{document}

答案2

这很简单。如果你熟悉矩阵或者基努里维斯。我准备了一个矩阵第一行的示例。它只是半自动化的——您需要手动修改结果。但我猜最多只需要 2 个小时就能让您满意(当然取决于您的经验)。

这是矩阵代码:

%% Generate first row
% http://f.cl.ly/items/1z2p0g2H410J3K0v1z32/Binomial_y_Poisson.pdf

n = 2;
for k=0:1:2
    i=1;
    for p=[0.01 0.05 0.15 0.20 0.30 1/3 0.35 0.40 0.45 0.50]
        Result(k+1,i) = binopdf(k,n,p)
        i=i+1
    end
end

%% Save to file
% Problem: Still no \\ at the end of each row
try
delete myResult1File
catch
end

dlmwrite('myResult1File.txt',Result,'delimiter','&','newline','pc','precision','%1.4f')

%% Add \\\r\n to each row

myFileIn = fopen('myResult1File.txt');
myFileOut = fopen('myResult2File.txt','w');

while ~feof(myFileIn)
   s = fgetl(myFileIn); % read line by line
   fprintf(myFileOut,'& & & %s\\\\\r\n',s); % write line by line and add \\ before newline
end

fclose(myFileIn)
fclose(myFileOut)

结果将被存储在myResult2File.txt并看起来像这样:

& & & 0.9801&0.9025&0.7225&0.6400&0.4900&0.4444&0.4225&0.3600&0.3025&0.2500\\
& & & 0.0198&0.0950&0.2550&0.3200&0.4200&0.4444&0.4550&0.4800&0.4950&0.5000\\
& & & 0.0001&0.0025&0.0225&0.0400&0.0900&0.1111&0.1225&0.1600&0.2025&0.2500\

顺便说一下,myResult1File.txt看起来像这样:

0.9801&0.9025&0.7225&0.6400&0.4900&0.4444&0.4225&0.3600&0.3025&0.2500
0.0198&0.0950&0.2550&0.3200&0.4200&0.4444&0.4550&0.4800&0.4950&0.5000
0.0001&0.0025&0.0225&0.0400&0.0900&0.1111&0.1225&0.1600&0.2025&0.2500

LaTeX文件可能看起来像这样(booktabs例如,我建议使用该包):

\documentclass[a4paper]{article}
\usepackage[textwidth=170mm]{geometry}
\begin{document}


\begin{center}
  {\large\textbf{\hspace*{1.0cm}Table of the Binominal Distribution}}
\end{center}

Here you go\ldots

\begin{center}
\small
\begin{tabular}{|r|r|*{11}r|} % *{11}r -> rrrrrrrrrrr
\hline
$n \downarrow$ & $k \downarrow$ & $p \to $ & 0.01 & 0.05 & 0.15 & 0.20 & 0.30 & 1/3 & 0.35 & 0.40 & 0.45 & 0.50\\
\hline
2 & 0 &  & 0.9801&0.9025&0.7225&0.6400&0.4900&0.4444&0.4225&0.3600&0.3025&0.2500\\
  & 1 &  & 0.0198&0.0950&0.2550&0.3200&0.4200&0.4444&0.4550&0.4800&0.4950&0.5000\\
  & 2 &  & 0.0001&0.0025&0.0225&0.0400&0.0900&0.1111&0.1225&0.1600&0.2025&0.2500\\
\hline
\end{tabular}
\end{center}

\end{document}

PDF文件将如下所示:

在此处输入图片描述

与原文比较:

在此处输入图片描述

该死,我现在明白了忘记 p=0.10p=0.49无论如何你明白我的意思了。

评论:你的教授的表格中似乎有一点舍入误差(比较 n=2,k=0,p=0.1)。或者矩阵是错的。

另一点说明:为什么现在还需要这种桌子?!它不是像sinlog桌子一样过时了吗:)?

相关内容