比如:
Num_1=%d
Num_2=%d
Num_1=在区间[-10,10]均匀分布
Num_2=1/3概率 0
1/3概率 在区间[-10,-1]指数分布
1/3概率 在区间[1,10]指数分布
然后随机生成N次Num_1和Num_2
如何用C程序表达呢?
我想表达的意思是:
Num_1,Num_2是2个10进制的整数
Num_1的取值在区间[-10,10]内,呈现均匀分布
Num_2的取值在区间[-10,10]内,有3种情况
1/3概率 值为0
1/3概率 取值在区间[-10,-1]内,呈现指数分布
1/3概率 取值在区间[1,10]内,呈现指数分布
然后随机生成N次Num_1和Num_2的有效取值.
请各位高人赐教,不胜感激.
谢谢了.
此主题相关图片如下:
上面那句话写错了吧?
不好意思,昨天说错了.今天又改了下,这次看您满意不?
Num_1=rand()%21-10;
Num_2=rand()%3?(rand()%2?(int)(exp(-rand()/B)/B)%10-10):(int)(exp(-rand()/B)/B)%10+1)):0;
----------------解决方案--------------------------------------------------------
非常感谢这位热心的soft_wind朋友给予的帮助,但是我有点疑问的就是如果使用?:的表达方式,不是很好推广到更一般性的情况.比如Num_2的取值落在更大区间的时候,比如1/5[...],1/5[...],...甚至1/N[]
我觉得这肯定是大家编写程序时候会遇到的情况,能否找出一个更有通性的表达方式呢?
----------------解决方案--------------------------------------------------------
我是准备这样写
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ()
{
int n1;
int n2;
int N;
N = 10; // N 次比如10次
/*初始化随机生成器*/
srand ( time(NULL) );
for (n1=N; n1>0; n1--) {
//NUM1
printf ("NUM1 - A number between -10 and 10: %d\n", rand()%21-10);
//NUM2
n2 = rand()%3;
switch (n2)
{
case 0:
printf ("NUM2 - 1/3 chance = 0: %d\n", 0);
break;
case 1:
// 这里空缺了,我不会写指数分布的表达式
printf ("NUM2 - 1/3 chance - A number between -10 and -1: %d\n", -10);
break;
default: // case 2:
// 指数分布的表达式
printf ("NUM2 - 1/3 chance - A number between 1 and 10: %d\n", 10);
}
}
return 0;
}
这样可以吗?
对于那个概率的问题,我还有点疑问,如果我增加两个表达式:
Num_2的取值有5种情况
1/5概率 值为0
1/5概率 取值在区间[-10,-1]内,呈现指数分布
1/5概率 取值在区间[1,10]内,呈现指数分布
1/5概率 取值在区间(-∞,-11]内,呈现均匀分布
1/5概率 取值在区间[10,+∞)内,呈现均匀分布
那么我应该如何表达呢?
[此贴子已经被作者于2006-5-4 20:26:40编辑过]
----------------解决方案--------------------------------------------------------
而且更重要的是我不会表达n个1/n以外的情况.比如:(3/7+1/2+1/14=1)的情况,我希望Num_2按照这个概率生成N次取值,那么该如何表达呢?
----------------解决方案--------------------------------------------------------