变与不变

 

曾几何时,社会上流行着这么两句话。一句是说社会变化快的:“这个年代什么都在变,唯一不变的就是变化本身”。还有一句是说社会上的假东西很多:“这年头,除了骗子,什么都是假的”。

这样的表述多少有些诙谐,然而还是很令人回味的。

仔细思考,这表述虽然有些tricky,然而却是很好构造的。这与数学上的不动点理论,有着某种类似。

有这样一个问题:

假如你用一个周末去爬香山。周六的时候你从早上7点开始上山,到了下午7点的时候你上到了山顶。于是,你就住在山顶了。周日的早上,你从7点开始沿原路下山,到了下午7点的时候你到了昨天的起点。那么,你会意识到么:在你上山和下山时,必有同一时刻你处于同一个地点?

正面思考这个问题不是很容易。然而,稍稍换一个角度就迎刃而解了。假设你从山下7点开始上山,晚上7点的时候到达山顶。想像在同一天,我从山上7点开始下山,晚上7点的时候到达山脚。如果我们走的是同一条山路。那么我们必定在某一时间相遇。而相遇就意味着我们在同一时刻处于同一地点。

这就是数学上不动点的一个简单应用。我觉得其趣味性比其理论性似乎更加重要。

抽象一点的例子是:设有两个一元连续函数f(x)和g(x)。它们的值域和定义域都是[0,1]。那么可以肯定,一定在定义域内存在某一点y,使得f(y)=g(y)。证明也和上题类似,只需要考虑函数的图像,他们必然相交。

再举一个有意思的例子。有两张一样大的正方形纸片。将其中一个平辅在桌上。把另一个平辅在第一张的上面。让我们假设他们之间的点有一个一一对应关系。现在把上面的纸拿起来,揉成一个纸团。然后随意将纸团扔在第一张纸的上面。只要保证纸团的任一部分不在平辅纸面的外面。那么,纸团上必有一点仍和平辅纸面中的原来那一点保持着原有的一一对应关系。换句话说,纸团上必有一点,仍然在原来那一点的正上方。

—————————-

如果你有更多的关于不动点的现实的例子或其简单易懂的理论,亦或对我的表述有所改进。请回复告之。谢谢。

发表在 数学的精神 | 一条评论

小虫子与太空旅行

问题:a bug on a string

20040930001

     1. 问题描述

     有一条长为1m的绳子,其一端有一只小虫。小虫以恒定的对地速度1cm/s向绳子的另一端爬行。小虫所在的绳子的一端对地静止,另一端以对地速度10cm/s拉伸。整个绳子的各个位置上,都均匀伸展。小虫的爬行和绳子的拉伸是同时开始的。试问:

    (1). 小虫子会到达绳子的另一端么?
    (2). 如果你认为上一个问题的答案是肯定的,那么请计算出小虫爬到另一端的时间。

     2. 分析


     首选要明确的是:小虫的对地速度(v)应为其所在处的绳子的速度(w)与1cm/s之和。这样小虫会越走越快,有可能到达另一端。

     小虫所在处的绳子的速度与该处到起点距离(x)和总绳长的比有关,设此时距开始t秒:


w=frac{x}{100+10t}times 10    (1)

     这样一来小虫的速度v就可以表示为:

v=w+1=frac{x}{10+t}+1    (2)

     这个表达式一出来,剩下的就是解方程了。我们知道,当小虫到达另一端时,其速度应为11cm/s。于是有:

10=frac{x_{text{终}}}{10+t_{text{终}}}

我们得用v={dao{x}}/{dao{t}}对式(1)进行整理:


frac{dao{x}}{dao{t}}(10+t)=x+10+t

两边对t求导:


frac{dao{^2x}}{dao{t^2}}(10+t)+frac{dao{x}}{dao{t}}=frac{dao{x}}{dao{t}}+1

此式即可化为一个很简单的微分方程:

frac{dao{^2x}}{dao{t^2}}=frac{1}{10+t}

两边对t积分,即可得出v–t之间的表达式:


v=ln(10+t)+C

由于t=0时v=1,可以确定常数C=1-ln(10)。于是:


v=ln(1+frac{t}{10})+1

考虑终点的情况v_{text{终}}=11,有:


10=ln(1+frac{t_{text{终}}}{10})

因此,用时为10~(mathrm{e}^{10}-1)approx220255(text{s})approx61(text{h})。

将此式代入式(2)可得:


x_{text{终}}=100(1+frac{t_{text{终}}}{10})=100~mathrm{e}^{10}approx2202647(text{cm})approx22(text{km})

因此,此题的答案是:小虫可以到达绳子的另一端,需要用时约61小时。

     3. 由此及彼

     此题的计算对于一个学习过高等数学的人来说,不是一件很困难的事情。然而,如果你仔细回想小虫子爬行的整个过程,是不是和宇宙膨胀很类似呢?宇宙膨胀的事实,是通过观察天体,发现所有的天体都在远离地球而确定的。当我们站在这道题目中所说的绳子运动的一端时,我们会发现,在开始后的一段时间里,绳子上的每一个点以及小虫都在远离我们。而最后的一段时间里,绳子上的所有点仍旧在远离端点,而小虫却在靠近我们。我们可以计算一下小虫相对我们静止时的时间tapprox81021(text{s})approx22(text{h})。这也就是说,小虫有将近65%的时间是在靠近我们。

     上面的描述不就是对太空旅行的一个很好的模拟么?可以想像,若一个恒星以光速远离我们,我们若用十分之一的光速向其行进,那么在开始的三分之一的时间里,我们看到的却是恒星继续远离我们。如果我们发现恒星相对我们已经基本静止,那就说明我们还需要两倍的时间才能达到。当然,这里的讨论没有涉及相对论,也许深入下去的讨论会更有意思。

发表在 数学的精神 | 留下评论

逻辑与理性(四)

现在是时间讨论一下年青人和门后的老虎这个问题了。

很多人认为这不是一个悖论。我不想说服谁,我在这里把这个问题做一个变形,以使得其看上去更想是一个悖论。当然,我自信我的变形使得变形后的问题有原问题是同一个问题。我给出的是一个命题和证明的形式。

 

命题

已知:有5个门,其中有且只有一个门后有一只老虎。请顺次打开5个门。

求证:在打开有老虎的那个门之前,你是可以知道那里面有老虎的。

 


证明:使用反证法。假设我无法知道里面有老虎。

如果老虎在第5个门内,那么我会在打开前4个门后判断出老虎在第5个门之中。那么与假设矛盾。所以老虎不会在第5个门中。

如果老虎在第4个门内,那么,当我打开前3个门后我会想,老虎是不会在第5个门中,所以我就知道一定在第4个门内,这也矛盾了。

其他各个门的情况都一个,即老虎不在任何一个门后。这与已知矛盾。

由此可以证明你是可以预知老虎是否在你要打开的那个门后。

 

这个命题和证明看上去都没有什么问题,但它的结论和我们的常识严重相悖。

很多人会为这是否是个悖论而急论,也有很多人为解决这个悖论而苦恼。无论怎样,这都是一个有意思的题目。我个人更倾向于这是逻辑自身的问题,即使有很多人会认为这是自然语言的不完善造成的。正如我开篇说到的那样,理性是逻辑的存在方式。对逻辑的反思就是对理性的理性思考。

逻辑的悖论会给人们带来痛苦,驾驭它的一定不是理性本身。

(希望在找到合适的话题后,能够继续讨论。)

发表在 数学的精神 | 留下评论

逻辑与理性(三)

海盗分金子的问题不是我自己独立解出来的,然而其结论却很有意思,是很值得回味的。其实一般的人如果从现实的角度出发思考这个问题,他会觉得每人平均10两是分析的起点,但此后就无法进行进一步的推理,因为这样的分析太现实,和个人的因素有很大的关系。然而只要你注意到题目中所提到的,所有的海盗都是智力超常的数学家,他们会一步一步地推理出自己所需要做的决定,也就是说,在“海盗是理性”的这个前提下,事情的发展没有任何不确定性。而这一点,正是和现实生活最相悖的地方。

还是让我们先看一看这道题的解。

为了叙述方便,我们将按海盗威望排出的顺序给海盗编号,威望最高,也就是第一个提出分配方案的海盗称为1号,以此类推。

 

我们先考虑这样一种情况,那就是如果最后只剩两个海盗的情况。第9号海盗会把所有的金子分给自己,并在投票中选自己一票。这样,其方案就以至少半数而通过。由于第10号海盗就会想,这样的情况对自己是不利的,因为在第8号海盗提出方案时,只要8号给自己一点好处,自己就不能不支持其方案。这样,在剩三个海盗时,8号就想到了10号会基于这样的考虑,于是8号想要方案通过,就必须给10号1两,自己99两。这样,8号的方案定会由于10号的支持而通过。但此时,9号就陷入了最不利的情况。因此,他必定需要支持7号,以防止8号做出对自己不利的分配。7号要想方案通过,就需要给9号1两,自己99两,这样,就会因为9号的投票而使方案顺利通过。

讲到这里,结果应该很清楚了。1号要想方案通过而且自己获利最大,就需要给3号、5号、7号、9号各1两,自己便可得96两。而其方案,又会因为上述几人的支持而以半数通过。

这个结果和平均值10两具有巨大的差别。然而我们现在再考虑一下200个海盗分这100两黄金的情况,结果更有意思,那就是1、3、5、……199这100个海盗每人分得1两。当然,此时对于1号海盗来说,这简直就是保命的做法。如果此时我们再加一个人呢?估且称之为0号海盗,他第一个提出方案。我想,他的方案必定还是这样,否则他就没有命了。当然他也可以把金子分给2、4、6、……200这100个海盗,他的方案仍可以被通过。如果再多一个称之为-1号的海盗呢?情况和0号是一样的,因为有202个海盗,100个有金子的会支持,加上自己刚好半数。

再来一个-2号吧。这时需要有102人支持才能通过。可这时无论他把这100两分给谁,这100个人和他自己以外的任何人都没有支持的必要。假如他把金子分别给了1、3、5、……199这100个人,他们自然会支持。问题是0号和-1号是否会支持呢?由于他们两个人无论支持与否对自己的利益都没有影响,他们可以支持也可以不支持。即便-2号没有通过,他们自己也都有可通过的方案,他们是不是会权衡杀死-2号和自己举起手这两件事之间的得失呢?显然,这里就和利益的思考有关。我们就认为他们不会举手,这样-2号就必死无疑了。

如果有-3号呢?他同样需要102人的支持才能活下去。除了拿金子的100人和他自己,肯定支持他的应该是-2号,这是毫无疑问的。

-4号需要103人的支持,然而他最多也只能得到101票,因此他会死掉。

-5号在得到必得的101票后,还能再得到-4号的1票,但已经与事无补。

-6号需要104票,可他只能得到101+2=103票。

-7号就幸运了,他需要104,除了必得的101,他还有-4、-5、-6的支持。

因此可以继续分析,得以生幸免的是0、-1、-3、-7、-15、-31、……-2n+1号。

如果有500个海盗,真正可以生还的是-255号,在他以前的44个海盗必死无疑。

(分析源于水木IQDoor精华区的一篇文章:海盗分金子)

 

理性就是这样,一旦出发点确定了,后面的一切都会沿着逻辑的方向前进。这也是决定论者的基本观点吧。如果我们承认自然规律都是前因决定后果的话,宇宙中的一瞬将充分地决定下一瞬,我们的世界就是一道数学题而已。前面的这两句话,必然至少有一句存在着问题,因为第二句的结论和许多人的想法是不一样的。如果说不确定性是客观存在的,那么逻辑是否能够描述之呢?抑或逻辑并不是我们想象中的“前因决定后果”那样的简单?我无法更出答案,然而这肯定是一个深刻而有意义的话题。

接下来的文章里面,我们将看到逻辑自身并非白玉无瑕,集合论中的悖论直指数学的根基,我开始有点害怕。

下面说一个悖论,但也有很多人不承认它是悖论(反正目前我是承认的)。我先说出来,你来看看是不是。我可以做一些尝试使你相信它是个悖论,但这是下一次的话题。

 

(又是一个公主的爱情故事……)

有一个国王,他有一个女儿(不许笑)。她爱上了一个年青人(请严肃)。她能和他永远在一起。于是她把自己的想法告诉了国王。国王说他只要能通过考试,就可以让他们成婚。

第二天,年青人被叫到了王宫。国王在他的面前放了5扇门。国王说:“请你顺次打开这5扇门。请注意,在5扇门的后面有一只老虎,而且在你打开有老虎的那扇门之前,我保证你不会预先知道里面有老虎”。

年青人是一个自学成材的数学家,他开始分析国王的话……

“如果老虎在第五个门里,那么,当他打开前四个门后发现没有老虎,那么他就可以断定老虎在第五个门里。但国王说在打开有老虎的门之前是不会知道的,因此老虎不会在第五个门。那老虎会在第四个门里么?根据同样的理由,也不会。于是,天呀,所有的门后都没有老虎。国王对我真好呀……”

于是,年青人高兴地去开门了。可谁想到,老虎在他打开第2个门后,就窜了出来。

……

国王的话应验了,年青人的推理也没有问题?为什么会这样呢?

发表在 数学的精神 | 留下评论

逻辑与理性(二)

 

先让我们看一看上次的题的解答吧。说到这个解答,还要感谢我的大学室友王宇。正是在他的启发下,我才得到了这道题目的答案。

 

我们先假设只有一只病狗。那么这只狗的主人看到的,将是49只健康的狗,但由于必有生病的狗,所以他马上可以断定自己的狗是生病的。于是,第一天,他就会将自己的狗打死。这种情况比较简单。

下面我们来考虑有两只病狗的情况,

其中任一只病狗的主人都会看到有一只病狗,这时他就会进行分析。如果他自己的狗没有生病,那么,他所看到的那只病狗的主人会在今天把狗杀死。换句话说,如果那个人今天不把狗杀死,那只有一种可能,就是自己的狗也是病狗。因此,就会出现两个人都在等着对方把狗杀死。但两个人都没有杀死,这样,到了第二天,他们一定可以判断出来,自己的狗是有病的。

通过对两只病狗的分析,我们已经可以了解到病狗主人的推理过程,其结果就是:有一只病狗,就会在第一天杀死;有两只病狗就,会在第二天杀死;以此类推,有几只病狗就会在第几天杀死。所以,原题中共有三只病狗。

 

这个题目对于有一过定数学推理训练的人来说,也许不是一个很难的题目。然而做出来看你会感觉到,这个村的人都太聪明而且活得挺累。如果就此说是理性的弱点,肯定会有很多人反驳。毕竟这个题目中的很多条件是与生活中的实际情况相悖的,顶多就是以资娱乐。


说到数学的抽象与实际的生活,似乎经济学是一个挺好的例子。我没有受过正统的经济学的教育,但也知道,经济学中充满了各种“模型”,这也是许多经济学家讨论问题的起点与归宿。经济学中最经典的假设就是“人是理性的”。这个假设基本就是我现在要讨论的问题。除了经济学上的理性是我们所熟知的以外,政治上的民主也是我们喜闻乐道的。当然,在这里我只想讨论纯粹意义上的民主,而不是现实政治生活中的民主。这里有个题目正好可以说明问题。

 

有十个海盗,他们抢到了100两黄金。这些黄金以两为最小单位且不再进行分割。十个海盗按照威望的高低,先后提出一个分配黄金的方案。所有的海盗根据所提方案,用理性的方法分析个人的得失。此后,集体进行投票。当一个方案有半数或半数以上的人同意,就可以按此方案进行分配。否则,将把提出方案的海盗丢进大海,由剩下的威望最高的海盗提出新的方案。

可以明确的告诉你,第一个提出方案的海盗肯定有能够被通过的方案,请问这个方案是什么?

如果不是十个,而是200个海盗,情况又会怎样呢?

 我们不得不叹服的是海盗高度的民主政治生活,然而做出答案之后,你又会不得不叹服这些海盗高度的逻辑推理能力。这个题目,是对现实生活的一个很近似的模拟。我们可以通过一个比较不可思议分配方案来反思我们所推崇的理智与民主。话又说回来了,这个题目毕竟也对现实生活进行大胆的抽象或者说是模型化。即便如此,我们仍然可以从对这个题目的讨论中收获很多东西。

发表在 数学的精神 | 留下评论

逻辑与理性(一)

 

人是理性的动物,理性是逻辑的存在方式。数学就是逻辑的全部。

 

只有诗人的世界是颠狂的,只有数学家的世界是消沉的。

 

我不想说纯粹的理性是脱缰的野马,但至少它总是带给人们痛苦。我热爱数学,我推崇理性,但现在的我在用理性反省理性。我不认为理性可以自觉,因此反省本身不应是纯粹的。理性是完美,然而它不是开放的,完美再往前一步便是荒谬与丑陋,正如真理和谬误一样。说教总是枯燥的,思考一些小问题会有更具体的体会。

 

一个村子里有五十个人,每个人领着一条狗,而这些狗中有一部分病狗(不少于一条)。假如有如下条件:

1.狗的病不会传染,也不会不治而愈。也就是说病狗的数量一直不会改变;

2.狗的主人不能看见自己的狗是否有病,而必须通过别的狗是否有病来推断自己的狗是否有病;

3.一旦主人发现自己的狗肯定是一只病狗,就会在当天开枪打死这条狗;

4.病狗必须由它的主人亲自动手开枪杀死。

如果他们在一起第一天没有枪声、第二天没有枪声、第三天发出一片枪声,问有几条狗被打死?

 

这个题目本身对问题做了一些限定,这就使得很多情况和我们的现实不相符。如“狗的主人不能看见自己的狗是否有病”等。然而,这些就是所谓的“游戏”规则。但如果按着这个规则做出这道题,做题者必有两点体会:一是这种情况现实中是不可出现的,二是狗的主人都是天才数学家且不会判断失误。

其实这两点体会之间的关系应该是这样的:狗的主人必须都是天才数学家且不会判断失误,但这样的人是不会在现实中出现的,所以题目中所述情形,也就不会出现在实现之中了。

发表在 数学的精神 | 留下评论

开始转文章

转一些原来在smth的文章。本不想这样做,但害怕写过的东西会被丢下,还是放过来的好。
发表在 未分类 | 留下评论

公平

人人都在寻找公平,人人都在咒骂。世界上的公平只有一处,那就是死亡。然而,人人都对它感到恐惧。人就是一个悖论。

发表在 杂感 | 5条评论

戏说计算机与哲学(一)

其实计算机并不只是technical stuff。人对自身的思考,总会投射到别的事物上。

1.  如果你问计算机生命是什么?答案会很简单:

    while(1)
    {
        something without break and deadlock;
    }

    是呀,人们都称这个是“死”循环。其实呢,使得你的系统能够不停运转的idle,也不过就是这样的“死”循环罢了。所以,生与死并没有一个绝对的边界。正是这样的死循环,使得你的PC得到永生。相反地,任何正常的,非“死”的进程,都有终结之日。生死之交易,由此可见一斑。        记得刚上初中的时候,老师作过这样的比喻。他说人类制造的其他工具是人类四肢的延伸,唯有计算机是人类大脑的延伸。那节课的主题就是“是电脑,还是计算机”。有人说计算机的神奇并不在于它的计算能力,而是因为它有判断的能力,而这也是作为工具的计算机区别于其它一切工具的特征。我并不反对这种观点。然而我更希望人们看到,循环是计算机中最具活力的地方。看看每一个Windows程序,哪一个不是都有其自已的“消息循环”。如果有coding基础的人都可以想一想,几乎每一个feature无不是处在一个或大或小的循环当中。循环往复,而非简单重复,计算的乐趣与人生的乐趣有了一个共同的落脚点。
    每一个人的生命,从他开始的一天就开始了各种循环。昼夜交替,四季轮回,是小循环;从小到大,从年轻到年迈,是每一个人要走过的大循环。循环,是人生共性的东西。所以回答生命就是如上的循环就不那么奇怪了。然而,每个人的生活都是不一样的。即使是朝夕相处的人们,也都有着属于自己的,与他人迥然不同的生活。而这正是因为每个人的循环当中,有着无数的if。每个人在相同的循环当中,走向不同的分支。对算法有了解的人来想一想,每一个让人感叹的优美的算法,不也通常就是这种循环中带判断的结构么?写算法的人和写小说的人都是在讲述一个不完全真实的故事,只是方法和载体不同罢了。人与人之间,真没有什么不同的地方。

2.  天下大同就是IUnknown。

    其实不只是人与人,世间万物都有相通之处,人们称这个过程叫做抽象。记得很多年前知道一种东西叫TObject,一个让人不太能找到感觉的名字。然而,当你见到IUnknown时,就不免浮想联翩了。在COM的世界里,所有的东西都源自IUnknown,而它只回答了三个问题:什么时间出生,什么时间死亡和“我是谁”。其实真的不只是人们会向天发问:“Who am I?”。你的计算机也在不停地呼喊:“QueryInterface”。是呀,生死总不是在自己的掌控之内,在一个人的逻辑世界里,生与死的问题只能是公理,这意味着你并不能对它说三道四。而“我是谁”这样的问题,却有着千万种的回答。也正是不同的回答,构成了丰富的世界。而万物的源头,永远都是Unknown。我不信上帝,但我勇于面对这个现实。

发表在 杂感 | 4条评论

From alias to full name (ASP.NET)

尝试

      添加引用System.DirectoryServices.DLL

      Using System.DirectoryServices;

      假设你的登录名是domainuser

      添加代码:

            string Alias="domain\user";

            DirectoryEntry myDE = new DirectoryEntry("WinNT://"+Alias.Replace(‘\’,’/’));

            string fullname = myDE.Properties["FullName"].Value.ToString();

            在Windows Application的项目中,一点问题都没有.

            在ASP.NET中,不行.

 

Double Hop

           第一个hop当然是从Client连到ASP上,但从ASP调用DirectoryEntry是以ASPNET的身份登录的.但ASPNET是一个本地用户,访问域资源的能力很有限.而访问域资源需要Primary Token,也就是密码明文.但让ASPNET获得Primary Token有很大的安全问题,这时要想完成另一个hop,就需要Impersonate.让ASP系统来传递需要的信息.

 

Web.Config

           在ASP中设置Impersonate只需要在Web.Config里设置impersonate="true"和authentication mode="Windows".

更多信息:http://msdn.microsoft.com/library/en-us/sds/sds/troubleshooting_authentication_problems_on_asp_pages.asp

 

发表在 计算机与 Internet | 留下评论