魔方吧·中文魔方俱乐部

 找回密码
 注册
搜索
热搜: 魔方
楼主: 钟七珍
打印 上一主题 下一主题

圆上作弦的概率问题 [复制链接]

Rank: 1

积分
162
帖子
108
精华
0
UID
20864
性别
保密
41#
发表于 2008-12-12 19:27:28 |只看该作者
关于这个问题,我编程模拟了一下,取了10000000个弦,然后算距离。我模拟的方法是:
设圆的方程为x^2+y^2=1,其中弦的一个端点是(0,1)。
再确定另一个端点的x和y坐标的绝对值,然后随机选取一个象限,确定x&y的符号,然后算这点
与(0,1)的距离,作为弦的长度,比较其与根号3的大小。然后重复做此过程10000000次(到底是计算机啊。。。。。。)。

现在把几次计算的结果写下来:
0.432944
0.433049
0.433023
0.432844
0.432985
可以看到概率稳定在0.432~0.433之间

因此似乎已有的结论都与我的不一致。。。。。。

顺便贴出我的程序:
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<ctime>
using namespace std;

const int N = 10000000;

int main(void){
    double dis,lim,x,y;
    int area,hit;
   
    srand(time(NULL) );
    lim = sqrt(3.0);
    hit = 0;
    for(int i=0;i<N;i++){
        x = ((double)rand() /RAND_MAX )*1.0;
        y = sqrt(1.0-x*x);
        area = rand()%4;
        if(area==1||area==2) x = -x;
        if(area==2||area==3) y = -y;
        dis = sqrt(x*x + (y-1.0)*(y-1.0) );
        if(dis>lim) hit++;
    }
   
    cout<<double(hit)/double(N);
   
    system("pause");
    return 0;
}

使用道具 举报

Rank: 2

积分
313
帖子
33
精华
0
UID
12952
性别
42#
发表于 2008-12-17 14:14:22 |只看该作者
这个入手点不同,答案也不同。都是合理的。

使用道具 举报

Rank: 2

积分
262
帖子
11
精华
0
UID
4492
性别
43#
发表于 2008-12-19 11:09:57 |只看该作者

方法1对!

答案是1./3;

[ 本帖最后由 阿牛++ 于 2008-12-23 10:07 编辑 ]

使用道具 举报

Rank: 2

积分
424
帖子
384
精华
0
UID
64224
性别
保密
44#
发表于 2008-12-19 16:31:09 |只看该作者
随机的结果有三种情况``长,短,合适``
应该都是3分之1``

使用道具 举报

Rank: 4

积分
1676
帖子
206
精华
0
UID
4822
性别
45#
发表于 2009-1-24 22:04:31 |只看该作者
“任作”一弦没有问题,但是三种方法都有其依据,然而得到的答案却是不同的,的确很奇怪。

在一本书上看过,也是这三种答案,按直径算、按弧算,等等,但是书上也没有给出答案。

使用道具 举报

Rank: 4

积分
1194
帖子
924
精华
6
UID
44804
性别
保密
46#
发表于 2009-1-25 14:07:15 |只看该作者
我们计算涉及到无限的概率时,把一种情况通过变换,转变成另外一种情况,把计算前一种情况的概率转化成计算另一种情况的概率时,一定要遵守一对一的原则.
我们把前一种情况记作A,后一种情况记作B,变化规则是f.我们选择的f,必须满足一对一的原则.即一个A得到一个B.反过来,一个B只能对应1个A.
举例说明以下:10以内的两个数相加,加数为1-9的数字,求和等于5的概率.
   如果我们通过转换来计算概率,一定要求这种转换是一对一的.
    比如以下的转化,一个式子(两个数相加),对应它们的和,和只能从2-18共17种可能.若把两个数相加通过转变成来求概率,必然导致错误.因为A→B是唯一的,但B→A不是唯一的(和等于同一个数值的式子很多).这种转化方式是不对的.
---------------------------------------------
所以楼主的第二种算法,把弦通过转化,转变成计算距离,这种转化是不对的.因为弦变换成距离是唯一的,但等于这个距离的弦有很多,这种转化不是一对一关系.
同样,第三种算法,把弦转化成它的中点,这种转换也是错误的.弦转化成它的中点,是唯一确定,但通过该点的弦却不是唯一的,它有无数条.所以这种转换方法不是一对一关系.
而第一种算法,先确定一点,因为圆周上的点是对称的,所以随便定在哪都可以.而定第二个点来确定弦,这种转化方法是一对一对应的(一条弦对应一个点,一个点也对应一条弦),所以这种转化方法是可行的.
已有 1 人评分经验 收起 理由
superacid + 2 我很赞同

总评分: 经验 + 2   查看全部评分

使用道具 举报

Rank: 4

积分
1194
帖子
924
精华
6
UID
44804
性别
保密
47#
发表于 2009-1-25 14:44:19 |只看该作者
用Rnd()产生一个0-1之间的随机数,再乘以6.2831853071794,就得到一个0-2π之间的随机数(x1).对应圆上的一个点(cos x1,sin x1).
同样的方法得到圆上的第2个点(cos x2,sin x2).  这种弦转化成两个点的转换方法是符合一对一原则的.
       (cos x1 -cos x2) ^ 2 + (sin x1 - sin x2) ^ 2 > 3     就是判断条件.
编程计算 满足条件的实验次数除以总实验次数,就得到近似概率,实验次数越大,就约精确.
我让电脑实验了一百万次,得出的结果是0.333681.
非常符合楼主第一个方法得出的结论(三分之一).

使用道具 举报

Rank: 4

积分
1194
帖子
924
精华
6
UID
44804
性别
保密
48#
发表于 2009-1-25 15:10:47 |只看该作者
回复41#
       该同志用横坐标X作随机数的变量是不合适的,因为X在1或-1附近变化相同的△X时,产生的弦的变化多,而在0附近变化相同的△X时,引起弦的变化少.
      换句话说 每个不同的x的概率密度不同(针对无限中的概率要用概率密度来表示).
      所以把不同概率密度的变量当成相同概率密度来计算概率,必然导致错误.

使用道具 举报

Rank: 4

积分
1194
帖子
924
精华
6
UID
44804
性别
保密
49#
发表于 2009-1-25 15:27:25 |只看该作者
我们计算涉及到无限的概率时,不但要遵守一对一的原则,还要遵守概率密度不变原则.(概率密度就是单位变化量的概率,若每处的概率密度不同,就要用极限来求出)
举个例子:
求1到9之间的实数,小于5的概率.
非常简单概率等于二分之一.
但如果你通过平方变换,即在1-9之间的数进行平方,得到另一 数与之对应,那么它的范围就是1-81.这种转换是一对一的,但如果你得出结论认为概率就是转换后的求1-81中小于25的概率,为24/80,那就得出的错误结论.
原因在于:原先1-9中任何一点的概率密度相同.但通过平方变换后,每点的概率密度不同.


[ 本帖最后由 lulijie 于 2009-1-25 15:33 编辑 ]

使用道具 举报

Rank: 4

积分
1194
帖子
924
精华
6
UID
44804
性别
保密
50#
发表于 2009-1-25 16:20:12 |只看该作者
回复32#
阁下使用的转换方法符合一对一原则,但是它违反了概率密度不变的原则.
试想 点在某一条半径变化,变化相同的变量△r,引起的弦的变化数不同,也就是说用r 作变量,它的概率密度不是常数.   
    所以阁下得出的结论是错误的.
同志们啊,计算变量取值的概率时,一定要确定每种变量取值的概率,切不要把不同概率的当成相同概率的来计算,否则必然得出错误的结论.而涉及到无限种可能时,我们选择变量时,一定要保证这种变量的概率密度是个常数(即不同的变量取值,概率密度都相同).
一个最简单的例子:
加数只能取0或1,那么和为1的概率.
       和只有3种可能,0或1或2.  故得出和为1的概率为1/3.
        这明显是错误的.因为和的取值只有3种,但它们每种取值的概率却不是相等的.和为0的概率为1/4,和为1的概率是2/4,和为2的概率是14.

使用道具 举报

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

Archiver|手机版|魔方吧·中文魔方俱乐部

GMT+8, 2024-11-27 08:49

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部