首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >学生-t分布的综合评价

学生-t分布的综合评价
EN

Code Golf用户
提问于 2014-11-09 14:53:52
回答 1查看 583关注 0票数 7

该合作伙伴的目标是评估学生t概率分布的累积分布函数。这并不简单,因为没有封闭形式,而且函数依赖于两个变量vx。分布函数是

为了获得CDF,您可以将这个函数从-inf集成到x。正如您所看到的,这个函数的计算在很大程度上依赖于积分,因为您还必须计算伽马函数的非平凡值。

详细信息

您可以编写一个程序或函数,该程序或函数接受两个数字xv作为输入,其中x是计算of的位置(必须至少接受从-10到10的浮动),v是自由度的数目。v是一个正整数(范围为11450),但必须可以将其设置为无穷大(对于v=inf,学生-t分布等于正态分布)。但是您可以指定,例如,v = -1应该表示无穷大。输出必须是0到1之间的数字,并且必须具有至少4位小数点的精度。如果您的语言不支持运行时输入或程序调用中的参数,则可以假设这两个参数都存储在变量(或另一个“内存单元”)中。

Restrictions

你不能使用特殊的函数,比如伽马函数或概率分布函数,以及数值积分函数或库(只要你不把它们的源代码包括在计算分数的代码中)等等。这个想法只是使用基本的数学函数。我试着列一张清单,列出我认为“基本”的内容,但可能还有其他一些我忘记了--如果是的话,请评论一下。

显式允许

代码语言:javascript
复制
+ - / * 
% (modulo)
! (factorial for integers only)
&& || xor != e.t.c. (logical operators)
<< >> ^ e.t.c. (bitshift and bitwise operators)
** pow (powerfunction for floats like a^b including sqrt or and other roots)
sin cos tan arcsin arccos arctan arctan2
ln lb log(a,b)
rand() (generating pseudorandom numbers of UNIFORM distribution)

评分

最少字节数获胜。

条目

请解释您的代码是如何工作的。请显示至少5个不同参数的程序输出。其中应包括以下三项。对于您自己的值,也请提供“确切”值(如wolframalpha或任何您喜欢的)。

代码语言:javascript
复制
x = 0      v= (any)  (should return 0.5000)
x = 3.078  v= 1      (should return 0.9000
x = 2.5    v= 23     (should return 0.9900)

如果可能的话,如果你能提供一些用你的程序计算出来的值的花哨图(绘图代码不算分数),那就太好了。

(来自维基百科):

EN

回答 1

Code Golf用户

回答已采纳

发布于 2014-11-10 23:45:31

BBC,155个ASCII字符,标记文件大小为140

下载http://www.bbcbasic.co.uk/bbcwin/bbcwin.html仿真器

代码语言:javascript
复制
  a=1s=.000003INPUTx,v
  IFv<1v=9999
  FORw=1TOv-1a=w/a
  NEXTb=SGN(x)*s*a/SQR(v)IFv MOD2b=b/PI ELSEb=b/2
  f=.5FORz=0TOABS(x)STEPs
  f+=b/(1+z*z/v)^(v/2+.5)NEXTPRINTf

代码分为两部分。第一个计算独立于x的系数,并将其存储在b中。这个算法有点像连续分数,但数学家可能会称它为两个乘积的简单商数。它基于问题中维基百科页面中的一个公式,它类似于一个阶乘,但是将产品(v-1)(v-3)...除以产品(v-2)(v-4)...是可能的,因为我们只对伽马函数的半积分值感兴趣(伽马函数的任意值会更难)。使用这个公式,我们不必计算任何一个伽马函数,所以我们避免了大量的数字。最大的中间值大约是v的平方根。

第二个是通过求和从0到x的直接积分。我们知道f(0)是0.5,所以我们从那里开始,然后向外工作。为了能够直接给出最终的答案,在循环之前对b的符号和大小进行了修改。

漂亮版,未镀金的

这包含了一些额外的线条,以增加颜色和绘制数据。x=0到端点的范围为f(x)=0.5至1。此外,v被修改为2^v,使其能够在不超过颜色限制的情况下显示v值的全部范围。为了加快绘制速度,s中的数字比黄金版本少两位。即便如此,与http://www.wolframalpha.com/input/?i=student+t-distribution+probability相比,只有一个差异:0.8130575值高达0.8131。黄金版本给出了正确的答案,(0.8130)对此和所有其他情况下。

代码语言:javascript
复制
  a=1                              :REM accumulator for gamma series
  s=.0001                          :REM step size for x integration
  INPUTx,v
  IFv<1 v=9999                     :REM if v<1, set v to a value that gives results indistinguishable from infinity
  GCOLv                            :REM pick a colour
  v=2^v                            :REM for the pretty version, modify v to 2^v
  FORw=1TOv-1
    a=w/a                          :REM calculate series as per Wikipedia
  NEXT
  b=a/SQR(v)                       :REM divide a by the necessary values...
  IFv MOD2 b=b/PI ELSE b=b/2       :REM to give the coefficient, per Wikipedia

  b*=SGN(x)*s                      :REM modify according to sign and step size
  f=.5                             :REM initialise f(x)=.5 at x=0
  FORz=0TO ABS(x) STEPs
    f+=b/(1+z*z/v)^(v/2+.5)        :REM perform integration as simple "barchart" sum
    PLOT69,z*100+200,(f-.5)*1600   :REM plot a point
  NEXT
  PRINT f
票数 5
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/41333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档