几个月前,增编写个一个农历计算javascript程序,那是我的第一个农历程序。为了实现其中的算法,曾花费了好几个星期的时间研究天文计算相关的原理,当我算出结果之后,对程序的结果仍然没有信心。不过,在“春光”老师介绍《天文算法》一书之后,我认真阅读并翻译全书之后,我知道,我的算法基本上没有错误,但同时也认识到,天文学家们的算法的确高明,比我当时的算法好得多。如果你也对天文计算感兴趣,那就很有必要学习他们的先进思想方法。
当然,重要的是他们的思想方法以用相关的理论,而不一定是他们的计算结果。因为,《天文算法》一书是早期出版的,有些数据比较旧,造成精度不一定很好。如果你对计算精度要球特别高,可能需要更换一些数据,但数据的处理的思想方法及技巧是一样的。
国内不少网友对天文计算比较感兴趣,却又不知如何下手。问题出在哪里呢?为什么苦苦研究几个月甚至几年也没有进展?主要原因是国内有关的书籍太少,业余条件下没有机会学习到天文计算的理论。在我们国家,有不少机构对天文学有深入的研究,比如天文台、一些大学等,可他们不太愿意出版天文算法之类的书籍(这类书籍销量少,出版要赔钱的)。既然如此,就让我们自已想办法解决问题吧。
首先,我认为需要掌握一定的计算机程序设计技术,不要求很利害,但起码也要有几个月的程序设计经验。我如你不会程序设计,那你只能用Excel或计算器之类的工具来处理计算问题,那简直是在浪费你的生命。
其次,应掌握《高等数学》中的一些知识。比如:极限、导数、微分、积分、极值问题、求根问题、最小二乘法、向量数学等。当然,我们更多使用高中的《立体几何》、《解析几何》、《函数》、《三角函数》等有关知识。还应了解《球面三角学》里的几个公式。
其三,《数值方法》这类书籍是必须读的。
其四,需对物理学有所了解,尤其是运动学相关知识。当然,如果你想用数值积分的方法解决天文计算问题,《理论力学》甚至是《天体力学》也是有必要了解的。
对于多数具有大学学历的人来说,基本具备以上知识,也就是说,只要你有兴趣,就完全可以进行天文计算。从本质上讲,日月动动、行星运动主要使用“牛顿力学”及数学方法(如微积分),在牛顿那个年代,力学理论、数学理论、计算工具等都不可能和现在相比,在那个年代,就连“除法问题”主要是“教授”们才能掌握的!他们可以计算天体运动问题,我们为什么就不可以呢?只要有信心,或多或少可以解决问题。
相反,如果根本没有学过《高中数学》《高中物理》《高等数学》,我建议你还是花点时间学习一下(弄不好要花费一两年时间),否则,即使用算出了结果,也很难对你的算出的结果形成理性的认识,甚至是感性的认识也谈不上。如果你不想学习这些“无用”的东西,能不能实现天文算法,或许可以:通过阅读别人的程序。 |