Archive for 科学工作

改论文投论文

又到了年底,学期结束,教学任务完成。于是有时间一篇一篇改学生们的论文。这一周只经过一半,但已经修改完四篇文稿,投出去两篇,收到另外两篇论文的修改意见。

推特上有人说,由于接近圣诞假期,最近找审稿人都不容易,呼吁大家不要在节前投稿,到明年一月再说吧。这样更容易得到相对合理和公正的评审意见。

另外,手里有两篇难产的论文,都是在一个审稿人的不断坚持下修改了三轮,还不知道结果如何。不过回来想想,写这两篇论文的博士生都有一个共同点:固执。都是态度原因,让大改动,都是找理由变成小改;其它的内容能不动就不动。碰到一个同样“固执”和坚持意见的审稿人,不就死杠上了。博士生们个性不一,能力和情商的均衡发展真的很难找到。

2019年快结束了,从改论文投论文开始,到改论文投论文结束。科研应该还有些别的更有趣的内容 ......

发表评论

春秋笔法

最近大学里工学院更换院长(Dean),副校长(Provost)写了长信介绍新院长。信件结尾,总结了现任院长的过去八年,如下:

...

There will be other opportunities to thank Archie for his contribution not just to the faculty but University leadership more generally. It is important to acknowledge here, however, the significance of that contribution in making and sustaining the faculty’s outstanding international reputation. He has worked with colleagues to build a wonderful foundation for the future and we wish him well for the future.

说了三点:(1)当了多年领导;(2)保住学院名声未丢;(3)架构了未来(过去做的事情就不提了)。明显的“春秋笔法”啊。一个大学/学院,有一个有眼光有执行力的领导还是很重要的。

发表评论

Once upon a time in Brussels

布鲁塞尔往事,once upon a time in Brussels.

有时候会议合影还是很有意思的,这张 1927年在布鲁塞尔开的第五届Solvay国际物理会议,应该是诺贝尔奖获得者密度最大的一张照片了吧。

这堆物理学家的名字,合起来,简直就是上中下册的《大学物理》。

唯一的问题是,这个W Bragg,不知道是WH Bragg(父亲)还是WL Bragg(儿子),年龄不太好判断。反正两个人共享了X-ray diffraction的诺贝尔物理学奖。上阵父子兵。WH Bragg 在澳大利亚阿德莱德大学任教期间,开始了X-ray diffraction的研究,而儿子WL Bragg,则在这个阶段在南澳大利亚出生。

SolvayConference1927.001

发表评论

Mathematica 循环计算效率

这两天帮欧洲的研究小组处理试验数据,就是计算试验数据的 Radial Distribution Funciton (RDF),发现50,000个数据点,用Mathematica处理起来非常吃力。已经开始用C++写程序了,后来尝试另一种方法,找到的计算时间上的差异。

问题定义:列举寻找N个点之间的距离。实现方法有两种,计算复杂度都是 O(N^2)。Mathematica里可以用两种方法实现:(1)利用Subset函数罗列2个点的组合,然后计算距离(Euclidean Distance);(2)利用循环。程序如下:

NumG = 500; Data = RandomReal[1, {NumG, 3}];
(* Method 1: Use Mathematica in-build function *)
DistDistance = {};
Timing[DistDistance = EuclideanDistance @@@ Subsets[Data, {2}];][[1]]
(* Method 2: Use loops *)
DistDistance = {};
Timing[For[i = 2, i <= NumG, i++,
For[j = 1, j <= i - 1, j++, {dx = Norm[Data[[i]] - Data[[j]]]; AppendTo[DistDistance, dx];
}]];][[1]]

测试程序里,都用了500个随机点。前一种是抽象语言,实现时间大概是0.128秒*;而后者属于底端的循环定义,尽然用了44.9秒!而且前者与数据点数量符合O(N^2),后者在1000个点以上就根本无法处理了。

看来以后用Mathematica还是要多使用程序里的函数形式。

 

*硬件环境,MacBook Pro 2014。

[补注] 这个看来是和内存利用相关的。第二种方法采用了AppendTo 函数,在每个循环里都在进行内存的读写。尺寸大的算例里,内存可以用到10G以上。计算程序已经优化。

[补补注] 需要提高计算效率,可以采用几种不同的函数定义方式。上文提到的方法,其中输入函数,并没有确定数据类型。这个其实是Mathematica的优点之一。但是要进行循环计算的时候,就反倒有效率上劣势。其解决方法是换用函数定义方法。下面是几个实测的算例,都是 10^7 次循环。

定义一,函数定义采用 ":=",或者"Function[]",计算时间在70秒左右; 

定义二,采用 Compile[],需要预先定义函数类型,计算时间10秒左右;

定义三,采用 Compile[],类似定义二,但是在最后制定编译类型,CompilationTarget->"C"。计算时间3.5秒。定义入下图。

Comments (2)

一个关于数学软件的问答 (Q&A)

这个是一个在StackExchange 论坛上的问答 Q&A,关于Mathematica。问题十分简单,哪里去找学这个数学软件的资源。看看下面的回复,简直就是可以写出一本书的内容。不对,那信息量比一本,甚至一系列教程多得多得多得多得多(注意,这个不是口吃)

Really good collection of resources for learning Mathematica, via goo.gl/OBVrcm

主要的是,这个回答(或者说回答系列)的详细程度,回答者的专业程度,让人叹为观止。另外就是可以看到社区的重要性,应该也是这些回答者们帮助他人的动力。这样的网络讨论,应该说是在英文社区中比较多见。

发表评论