易码技术论坛

 找回密码
 加入易码
搜索
查看: 588536|回复: 7

〖原创〗分布函数使用详解

[复制链接]
发表于 2006-5-12 17:57:00 | 显示全部楼层
说得不错啊,支持啊!
发表于 2006-5-13 14:28:00 | 显示全部楼层
这个问题很值得研究,除了正态,那么二次分布呢(貌似这个很简单),即使是正态,离散度,周边的递减性,还有……的分布情况,可以写一篇论文了。
发表于 2006-5-26 02:38:00 | 显示全部楼层
技术帖、奖励精华
发表于 2006-5-26 02:50:00 | 显示全部楼层
不错。支持理论研究。

不过从实践上讲,由于大量使用了浮点函数库,运行速度会受很大影响,实际使用时要衡量一下是否必要。

另外:从LavaX3.0开始就支持浮点运算和浮点函数库了。
发表于 2006-7-13 16:15:00 | 显示全部楼层
前两句是铺垫
发表于 2007-5-11 12:43:09 | 显示全部楼层
哈哈,做游戏有可以用到了!!
发表于 2007-6-10 21:54:58 | 显示全部楼层
靠就一个字,支持技术帖.
不看到这样的帖,真觉得数学白学了.
 楼主| 发表于 2006-5-12 15:37:29 | 显示全部楼层 |阅读模式
再程序设计时,特别是在设计游戏时经常要使用到随机函数RND()。
比如要生成一个值,要求在区间(A,B)的范围内,我们可以
R=(B-A)*RND(1)+A
这样一来,生成的随机值是均匀分布在区间(A,B)的。
但在有的情况下,我们希望这个值能集中分布在(A,B)中的某点M附近,类似于正态分布图象(图1-1)。可惜WQX中没有直接提供这种类型的分布函数,不担心,我们可以自己写一个。
假设y=f(RND(1)) y∈(A,B)其中y是关于RND(1)的一个函数,即是说y与RND(1)是一一印射的。要使y集中分布在区间(A,B)的点M附近,就是要让点M附近的区域映射(0,1)中更多的区间。根据这点性质,我们可以近似的画出f(x)的函数图象。图1-2
看到这个图象,我们很容易联想到两个初等函数y=x^3y=tan(x)。很庆幸,BASIC中提供了这两个函数。在这里,我们选择TAN(X)。主要是因为BASIC里还提供了其反函数ATN(X),不要小看,有了它我们可以很方便的控制分布函数f(x)的集中度(后用G表示)。不多说了,把f(x)贴出来先:
N=TAN(ATN((B-M)/G)-ATN((A-M)/G))*RND(1)+ATN((A-M)/G))*G+M  ①
G越大,数N分布越散;G越小,数N分布得越集中。下面给出G分别取10,20,50生成数N的分布频率图1-3,1-4,1-5
这三个图有个共性,就是图象基本上关于集中轴左右对称。设计者如果想对集中轴左右的频率分布比例进行控制,那么下面再介绍一个自定义的分布函数。先引进一个参数K。K表示新生数N在区间(A,M)的出现频率与在区间(A,B)出现频率的比值,显然K是小于1大于0的。
N=(B-M+(A-B)*(RND(1)<K)*RND(1)^G'+M   ②
之所以写成G'是因为此G与①式中的G含义不同。这里的G要求大于1,等于1时效果与(B-A)*RND(1)+A是等价的。且G越大,分布函数的集中度越高;G越接近于1,函数集中度越低。附代说一句,当K取(M-A)/(B-A)时,频率分布图象是关于集中轴对称的。

LAVA(LAVA1.0)中提供的数学函数实在太简陋了,且不支持浮点数。要实现分布函数实为不易,本人仍试着写过一个,可惜密集度过高,没什么实用性,这里就不介绍了。


[em15][upload=bmp]UploadFile/2006-5/200651816265383319.bmp[/upload]
[upload=bmp]UploadFile/2006-5/20065181627079172.bmp[/upload]

[此贴子已经被作者于2006-5-18 16:27:05编辑过]

您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-27 03:05 , Processed in 0.012891 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表