`

生产三个[0,1)的随机数相加为1

 
阅读更多

刚在在开源中国上看到的这个问题:http://www.oschina.net/question/817257_90108

如何产生3个在[0-1]之间并且和为1的随机数?

 

解法:

a=rnd(),b=rnd()

随机数1=min(a, b)

随机数2=abs(a - b)

随机数3=1 - max(a, b)

# -*- coding:utf-8 -*-

from visual import *
import random

pointer_x = arrow(pos=(0,0,0), axis=(1,0,0), shaftwidth=0.01)
pointer_y = arrow(pos=(0,0,0), axis=(0,1,0), shaftwidth=0.01)
pointer_z = arrow(pos=(0,0,0), axis=(0,0,1), shaftwidth=0.01)

poslist=[];
colorlist=[color.red,color.yellow,color.green]

#方案一
for i in xrange(10000):
    a=random.random()
    b=random.random()
    x1=min(a,b)
    x2=abs(a-b)
    x3=1-max(a,b)
    points(pos=(x1,x2,x3), size=2, color=random.choice(colorlist))

 

 

生成图像:

 

 

 

 

 

下面是一种容易想到的解法。生成是随机的,但分布不均匀。

 

不均匀解:

Double a=Math.random()

Double b=Math.random()*(1-a)

Double c=1-a-b

# -*- coding:utf-8 -*-

from visual import *
import random

pointer_x = arrow(pos=(0,0,0), axis=(1,0,0), shaftwidth=0.01)
pointer_y = arrow(pos=(0,0,0), axis=(0,1,0), shaftwidth=0.01)
pointer_z = arrow(pos=(0,0,0), axis=(0,0,1), shaftwidth=0.01)

poslist=[];
colorlist=[color.red,color.yellow,color.green]

#方案二
for i in xrange(5000):
    x1=random.random()
    x2=random.uniform(0,1-x1)
    x3=1-x1-x2
    points(pos=(x1,x2,x3), size=2, color=random.choice(colorlist))

 

 

 生成图像:

 



 

  • 描述: 方案一:分布均匀
  • 大小: 81.7 KB
  • 大小: 55.5 KB
分享到:
评论

相关推荐

    vb随机数求和

    求和题目:自动随机产生两个数,范围50~150,当两者之合为200时,停止产生随机数。将结果显示在第三个文本框中

    java随机数获取

    Math.random:随机数的个,十,百,千,,,位数相加详解

    实现产生随机矩阵

    1、 利用随机数生成两个4×4的矩阵A和B,前者范围为30~70,后者范围为101~135。 要求: ① 将两个矩阵相加结果放入C矩阵。 ② 将矩阵A转置。 ③ 求C矩阵中元素的最大值和下标。 ④ 以下三角形式显示A,上三角形式...

    Javascript获取随机数的实现方法

    最后,通过`Math.random()`生成一个介于0和`(m - n)`之间的随机小数,再与`n`相加,并进行四舍五入,得到`n`到`m`之间的随机整数。 为了演示`getRandom`函数的使用,我们可以创建一个包含5个0到50之间随机整数的...

    php通过排列组合实现1到9数字相加都等于20的方法

    函数`huoqu_zhuhe()`接收三个参数:`$eq`表示目标总和,`$jiashu`是可选加数的数组,`$isone`决定是否每次使用不同的加数。该函数的核心是生成所有可能的排列组合,并进行过滤。 3. **数组操作**: - `explode('+...

    excel如何确定几个未知数之和刚好等于给定的总和值.docx

    RAND 函数是 Excel 中的一个随机数生成函数,其取值范围为 (0,1]。该函数可以用来生成随机数,例如 =RAND()*10 将生成一个介于 0 和 10 之间的随机数。 二、通过总和值 M 推算出几个未知数的理论 假设给定一个总和...

    A04-二维码接力计算(简单加密)-安卓版设计文档1

    1. 第一个人将自己的数字与一个随机数相加,生成二维码。 2. 其他人扫描前一个人的二维码,获取数字之和,然后把自己的数字和另一个随机数相加,生成新的二维码。 3. 这个过程持续进行,直到所有人都把自己的数字...

    大连理工大学 线性代数 上机答案

    题目包含八个子问题,这里将详细介绍其中三个:矩阵加减法、矩阵乘法以及求解线性方程组。 #### 1. 矩阵加减法 **知识点概述**: 矩阵加减法是线性代数中的基本运算之一。两个相同维度的矩阵可以通过对应位置元素...

    rake接收机仿真matlab.doc

    最大值合并是将三个径信号的最大值相加,而等增益合并是将三个径信号相加并除以3。选择式合并是根据三个径信号的强度来选择一个信号。 性能评估 在性能评估部分,我们使用Bit_Error_Number来计算误比特率。我们还...

    蒙特卡洛模型蒙特卡洛模型

    首先取一个原整数,例如45086273,然后右移三位得00045086,将45086273与00045086按位相加得45021259,将45021259左移四位得12590000,将12590000与45021259按位相加得57511259,于是得到第二个随机数0.5751129。...

    Matlab矩阵基础(数组),介绍了创建矩阵、矩阵运算、矩阵的增删改查以及常用函数

    >> a = rand(2,3) % 生成 2 行 3 列的矩阵,每个数为 0-1 间的随机数 >> a = 1:3; >> b = 1:0.2:2; >> c = [b a] % 拼接矩阵 注意:在语句后面加上分号;那么这条语句将不会输出结果! 二、矩阵运算符号作用 ...

    第二次课外作业1

    11. **学生信息字典**:设计一个字典`stinfo`,包含三个班级,每个班级都有三名学生的信息,包括学号、姓名和手机号码。你可以创建一个嵌套字典,外层是班级名称,内层是学生信息的字典。 以上就是每个练习的核心...

    java程序设计课程--实验报告-实验11.pdf

    3. 重写flip方法,生成一个0到1之间的随机数,如果这个数小于bias,则设为正面(HEADS),否则设为反面(TAILS)。 4. 创建一个带参数的构造函数,接收一个double类型的bias值。如果该值有效(在0和1之间),则赋值给...

    软件大赛java模拟试题实用.pdf

    首先,需要生成一个0到总概率和(即所有奖项概率相加)之间的随机数。在这个例子中,总概率和是12(1/12 + 5/12 + 1/2 = 1)。所以,应该填写`12`。完整的代码是: ```java int i = (int) Math.random() * 12; ``...

    Matlab三维数组操作指南

    在Matlab中,三维数组是一种多维数据结构,它可以存储具有三个维度的数据。每个维度分别代表数组的行、列和深度(即第三个维度)。这种数据结构非常适合处理复杂的多维数据问题,尤其是在科学计算、工程分析、图像...

    实验1评分规则.docx

    1. **输入验证与处理**:在第一个实验任务中,要求程序能够处理至少两组输入,一组为0-999之间的整数,另一组为超出该范围的整数。对于0-999之间的整数,程序应正确计算并返回各位数字之和,得5分。对于超出范围的...

    jsp小游戏——猜数字相加大小

    总的来说,"jsp小游戏——猜数字相加大小"为学习者提供了一个实践JSP编程、理解服务器端动态网页生成和用户交互的好机会。通过这个游戏的开发,开发者可以深入掌握JSP技术,并将其应用到更复杂的Web应用程序中。

    Matlab产生各种信号的方法.rar_matlab_matlab 信号_产生三角信号_信号

    % 生成矩形波,第二个参数为周期,第三个参数为占空比(默认为0.5,即50%占空比) ``` 接下来,我们讨论如何生成高斯信号,也称为正态分布信号。MATLAB中的`normrnd`函数可以用来生成符合正态分布的随机数。例如,...

Global site tag (gtag.js) - Google Analytics