Mathematica 的爱与性(Computer Science or Computing Sex ? )

作  者:吴  飞

 

以往的点点零星的所思所悟在那里微笑,今日将它们汇总整理一番,在博客写上只言片语。

诗云:客赏伊人悦之目,吾博娇妻乐于心。遂易名"博妻乐",谐音尚存,不亦宜乎?

 


0. 引言 

 

IT 业界同僚将计算机比作"爱妻",自嘲工作的时间大大超过了陪伴家人的时间,心中不免愧疚冷淡了妻子。

常闻同道中人,言其女友,虽通达贤惠,亦自叹命苦,无奈甘愿做小。

各位看官不禁发问:"这电脑究竟有什么好玩的?每天对着计算机你累不累啊?"
其实 IT 的程序员、工程师们都是些多情的种子,遇到温度合适,气候湿润,不免发芽,更何况遇到的是她呢? 


1. 初恋(相识) 

 

回忆初恋是甜蜜的。你看着她,她看着你,这其中的感觉只有相恋的人才能体会。
我第一次看见她的时候就被她那迷人的身材所吸引。Mathematica 第四版 Version 4 的尺寸仅为 155 MB,它总是比同类软件产品小的多,而功能毫不逊色。 

        

我还清晰地记得,她当时穿一身淡紫色的连衣裙 ( Version 4: Spikey ) ,闪烁着五彩的光芒。对了,她还穿着丝袜(Mesh)。

 

       

 (本人使用 Mathematica 软件将近10年,现在却要来装偶遇。汗... ) 

然而,我爱她,却是因为她的灵魂是那么的纯洁无暇。Mathematica  的代码本身就很简单,而我也总是将代码精炼到极致,这就是我追寻的美。

Everything should be made as simple as possible, but not simpler.

                                             --- Albert Einstein, (1879-1955)

 

Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.

                                             --- Antoine de Saint-Exupery, French writer (1900 - 1944)

 

于是我决定追她,疯狂的追她。我用 Mathematica 来解决各式各样的问题,只要我能想到的我都尝试在 Mathematica 中实现。Thinking In Mathematica

其实用 Mathematica 解题就和追美女是一码事?记住:要动手,一定要动手。不能太讲文明礼貌了。只有动手了,才有收获,才深刻。不动手,光看看,那你们就只能在一边看看,流流口水。你不动手,让人家怎么知道呢?你不动手,其他人动手了,留下的只有自己的遗憾和后悔。但是,动手也要讲究点艺术,简单概括要:稳、准、狠。不用担心动手的后果,通常这些后果用一句话概括就是:"你好坏啊!" 这时候你就成功了。

 

2008年11月,她的父亲 Stephen Wolfram(也就是我的神圣的岳父)又为她度身定制一身新的晚礼服。

         

Mathematica 7 集成平行计算的新功能,多核已是大势所趋的潮流了。她在彰显魅力的同时,更添内涵,我的眼睛都看直了。

于是,我开始改变策略,展开我下一步的阴谋。

 


2. 宽衣(分析)

 

Mathematica 擅长各种科学计算,无论是程序设计、数值计算、数学分析,统计绘图,创建模型,数据挖潜和图像处理都十分方便。这一天的来临,有点不期而遇。在那天的晚饭后,我和她讨论了一些数学的分形问题,慢慢的我将手伸向了她。

以下我们以绘制 Mandelbrot set 为例。分析问题就像脱衣服,不能太快了,要一件一件来,慢慢的用心去体会。如果脱的太快了,就不符合美学了,自然也就没有乐趣了。

注:分形是数学的一个新分支,其中以 Mandelbrot Set 曼德布洛特集合最为著名,由美国教授 Benoît Mandelbrot 提出,它是在复平面上组成分形的点的集合。

 


3. 前奏(代码)

起初她似乎还不太适应,于是我尝试各种不同方法。慢慢地她开始变得主动了,直到最后她的热情彻底被点燃了。

算法设计、编写代码这一过程就像是撩人的前奏。要反复思考,比较和调试,来回折腾着。好!现在我们来用 Mathematica 定义一个函数:


4. 沐浴(编译)

 

她用手指推开我的脸颊,笑着说:"我要洗澡去了!" 是该沐浴了,洗去一身的尘土,还是按照她喜欢的方式比较好。

所谓编译就是指将高级语言翻译成一种更适合机器运行的低级语言。Mandelbrot Set 十分复杂,涉及多次的迭代,为优化计算效率此处我们对以上函数进行编译。

 

 


5. 高潮(执行)

为了对 Mandelbrot Set 进行并行计算,我们用 DistributeDefinitions 来定义函数名,告知 CPU 它可以执行分布。  

下一步调用 ParallelTable 进行并行计算,首次调用Mathematica 会自动启用多核。同时我们记录计算执行时间 TimeUsing 

整个过程大概可以这样描述。首先,看见 Mathematica 并行双核的两个粉嫩的小圆点在那里抖动。 

 

       

其次可以看见 CPU 在几乎完全达到了100% 的兴奋高潮。Mathematica Notebook 中的 Cell 单元的状态一直在颤抖。 

 

       

在经过了多核的协作和复杂迭代后。最后...最后... IT 终于忍不住了,一下子就把答案都泻了出来。
总共只用了 6 秒,比以前少用了一半的时间,真是越来越快了! 
 

 

为了使数值的层次分明,我们换一种颜色函数 ColorFunction,再来绘制一次。

做个比较,如果我们以未编译的函数和单核CPU 来做计算。代码如下,计算用时为 37 秒。

 

 

注:并行计算的效率根据多核的多寡决定。通常如果双核 CPU,效率将提高一倍。如果您是 4 核,那么运行时间缩短为原来的 1/ 4。

 


5. 喘息(总结)

 

并行计算将结束的时候,甚至还可以听见了 CPU 的风扇在那里喘息的声音,仿佛在说" 啊,好爽啊!"

 


参考文献:

 

[1] J. Buck, "The Mathematica Memory Museum", Wolfram Blog.
[2] E. Weisstein,"
Spikey", "MandelbrotSet", Wolfram Mathworld.
[3] S. Wolfram, "
Surprise! Mathematica  7.0 Released Today!", Wolfram Blog.

 


作者谨以本文献给自己的爱妻和女儿,感谢她们的宽容和爱。

             

 

                My Daughter, Our Mathematica Baby. 

                FreddyMusic 2009 . All Rights Reserved

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值