2011年11月15日星期二

假如给我三天黑暗

假如给我三天黑暗 以下的内容,经过删改,已经发布在果壳网 上,转载请注明出处。商业使用请联系果壳网。 ------------------------------ 看到Steed的一篇文章《2012真的会有连续3天地球是黑夜吗?》 辟谣了“科学家终于确定了:2012.12.21地球会有连续3天是黑夜,是地球的换纪时刻。玛雅人�的并不是世界末日,而是" 2012年12月21日的黑夜来临, 12月22日的黎明不�到�"但3天后,差不多是圣诞,白天就会到�! ”的说法。但是作为一名死理性派,我们能够容忍仅仅粉碎一枚谣言吗?我们要算! 出题 - 要求1:找到2012年12月21太阳落山以后连续出现3天黑暗的地点。 - 要求2:如果无法找到满足要求1的城市,则找出2012年某地太阳落山以后连续出现3天黑暗的地点。 工具 地球上最强大的计算器之一:Wolframalpha ,这是iPhone 4S里人工智能Siri幕后的大脑。通过www.wolframalpha.com,我们可以计算很多东西,包括你的各种作业。 下面我将一步一步演示如何解决一个问题的思路和方法。不失一般性,这里只展示了北半球的计算过程,南半球的情况请自己推演。 方法 首先查找2012年的冬至日,冬至这个词不知道怎么说,查字典 ,得到winter solstice,在wolframalpha上查winter solstice in 2012 得到December 21, 2012。考虑到对称性,地球上是不可能有地方满足“要求1:2012年12月21太阳落山以后连续出现3天黑暗的地点”,只能看看2012年有三天极夜的地方是哪里了。 3是个好数字,可以对称的,冬至日算1天,之前之后各自1天,所以就是要找到2012年12月21日,20日,22日三天是极夜,而在2012年12月19日和23日有日出的地方。要获得纬度与日出时间之间的关系,可以通过立体解析几何的方法推导公式,不过还需要考虑到地球绕太阳自转的轨道,想想觉得太复杂了。还是先站在巨人的肩膀上,偷看巨人的答卷好了。 仍然使用wolframalpha,这里需要引入函数式的思维方式,就是说,不一定了解计算过程,只要知道输入和输出即可。 首先测试一下输入是否符合规范,搜索日出sunrise ,Wolframalpha给出了今天北京的日出时间,再查查sunrise in dec 21,2012,也有输出是7:34am。这样很好。 再试试不同地点的输入,比如查查莫斯科sunrise in Moscow in dec 21,2012,他们8:59点才天亮啊。由于需要经纬度,所以要测试下带有经纬度的输入,先查查Moscow latitude and longitude得到55° 45'N, 37° 37' 12"E,那么sunrise at 55° 45'N, 37° 37' 12"E in dec 21,2012呢?成功输出。 考虑到北极圈是北纬67.5度,说明冬至日高于此纬度的一定是极夜,看看没有日出的输出是怎样的?查查sunrise at 70N, 0E in dec 21,2012 得到(never rises) 这样一个解决问题的函数基本确定了。它的输入格式是"sunrise at 纬度,经度 in dec 21,2012",输出是日出时间或者(never rises)。于是找到3天黑暗的问题重述为: - sunrise at 纬度,经度 in dec 19,2012,有日出, - sunrise at 纬度,经度 in dec 20,2012,无日出, - sunrise at 纬度,经度 in dec 22,2012,无日出, - sunrise at 纬度,经度 in dec 23,2012,有日出。 考虑到北极圈,从67.5N开始找起,发现4个日期点都是极夜。而北纬67.4度满足要求: - 2012年12月19日,北纬67.4度,东经0度,日出11:51 - 2012年12月20日,北纬67.4度,东经0度,无日出 - 2012年12月22日,北纬67.4度,东经0度,无日出 - 2012年12月23日,北纬67.4度,东经0度,日出11:53 再往下0.1个纬度找找呢?北纬67.3度在2012年12月23日的日出时间是11:36am,看来就是在67.4度附近了。纬度不低于北纬67.3度,不高于67.5度。 在wolframalpha上查到地球的平均半径Earth average radius是6367.5 km,那么0.1个纬度平均是6367.5km *(0.1* Pi/180)=11.113km。看来我们的范围可以限定在一个宽度为22km左右的带内。已经足够高了。 刚才一直使用的是东经0度,下面再测试不同经度。注意小心国际日期变更线。选择180°W,90°W,0°E,90°E和180°E分别计算四个日期点。结果都是一样的,赞!这可是一个长度为6367.5km *cos(67.4/180*pi)=2447km,宽度仅为22km的区域啊。 结果 在北纬67.3度到67.5度之间这个宽度为22km长度为2447km的区域内,有一些地区将会经历且只经历3天极夜。 讨论拆开黑箱 太阳入射光与地球赤道平面之间的角度,叫做太阳的赤纬(the declination of the Sun),记做δ�。太阳赤纬一年中随着季节而变化,夏至时是+23°27',冬至时为-23°27'。春分和秋分时为0°。 凌� at the Chinese Wikipedia [GFDL or CC-BY-SA-3.0 ], from Wikimedia Commons 由于地球绕太阳运转的轨道并不规则,要计算太阳的位置很麻烦,于是人们推出一个模型,叫做平太阳。地球绕平太阳以圆形的轨道匀速运动,转一圈是365天。在1969年Copper提出一个公式用来计算太阳赤纬角: δ= 23.45 * sin(2*pi*(284+n)/365) 式中的n是日数,1月1日为n=1,对于闰年n的计算还要再复杂些。 但这个模型太过于简洁,地球毕竟是绕着真太阳在运转。于是真实情况和平太阳的模型是有差别的,历史数据 可以通过测量获得。二者之间的误差可以通过实测数据与模型预测数据的差值求出,然后通过傅立叶变换进行外推拟合。通过wolframalpha也可以随时查询当前的 太阳赤纬。 1971年Spencer,1976年Stine,1985年Bourges也提出过公式进行拟合,图中显示的是杜春旭等 用2009年的数据对各种太阳赤纬的算法进行了误差比较。比较准确的是Bourges的方法: δ= 0.3723+ 23.2567sin(wt) + 0.1149sin(2wt)-0.1712sin(3wt) - 0.7580cos(wt)+ 0.3656cos(2wt) + 0.0201cos(3wt) 其中 - w=360/365.2422 - t=n-1-n0 - n0=78.801+ [0.2422( year-1969)]- INT[0.25(year-1969)] 如果一个地方纬度是L,那么当地正午时分的太阳高度角e=L+δ,如果e上,转载请注明出处。商业使用请联系果壳网。 ------------------------------ 以下的部分属于继续吐槽,与果壳网的文章没有关系。 阳性科普 好吧,我承认计算极夜长短这个题目很无聊。我是想借此推广一下“阳性科普”,这只是个概念,这个概念也没有清晰的定义。我个人认为的“阳性科普”,是指多讲一些“世界是什么样子的”,相对而言,阴性科普,就是讲“世界不是什么样子的”。每一个科学传播网站都面临一个诱惑或者我认为的陷阱,就是与不科学的观点辩论和斗争。诚然,这是科普的重要组成部分,但是,在一个有相当多的人类仍然相信一个人可以把海水分开,可以死后复活的星球上,阴性科普是永远不可能“胜利”的,而且时间长久以后,会让我觉得有一点点的厌烦。 因此,我也在自己的twitter和微博里:“求各种科普贴,建议各位推友多做一些各自领域的阳性科普,医推们复习内外妇儿,程序员们讲解些精妙的算法,五毛们讲解马克思主义经典著作,公知们从自由主义解释起,文科生用平直中文说说,理科生不带公式说说……” 医学其实是下游技术,只有上游技术有些进展以后,才可能有所突破,还有就是上游的技术要“流”到下游,被医学界所认知以后,才能用到医学上。我还真是很需要各种领域的科普的。当一个概念科普给我,我还是能够迅速查找相关的文献进行学习。比如上文中,“赤纬”是Steed告诉我的,之前我真的不知道这个概念,不过一旦听说了找到相应的学习资料并非难事。非我技术专业之内的学问,查查维基百科,中文综述,中文文献和博士论文之类,也可以了解大概。确有必要的话,按图索骥找到相应的经典英文文献,也能省不少事情。 函数式的思维方式 上文中的计算方式,是直接调用的wolframalpha。函数式的思维方式,就是我前面所说的“站在巨人的肩膀上,偷看巨人的答案”。把大象放进冰箱需要三步,1)打开冰箱门,2)把大象放进去,3)关上冰箱门。对于解决问题而言,如果每一步都有现成的解决方案,其实并无必要深入到细节中去,即使需要深入到细节,也是逐层次的进入。对于一个过程,了解它的输入、输出,就可以开始应用了。如果原理再了解一些,则可以更准确和灵活的使用。 医学又是如此,绝大多数医生不知道为什么测血压时脉搏的声音会出现变化,但是大家只是知道,if 脉搏声音出现 then 所指压力是收缩压,if 脉搏声音消失 then 所指压力是舒张压。这就是个函数,F(脉搏声音)=血压。没有医生会在意这个函数与雷诺数之间的关系。 在数学软件出现以后,更可以进行这种函数式的解决问题了。我高二时参加数学建模竞赛的培训,老师列出了一黑板矩阵以后,说取个偏导,然后台下就都偏倒了,一片哀号,这可怎么解啊。那个老师很淡定的说,交给计算机啊,从那以后我才开始接触mathematica,好像当时还是运行在386上的4.0版本,由于缺个协处理器,貌似还有一些东西计算不了。再后来大学学点MatLab,更坚定了我这种思维方式,边缘检测?调函数;傅立叶变换?调函数…… 站在巨人肩膀上,我以为就是这样子做。 参考文献 1. Table of the Declination of the Sun: Mean Value for the Four Years of a Leap-Year Cycle 2. 一种高精度太阳位置算法

Posted via email from goldengrape's posterous

没有评论:

发表评论