找回密码
 欢迎注册
楼主: markfang2050

[原创] 在椭圆x^2/4+y^2/9=1中均匀分布的点中随机取一点,求此点到椭圆中心的平均距离

[复制链接]
 楼主| 发表于 2020-5-3 09:43:48 | 显示全部楼层
普及下什么是高维空间的均匀。假设一个长方形边长a和b不相等,但是用同一个随机函数生成长方形内的坐标( x=a*rand(0,1), y=b*rand(0,1) ),那么在两个方向的一维概率密度分别是1/a和1/b,那么这个长方形内只有单个方向的概率分布是均匀的,但并不是各向均匀,只有a=b时才是真正的均匀,有些人没有分清楚一维均匀和高维均匀的区别。所以,如果在长方形外面外接一个边长为a的正方形(假设a>b),那么先用随机函数在正方形区域内获得各项同性的均匀分布点( x=a*rand(0,1), y=a*rand(0,1) ),各向概率密度为1/a,那么如果我们丢掉在长方形外部的样本,那么在长边方向,总概率还是1,但是短边方向我们丢掉了大约(a-b)/a的样本,总概率变成了1 - (a-b)/a = b/a,而长边的概率密度为1/a,短边的概率密度为(b/a) / b = 1/a,这样才是各向同性均匀,各个方向的线密度相等。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-5-3 09:52:48 | 显示全部楼层
markfang2050 发表于 2020-5-3 09:43
普及下什么是高维空间的均匀。假设一个长方形边长a和b不相等,但是用同一个随机函数生成长方形内的坐标( x ...

"各向均匀" 是谁要求的? 你这是从哪翻出来的 词汇? 经过你给大家的普及,  难道按照你的逻辑, 在正方形的区域内,   y=x方向 跟 y=0方向是 同概率分布了? 你说你欠揍不欠揍, 拜托先确认一下 自己的 知识体系 是不是完整的, 靠谱的, 再来教育大家.好不好.
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-5-3 21:10:06 | 显示全部楼层
  1. AbsoluteTiming[
  2. {a, b} = {3, 2};
  3. n = 10^7;
  4. xx = RandomReal[{-a, a}, n]^2;
  5. yy = RandomReal[{-b, b}, n]^2;
  6. B = Unitize[1, xx/a^2 + yy/b^2];
  7. Total[B Sqrt[xx + yy]]/Total[B]
  8. ]
复制代码

{0.389281, 1.68323}

点评

快得 10^8变为现实  发表于 2020-5-4 10:02

评分

参与人数 1威望 +6 金币 +6 贡献 +6 经验 +6 鲜花 +6 收起 理由
wayne + 6 + 6 + 6 + 6 + 6 比我的快太多了,赞赞赞

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2020-5-3 23:34:36 | 显示全部楼层

(*椭圆x^2/4+y^2/9=1中均匀分布的点中随机取一点,求此点到椭圆中心的平均距离*)
AbsoluteTiming[{a, b} = {2, 3};
n = 10^7;
x = RandomReal[{-b, b}, n];
y = RandomReal[{-b, b}, n];
B = Unitize[1, x^2/a^2 + y^2/b^2];
Total[B  Sqrt[x^2 + y^2]]/Total[B]]
{1.66658, 1.6835}
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-5-4 08:56:05 | 显示全部楼层
markfang2050 发表于 2020-5-3 23:34
(*椭圆x^2/4+y^2/9=1中均匀分布的点中随机取一点,求此点到椭圆中心的平均距离*)
AbsoluteTiming[{a, b} ...

说明两个问题,你的机器不如chyanog的,你读不懂chyanog的代码。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-5-4 09:41:40 | 显示全部楼层
本帖最后由 dlpg070 于 2020-5-4 09:47 编辑
markfang2050 发表于 2020-5-3 23:34
(*椭圆x^2/4+y^2/9=1中均匀分布的点中随机取一点,求此点到椭圆中心的平均距离*)
AbsoluteTiming[{a, b} ...


比较不同伪随机变量设置的一些计算结果
chyanog 代码(Wayne类似) 和
markfang2050代码
结果有随机性,未做统计分析,大体可见对错优劣
至少markfang2050的伪随机变量设置没有改进


1 chyanog 代码 原题 a=3 b=2
k        a        b        n                理论                实验                理论-实验
1        3        2        100000        1.68338        1.68291        0.000468288
2        3        2        1000000        1.68338        1.68274        0.000635901
3        3        2        10000000        1.68338        1.68361        -0.000235944
4        3        2        100000000        1.68338        1.6833        0.0000720114


2 markfang2050代码 原题 a=2 b=3
k        a        b        n                理论                实验               理论-实验
1        2        3        100000        1.68338        1.67961        0.00376412
2        2        3        1000000        1.68338        1.68397        -0.000590353
3        2        3        10000000        1.68338        1.68317        0.000202304
4        2        3        100000000        1.68338        1.68353        -0.000150837


3 chyanog 代码 大a/b 比较差异
k        a        b        n                理论                实验                理论-实验
1        10        2        100000        4.45847        4.45274        0.00572611
2        10        2        1000000        4.45847        4.45934        -0.000872613
3        10        2        10000000        4.45847        4.45943        -0.000956779
4        10        2        100000000        4.45847        4.45818        0.000289414


4 markfang2050代码 大b/a 比较差异
k        a        b        n                理论                实验                理论-实验
1        2        10        100000        4.45847        4.43848        0.0199884
2        2        10        1000000        4.45847        4.45343        0.00504144
3        2        10        10000000        4.45847        4.46031        -0.00183582
4        2        10        100000000        4.45847        4.45825        0.000219374



毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-5-6 00:26:19 | 显示全部楼层
  1. AbsoluteTiming[
  2. n = 10^7;
  3. square = RandomReal[{-1, 1}, {n, 2}]^2;
  4. disk = Unitize[1, Total /@square];
  5. Total[disk Sqrt[square.{9, 4}]]/Total@disk
  6. ]
复制代码

仿chyanog写了一个试试。
为什么下面使用Select函数比上面使用Unitize函数要慢得多呢?
  1. AbsoluteTiming[
  2. n = 10^7;
  3. disk =Select[RandomReal[{-1, 1}, {n, 2}]^2, Total@#<1&];
  4. Total[Sqrt[disk.{9, 4}]]/Length@disk
  5. ]
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-5-6 08:58:58 | 显示全部楼层
hujunhua 发表于 2020-5-6 00:26
仿chyanog写了一个试试。
为什么下面使用Select函数比上面使用Unitize函数要慢得多呢?

几个高速代码的计算结果比较,顺序不变
chyanog     :{0.590527,1.68343}
markfang2050:{0.697038,1.68326}
hujunhua1   :{1.12744,1.6833}
hujunhua2  :{17.3129,1.68373}

点评

试了一下,把17#的hujunhua1里的Total/@square改为square.{1,1}更快一些。  发表于 2020-5-6 10:31
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-5-6 10:38:38 | 显示全部楼层
dlpg070 发表于 2020-5-6 08:58
几个高速代码的计算结果比较,顺序不变
chyanog     :{0.590527,1.68343}
markfang2050:{0.697038,1.683 ...


把四个程序都运行一遍,再运行第2次时比较结果才是平行的。
否则,由于先运行的程序拥有较大的内存,首次运行时是不平行的。
或者,把各程序的相同的表取为同一个名称,让后运行的覆盖先运行的所占内存,条件应该也是平行的。

我的机子内存4G,对运行先后比较敏感。大内存可忽略。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2020-5-6 16:18:02 | 显示全部楼层
本帖最后由 dlpg070 于 2020-5-6 18:21 编辑
hujunhua 发表于 2020-5-6 10:38
把四个程序都运行一遍,再运行第2次时比较结果才是平行的。
否则,由于先运行的程序拥有较大的内存, ...


我在计算中注意到清理内存,结果与计算顺序关系不大
为公平起见,现在给出另一种计算顺序结果,速度排序不变
按计算先后排序(原代码未改)
hujunhua2   :Wed 6 May 2020 15:44:26 {17.906,1.68384}
hujunhua1   :Wed 6 May 2020 15:44:43 {1.14305,1.6838}
markfang2050:Wed 6 May 2020 15:44:45 {0.783517,1.68346}
chyanog     :Wed 6 May 2020 15:44:45 {0.636677,1.68325}
hujunhua2速度慢一些原因已查明
Select 收集具体信息,disk含有大量信息,占大内存
Unitize 只保留 0 或 1 信息 hu2 disk比 hu1 disk内存大不只十几倍
给出前10个数据例子
hu2 disk
{{{0.286544,0.469867}},{{0.0271882,0.0824672}},{{0.0137024,0.793094}},{{0.110858,0.226014}},{{0.129643,0.558647}},{{0.039617,0.126973}},{{0.0594093,0.173191}},{{0.443257,0.0010602}},{{0.000654596,0.0510836}},{{0.038289,0.0575814}}}
hu1 disk
{{1},{1},{1},{1},{1},{1},{0},{1},{0},{0}}

如果仅仅判断用Unitize当然好
但是如果选取数据Select不可少 ,慢点不是坏事
你是高手,我只是说点学习心得.



点评

@chyanog 貌似用Pick还是要借助于Unitize才简便.  发表于 2020-5-6 23:14
谢  发表于 2020-5-6 21:47
选取数据可以用Pick,速度比Select快得多  发表于 2020-5-6 19:50
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-23 09:03 , Processed in 0.025462 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表