如何优雅地测量一只猫的体积,而不使其感到惊恐或受到伤害?
前情提要
Monte Carlo 测猫法:
把猫装进已知体积为V_box的盒子,在盒子内均匀取N个随机点,其中M个在猫体内,猫体积近似为V_box*M/N。
推理及讨论见supplemental materials.
要实现这一测猫法,需要一种瞬时确定某点是猫还是非猫的方法,否则在猫运动的情况下,会测得猫扫过的体积而不是猫体积。
我决定用下图所示的方法。。。
盒子壁上装尽量多的激光灯,盒子壁用感光材料。若要确定某点是猫还是非猫,则让所有激光灯射向目标点。若目标点是猫,则激光会被猫挡住因此盒子壁上任何一点都不会检测到激光。因此我们用以下原则判断目标点是猫非猫:
若有盒子壁上任何一点检测到激光,说明目标点非猫。
否则认为该点是猫。
测量可以在很短的时间内完成,足以快到忽略猫的运动。
============================
当然这种方法是有缺陷的,猫身上一些凹陷部位可能会成为激光无法穿过的死角,因此被算入猫体积。
一个充分不必要的解决方法是让猫变成凸猫(convex cat), 即任取两点属于猫,两点之间的线段上的点都属于猫,满足这一条件的猫叫做凸猫,如下图所示。
下图是一个现实生活中凸猫的例子。。(图片来自网络)
对于凸猫,该方法测得的猫体积即为真猫体积,证明见supplemental materials中的夹逼测猫法。
但是这种方法是不猫道的,因为猫咪宣言中有这样的话:
We hold these truths to be self-evident, that all cats are created equal (大雾), and they are endowed by their Creator with certain unalienable rights, that among these are the rights to stand up, lie down, turn around, groom themselves and stretch their limbs ...
Five freedoms
[ARCHIVED CONTENT] Farm Animal Welfare Council
而凸猫显然(至少)剥夺了猫咪 stretch their limbs 的自由。。。
好在对于非凸猫,该方法也不是那么糟糕。
下面我将展示给大家,即使对于非凸猫,用该方法测出来的猫体积
首先本身就是一种很合理的猫体积定义
其次实际操作中与一般意义上的猫体积差别不大
============================
要测量猫体积,首先要定义猫体积。
然而“猫有毛兮毛有枝,本喵在哪你不知。”
猫的体积定义并非显而易见的,主要有两个困难:
猫的表面是凹凸不平的,那些凹陷和缝隙怎么算?客观标准是什么呢?
喵是测不准的。理论上来讲喵的电子云可以想你时你在天边,想你时你在眼前,哪里算边界?
嗯。。化学家出场了。。。
化学家测猫大法:
把一个直径一定的毛线球用一定力量按在喵体表滚一遍,把毛线球与喵接触的内表面轨迹包括的空间的体积视为猫的体积,并称之为Van de Waals cat volume .(好吧。。。我知道这不叫Van de Waals体积。。但是这个体积的实际名字土掉渣了。。哪有Van de Waals高大上。。。)
如下图。
这一体积定义包含两个要素。毛线球的直径和按在猫身上的力量,前者决定了凹陷和缝隙算与不算的体积和形状标准——毛线球放得进就算,否则不算;后者决定了猫边界的标准——和毛线球之间的作用力达到某一值为准,啥啥电子云都不好使,就看力的大小。通过改变毛线球和力量的大小,可以控制猫体积的精细程度。究竟多精细不重要,重要的是可以定义一个体积的客观标准。
=============================
仿照这一定义,我将我测得的猫体积定义为 Van de Bars cat volume。。。如下图。。。
准确来说,是一个直径相当于激光束粗度,无限长的bar在猫表面滚过定义的猫体积。。。你看。。。我测的体积也是有一个很有道理的定义的嘛。。。。
同时我想强调,相对于其他回答,该方法对猫毛可以有很严格的处理,详见supplemental materials中对猫毛的讨论。
===============================
我认为实际测量中Van de Bars 猫体积和我们一般认为的猫体积差异并不大。
比如看下图
E为克莱因猫,虚线部分在猫体内。。
对于碗状猫(bowl cat),Van de Bars 猫体积确实会把猫肚子下面那块空间误算做猫体积的一部分。但是对弓状猫(bow cat)、椅状猫(chair cat)的测量都是准确的,因为光线可以从图上箭头的角度穿过。甚至小昭猫(shaw zhao cat)这个我本来觉得挺奇葩的形状下其实并没有任何问题。这样一来,Van de Bars 猫体积在多数情况下和我们一般认为的猫体积的区别也就仅限于耳廓内的空间、个别身体缝隙之类的光穿不过的死角。。。我觉得还是能接受的。。。
为了尽量避免碗状猫对测量的影响,我们要大力鼓励猫咪充分 stretch their limbs. 这也提示我们,爱护猫咪对我们蓝星人也是有益的。。。所以爱护猫咪,人人有责,no cats should be convex!!!
=============================
综上,我设计了一种测量Van de Bars 猫体积的Monte Carlo测猫法。我觉得这是目前回答里最猫道最优雅的。。。因为它保障了猫咪伸展身体、弄干身体、不受恐吓、自由站起、躺下、翻身的权利。。。而且对猫体积有严谨而实用的定义。。。
=============================
Supplemental materials:
Monte carlo 测猫法的推理:
把猫装进体积为V的盒子,在盒子内 uniform randomly 取N个 independent and identically distributed (i.i.d.) 的点组成样本,记为 SAMPLE = {(xi, yi, zi) | i in range(0, N)}。
定义如下 function:
I(x, y, z) = 1 if (x, y, z) in CAT else 0
(即确定一个点是猫还是非猫)
假设猫体积(V_cat)不变,且猫的运动与取点不相关(即猫既不接飞镖也不躲飞镖,见评论区知友讨论),则I(x, y, z)具有如下分布:
I(x, y, z) = 0 with a probability of 1-V_cat/V_box
I(x, y, z) = 1 with a probability of V_cat/V_box
与猫运动与否不相关。
根据这一分布I(x, y, z)的期望值是V_cat/V_box.
{I(xi, yi, zi) | (xi, yi, zi) in SAMPLE} 是一个服从上述分布的 i.i.d. 的sample。
根据大数定理(law of large numbers), sample mean almost surely converges to expected value. 所以可以用 sample mean 估计期望值,即:
V_cat/V_box ~= sum(I(xi, yi, zi))/N
记M为在猫体内的样本点数量,则
V_cat/V_box ~= sum(I(xi, yi, zi))/N = M/N
所以V_cat ~= V_box * M/N
关于猫毛的讨论
上述方法等价于把猫边界定义为猫体表透光率显著不同于空气以至于足以使得sensor检测到差异的位置。可以想象这应该包括了猫毛,而且是不受压迫不变形的猫毛。
我认为这也是该方法的一大优势——这是真正的无损测真猫,而不是测 a rat-like creature that lives inside a cat (见 @苍原雪在本问题下的回答)。。。其他方法,包括彩虹糖,都是有压迫的。实际上彩虹糖法测的是彩虹糖的形状和大小、彩虹糖与猫接触处的压强定义的Van de Waals cat volume. 因为这一压强,长毛猫的测量可能和我们预想的含猫毛体积有较大区别。
Van de Bars 猫体积和其他猫体积的对比 (不适用于克莱因猫)
VS 真 猫体积
这里真猫体积指刨除一切空隙的猫体积。显然,Van de Bars 猫体积 >= 真猫体积。所以Van de Bars 猫体积是真猫体积的一个upper bound. 可惜的是它们之间的差是没有任何保证的,比如口袋猫。
VS Van de 毛线球 猫体积
我觉得Van de Bars 猫体积应该是与bar同样直径的毛线球定义出的Van de 毛线球猫体积的upper bound,但是我没仔细证。。。因为比如bowl cat这样的存在,它们的差同样是没upper limit的。。。
VS Convex Hull (附夹逼测猫法)
一个set的convex hull 是包含这个set且convex的最小的set。如图3和下图。
易知Convex hull 猫体积 >= Van de Bars 猫体积 >= Van de 毛线球猫体积 >= 真猫体积。对于convex猫,因为猫本身就是convex的,所以猫和猫的convex hull是同一集合,所以Convex hull猫体积 = 真猫体积,所以convex cat 的真体积 = Van de 毛线球体积 = Van de Bars体积 = Convex hull 体积。。。。。。夹逼测猫法。。。。convex 猫真好测。。。各种体积都一样。。。all cats should be convex。。。
关于克莱因猫
准确讲克莱因猫应该是克莱因猫皮(Klein Cat Skin),因为这是一个曲面而不是实体,而且这个曲面不能把空间分为内、外互不连通的两部分,所以也无法把克莱因猫体积定义为克莱因猫皮围成的空间的体积。仔细看Fig. 6 E 的话,克莱因猫“体内”的空间可以通过尾巴-食道-口和外界相通。所以严格讲,克莱因猫无体积。
但是这并不妨碍我们继续强测克莱因猫的 Van de 毛线球体积和 Van de Bars 体积,只是不同于之前可以把这作为真猫体积的近似,现在我们必须将其作为一种独立的体积定义使用。
在克莱因猫上 Van de Bars 猫体积比 Van de 毛线球猫体积鲁棒。因为当毛线球小到克莱因猫可以吞下去的时候,毛线球会沿着口-食道-尾巴通路把喵“体内”滚个遍,然后 Van de 毛线球体积为零。。。而 Van de Bars 体积因为使用的是无限长的bar, 所以即使bar直径再小也无法access喵“体内”的空间。这允许我们用较细的bar来提高测量准确度而不必担心体积忽然降为0.
=========下面是原答案===============
物理学家测猫法:取一只半径为r的真空中的球形猫,体积等于4/3*πr^3
数学家测猫法:把猫装进已知体积为V的盒子,在盒子内均匀取N个随机点,其中M个在猫体内,猫体积近似为VM/N。
生物学家测猫法:把control猫装盒子,塞了10次都塞进去了,把实验猫装同一个盒子,塞了10次只进去两次,所以,猫多大我不知道,反正显著大于control猫。
原文发布时间为:2016-09-04
本文来自云栖社区合作伙伴“大数据文摘”,了解相关信息可以关注“BigDataDigest”微信公众号