楼主: fdw001
3945 2

[问答] 生成满足一定条件的随机数 [推广有奖]

  • 0关注
  • 1粉丝

大专生

60%

还不是VIP/贵宾

-

威望
0
论坛币
75 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2972 点
帖子
23
精华
0
在线时间
71 小时
注册时间
2010-9-25
最后登录
2012-11-13

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
各位大侠,我想请问一个小程序问题:生成10个服从0-1间均匀分布的随机数,但要求10个随机数的和要小于1!请问如何用matlab编程啊?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:随机数 MATLAB编程 MATLAB atlab matla matlab 程序 如何

沙发
lachance 发表于 2012-2-25 10:41:09 |只看作者 |坛友微信交流群
[

使用道具

藤椅
matlab-007 发表于 2016-8-23 05:57:48 |只看作者 |坛友微信交流群
1、功能:
产生0到1之间均匀分布的一个随机数
2、方法说明:
设m=216,产生产生0到1之间均匀分布的一个随机数的计算公式如下:
ri=mod(2053ri-1 +13849,m),i=1,2,3……
pi =ri/m
例:连续产生10个0到1之间均匀分布的一个随机数 。r的初值取5.0

1   #include "stdio.h"
2   double rnd1(double *r)
3   { int m;
4     double s,u,v,p;
5     s=65536.0; u=2053.0; v=13849.0;
6     m=(int)(*r/s); *r=*r-m*s;
7     *r=u*(*r)+v; m=(int)(*r/s);
8     *r=*r-m*s; p=*r/s;
9     return(p);
10   }
11   main()
12   { int i;
13     double r;
14     r=5.0;
15     printf("\n");
16     for (i=0; i<=9; i++)
17        printf("%10.7lf\n",rnd1(&r));
18     printf("\n");
19     getch();
20   }

3、功能:
产生0到1之间均匀分布的一个随机数序列
例:产生50个0到1之间均匀分布的一个随机数序列,r的初值取1.0
1
2  
3   #include "stdio.h"
4   void rnds(r,p,n)
5   double *r,p[];
6   int n;
7   { int i,m;
8     double s,u,v;
9     s=65536.0; u=2053.0; v=13849.0;
10     for (i=0; i<=n-1; i++)
11       { *r=u*(*r)+v; m=(int)(*r/s);
12         *r=*r-m*s; p[i]=*r/s;
13       }
14     return;
15   }
16   main()
17   { int i,j;
18     double p[50],r;
19     r=1.0;
20     rnds(&r,p,50);
21     printf("\n");
22     for (i=0; i<=9; i++)
23       { for (j=0; j<=4; j++)
24           printf("%10.7lf  ",p[5*i+j]);
25         printf("\n");
26       }
27     printf("\n");
28     getch();
29   }
30

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-10 22:15