Raptor中生成任意范围的随机数

##1.问题背景##
    在Raptor中,有时候我们需要一些指定范围的随机数,但是我们从Raptor帮助文件中可以发现,random产生[0,1)之间的随机数,这显然是不能满足需要的,所以本篇教学探讨怎么生成任意范围的随机数。
帮助文件中的random函数介绍:
这里写图片描述

##2.实现原理##
本篇教学讨论生成[a,b)(b>a)区间上的均匀分布的随机数

  • Raptor中的random产生一个[0,1)区间上均匀分布的随机数

  • 基于这种事实,y=a+(b-a)x相当于把[0,1)区间的长度拉伸为(b-a),并且把这个区间向右平移了a个长度,也就是先把[0,1)拉伸为[0,(b-a)),并且把这个区间向右移动a个单位,则得到[0,(b-a))+a=[a,b),这样我们就得到了一个从区间[0,1)到区间[a,b)的一个一一对应关系(下面给出示意图)

  • 因此,任意x在[0,1)之间的随机数经过这种变换就变成[a,b)之间的随机数了

    说点闲话,上面从区间[0,1)到[a,b)之间的一个一一映射,表明了一个很重要是事实![0,1)区间的点的个数和任意[a,b)区间上点的个数是一样多的!!!

示意图:
[0,1)到[3,5)的变化过程
这里写图片描述

[0,1)到[5,20)的变化过程
这里写图片描述

    给出一段生成示意图的MATLAB代码,更改a和b就能显示不同区间的变化了,有兴趣可以看一看

close all;
a=3;
b=8;
x=0:0.01:1;
y1=-1*ones(size(x));
y2=0*ones(size(x));
y3=1*ones(size(x));
hold on
plot(x,y1,'b-','LineWidth',4)
plot((b-a)*x,y2,'g-','LineWidth',4)
plot((b-a)*x+a,y3,'r-','LineWidth',4);
legend('原区间','拉伸后','平移后')
title(['生成区间[',num2str(a),',',num2str(b),')','随机数示意图']);
set(gca,'ytick',[]);
set(gca,'xtick',0:1:b);
axis([0 b -3 3]);

##3.具体应用##
定义一个长度为10的一维数组,其中数据随机生成,为1到10之间的整数。
分析:

  • 我们前面说了关于[0,1)区间到任意区间[a,b)的一个对应关系,这得到的是浮点数,但是要注意的是这个题目要求生成1到10之间的整数

  • 因为这个是左开右闭区间,右面的b不能达到,对于生成1到10的整数来说,我们要对这个区间进行一个floor操作,floor是Raptor中向下取整函数

  • 很显然,我们需要浮点数区间是[1,11),现在好了我们一下子就看出来a=1,b=11

  • 根据y=a+(b-a)x,我们在Raptor中应该做的变换就是floor(1+10*random)

  • 这样就得到了一个[1,10]之间的随机整数
    ##4.流程图与结果展示##
    这里写图片描述


    以上就是关于生成任意范围均匀随机数的内容,需要程序、代做程序或者有什么问题请联系QQ545030769

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏雪无痕是个小疯子

您的鼓励将促使我的创作更有价值

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值