程序员的资源宝库

网站首页 > gitee 正文

理论物理推导公式,不会推导时;数值计算出现bug时,debug的方法

sanyeah 2024-03-29 16:13:49 gitee 7 ℃ 0 评论

目录
  • I. 不会推导时:
    • 0) 不在故纸堆中科研!
    • 1) 一时推导不会,先跳过, 后面可能就想出来了,或者先把自己已推导的部分写成笔记,在写的过程中就想出来了(在bernvig书第七章推导时就是这样),或者找文献,书
    • 2) 和别人讨论!
    • 4)a short course拓扑绝缘体书第3章中(3.20)的证明是一个数学问题,我想了很久才证出来(开始想了很久没证出来,过了一天冷静下来之后又想了一小时才证出来),其实遇到问题不应该怕, 不应该让情绪主导你,而应该冷静下来,仔细分析、慢慢思考有什么解决方法 ?这样才是解决问题之道!
    • 5)查更多文献,比如现在看的这篇论文的参考文献的参考文献
    • 6)网上找!
    • 8)在推导过程中注意所使用公式的前提条件!
    • 11)研究的理论中有些细节问题,你不去弄清楚,就可能出现大问题。太过于急功近利的心态,常常会易错,注意不到一些重要的东西,太过于急功近利的心态,就甚至连论文也读不仔细,就注意不到一些重要的东西。
  • II. 一些具体方法
  • III.公式推导的工具
    • 1)数位板推导公式+mathpix识别
    • 2)纸
    • 3)mathematica或matlab符号计算
    • 4)axmath软件
    • 5)texstudio:结合texstudio的公式预览功能直接在latex上写复杂的公式推导
  • IV.量纲分析检查得到的公式
  • V.查文献
  • VI.数值计算出现bug时,debug的方法
    • 重要:程序出现问题时,debug的方法:
      • 0)有些bug很难发现,所以对待科研程序必须非常认真、非常注意有没有bug
      • 1)一部分一部分运行,debug
      • 2)多使用一些print查看中间结果
      • 3)修改参数再print查看结果
      • 4)有可能不是程序有bug,是软件突然有问题,关掉python,再打开再运行!!!
      • 5)特殊值法,找一些具体例子分析,比如程序中有bug却不知道问题在哪,可以具体计算一下出问题的k=9的情况,具体例子更能够发现问题在哪里、在哪个函数上

长期更新。还很菜的自己的一点点经验,总得来说就是坚持,看不懂、推不出就多看几遍、多推导。在大四刚开始学理论物理时,看拓扑绝缘体书,看不懂,推导不出来,或者花一两天才能想出来想出来书中一个公式的推导,所以感觉自己非常菜,也非常没有信心。后来过了一年半多的时间,研一课程学习也给我打下了一点基础。重复文献时下定决心啃硬骨头,看不懂不会推导就坚持,自己慢慢想、查、问。最后发现,虽然经常花一两天甚至两三天才能重复出论文中的一个公式,但是最后过了6、7个星期,终于重复完了第一篇还算经典的论文。现在已经释然了,觉得自己的能力就是一两天才能想出来一个公式的推导的能力,但积少成多,最后也能够出一点成果。
另外推荐一下李新征老师的演讲全文:https://www.phy.pku.edu.cn/info/1179/6788.htm
http://grs.pku.edu.cn/dsfc/317247.htm :"我经常会鼓励学生不要总觉得自己笨,在物理学方面要做到“杰出”是需要天赋的,但我们这个社会更需要的,是合格的、有热情的、有科学精神的科研工作者,这是夯实整个科学研究的基础。期待同学们能始终保护好自己的兴趣,在有兴趣的基础上,吃得了苦,努得了力,就离成功不远了!"
书记在宁德当地委书记时对贫困落后的宁德也曾说“弱鸟先飞,水滴石穿”的道理。见:http://cpc.people.com.cn/n1/2021/0926/c441137-32237023.html 中:

谢作民:你们谈到这个问题,我很感慨。我先讲一个小故事吧。我在宁德小市当书记的时候,世界知名良港三都澳就在我们这个市,当时讨论得沸沸扬扬的三都澳开发的事情就在我的任上。我们要开放,要发展,当时很多人就把三都澳港和荷兰路特丹港相比,认为我们的自然条件比如水深、港阔等方面都比荷兰路特丹港强,只讲自然条件,没讲基础设施和其他条件。为此,我还专门请了专家过来“把脉”,其中有个专家实地看过之后,笑了笑,问我:你去过荷兰路特丹港吗?我说我没去过。我听出来他的话里有一丝嘲讽的意味,当时心里还有些不服气。可后来,我到省船舶集团工作,有机会出国谈业务,有一次真的到了路特丹港口,现实给了我很大的打击:我们的三都澳怎么能跟人家的港口相比?!鹿特丹的港口,地理位置优越,吊车林立,铁路、公路、航空四通八达。可我们的三都澳,空有长长的海岸线,什么交通都不通、配套也没有,怎么能一下子就开发了呢?这些事给我的教训很深,我也越发觉得书记上世纪80年代在宁德任职时就提出“滴水穿石”的精神,是多么的务实和深刻!我们都能体会,他有一份雄心壮志,也恨不得闽东能迅速摆脱贫困。但他也非常冷静地认识到,我们不可能一下子抱上“金娃娃”,必须要一步一个脚印地走下去,最终才能成事。我记得2010年9月,他回到宁德,专门和宁德的领导和老同志相见,又谈起当年闽东人的三大梦想,虽然当时不能实现,但一任接着一任干到今天,宁德建市、温福铁路都实现了,三都澳也在开发之中。这就是“滴水穿石”的力量。这是书记留给我们闽东人最宝贵的精神财富。

论文读不懂怎么办:https://zhuanlan.zhihu.com/p/90113374,
另外,我自己的一个感悟是:对于像我这样智商很普通、不擅长理论的人,少数PRB文章的推导过程会写得很详细,这时就非常便于学习和重复这篇论文,方便硕士毕业及早转行,需要多找这种文章,但这种文章很少,例如https://journals.aps.org/prb/abstract/10.1103/PhysRevB.100.125401 这篇激子非线性的文章的推导就写得特别清楚,容易重复。
重复经典文献等等

I. 不会推导时:

0) 不在故纸堆中科研!

比如李正中书15页的一个积分,参考文献[4]中肯定证明了,一定正确,算这个数学问题是浪费时间,我不能浪费时间!!!浪费了一个多小时!!!还有很多东西需要学!!!注意!!!

1) 一时推导不会,先跳过, 后面可能就想出来了,或者先把自己已推导的部分写成笔记,在写的过程中就想出来了(在bernvig书第七章推导时就是这样),或者找文献,书

确实,95年sipe论文中的(13)的证明就是这样,一个下午+晚上一个多小时都推导不出来此公式,但最后有一点思路,然后先跳过,然后早上才推导出来了!)

2) 和别人讨论!

一起讨论,也许学习效果特别好!

不能一个人学物理,否则遇到困难就无法解决,浪费很多时间, 应该遇到问题时,和别人讨论一下 ,就算别人不知道,没讨论出结果,但是讨论的这个过程会给你灵感,别人会告诉你一些思路,即使可能有的思路走不通,但是能启发出其他思路,最后就解决了这个问题。

杨振宁说,争辩是最好的学习物理的方法,中外的物理学家都是这样认为。黄昆也认为争辩是最好的学习物理的方法。
注意是学习,在平时学习就应该争辩,不仅是科研时。
https://www.phys.tsinghua.edu.cn/info/1065/4420.htm中:
"关于怎样去考虑向哪个方向走,杨先生劝勉同学们首先要了解自己的兴趣和能力,培养自己的兴趣和能力的有效途径是多读书,多看与学术有关的的杂志(例如美国的“Physics Today”,中国的“物理”),随时扩充自己的兴趣。杨先生还用父亲当年引导自己看数学大师传记(“Men of Mathematics”)的往事,启发同学们读一些科学家的传记,增强自己的科学兴趣。关于学习方法,杨先生以自己在西南联大时与同窗好友黄昆、张守廉争论量子力学中的“测量”的意义的故事,指出多跟同学辩论是最好的学习方法,中外的教师莫不如此认识。最后杨先生劝导同学们应该把英文学好,读、说、写英文的能力都要好,因为英文从二战后已成为科学界的最主要的文字了,杨先生说自己也是经过几次集中精力练习才做到的。"

3)注意出现的论文、物理书等,推导是可以推导出来的,只不过可能跳步严重,或者叙述不好,或者确实有一点推导错误,而导致我不会推导。所以应该有信心,推导是一定可以推导出来,一定可以获得精妙和完全的理解,就像高中的数学、物理,其实都是可以学懂的,学懂了就觉得科学非常有趣,就像李永乐的科普视频。

论文和书中跳过的步骤就像一道道高中数学题,需要自己解决。但是我依然认为那些省略了太多步骤的物理书不好,但是可能是我的能力有限。

4)a short course拓扑绝缘体书第3章中(3.20)的证明是一个数学问题,我想了很久才证出来(开始想了很久没证出来,过了一天冷静下来之后又想了一小时才证出来),其实遇到问题不应该怕, 不应该让情绪主导你,而应该冷静下来,仔细分析、慢慢思考有什么解决方法 ?这样才是解决问题之道!

5)查更多文献,比如现在看的这篇论文的参考文献的参考文献

sipe00年论文的(10)式,想了两三天也没想出来怎么证明,只是有一些思路,计算了,但没有证明出来,后来开组会,老师提醒我看luttinger的论文,我后来看了一下,稍微算了一下,结合前两天自己的思路和计算,就有灵感怎么证明了。所以当推导证明不出来的时候,就应该讨论,并且可以 查更多文献,比如现在看的这篇论文的参考文献的参考文献

一般来说, 最早的论文才会把来龙去脉都写出来,后面的论文就可能不会写那么清楚了。 luttinger是57年的论文,其实还有更早的论文,确实luttinger的论文写得比62年blount的论文写得更好懂,不过也可能是因为luttinger这个人写论文就是会把很多推导都写清楚。

6)网上找!

比如dipole hamiltonian我不知道物理意义,查了一下就知道了。还有长度规范与速度规范之间的变换。
还有一些物理论坛,有很好的回答,例如:https://www.physicsforums.com/threads/the-fermi-dirac-distribution-function.178967/
https://physics.stackexchange.com/questions/101408/fermi-dirac-distribution-derivation
解决了我的疑问(另外,从这里的网页的证明可以感觉到,理论物理真是太难了,本人智商不够,想不出来上面网页上这种证明过程,,,)。

7)在谷歌学术中搜作者,很可能可以搜到论文作者的博士论文。博士论文中一般写得都比论文更详细,推导过程更多

8)在推导过程中注意所使用公式的前提条件!

在推导sipe95年论文(11)的时候,发现自己推导出的结果和(11)矛盾。此时其实是因为我的推导中使用的一个公式有前提条件n不等于m,而我没有注意此前提条件就使用此公式,导致一直没想出来我的推导问题在哪。

9)有些错误的推导或者不会推是因为自己的想当然认为某个公式成立(但其实认真写下来发现不成立)等

10)在sipe论文推导中,居然有两次推导错误,都错误地认为

\(\left[a_{m}, \frac{\partial a_{l}\left(k^{\prime}\right)}{\partial k^{\prime b} }\right]\)等于delta函数而不是等于0.这是粗心导致的,其实证明过程很复杂,所以这种错误在推导中没有意识到,则后面会出现更多的麻烦!

11)研究的理论中有些细节问题,你不去弄清楚,就可能出现大问题。太过于急功近利的心态,常常会易错,注意不到一些重要的东西,太过于急功近利的心态,就甚至连论文也读不仔细,就注意不到一些重要的东西。

比如微扰论成立的前提应该弄清楚,密度矩阵的定义也应该弄清楚

II. 一些具体方法

  1. 推导证明求和式应将求和式展开再证

例:nolting书第二章(2.37)的证明、a short course拓扑绝缘体书中(3.20)的证明

  1. 求导和积分交换顺序 —— 重要方法

例:nolting书中(2.28)

注意划线句。

张明哲 2018拓扑绝缘体讲义第四章(1.6)的证明过程中也用了类似上面图中的方法,将\(\frac{\partial}{\partial k}\)提到积分号外,因为它对积分中的其他部分无作用。(其他部分是k')

3.分部积分、换元法、矢量分析公式、泊松求和公式、格林公式、周期函数格林定理等数学方法

对频率求导或积分、分部积分、考虑量级然后忽略、用上点乘和叉乘及梯度公式、换元法(令t=-k)等

4.海森堡运动方程法、乘波函数法证明算符等式等方法,比如可以查一下量子力学习题笔记本中归纳的方法

5.化简复杂表达式的一些方法:

1)交换脚标m和n :比如思源sipe00论文(36)的证明中:

在第二项交换m和n,最后就能得到更简洁的表达式!

2)傅里叶变换,周期函数格林定理

6.特别复杂的计算还是不心算,而是将每一步都写出来,否则易错。比如现在自己的论文推导

III.公式推导的工具

1)数位板推导公式+mathpix识别

有其优点,因为 有套索(最方便) 、橡皮擦等功能!特别方便,特别是套索!注意onenote中也可以作为套索,再用快捷键复制粘贴!

用数位板推导其实还是很快!还能结合mathpix转成latex公式

2)纸

因为显示器的大小有限,有些特别特别复杂的推导,真的更适合用纸,因为可以写很多张纸,公式可以写得很长,可以有一个对许多公式的全局的对比,而且可以几张纸上的公式进行对比,方便。
有些复杂推导,用数位板因为屏幕不够,不方便写,想不出来,而用纸页面更大,更容易写下复杂公式,确实更有思路,有的公式我就是用数位板推不出来,用纸推能想出来。
在纸上写的时候整齐一些,推导完后拍一下传到电脑,再用mathpix识别

3)mathematica或matlab符号计算

matlab符号计算其实也很强大,能解出一些mma解不出来的符号方程

4)axmath软件

也可以用于推导公式,很方便!

5)texstudio:结合texstudio的公式预览功能直接在latex上写复杂的公式推导

总之,推导公式时灵活运用以上五种工具,都使用,速度会更快
以上5个方法都是经验得出的

IV.量纲分析检查得到的公式

在得到一些结果时,特别是一些复杂的表达式时,需要用量纲分析检查一下!注意利用\(\hbar\)的量纲是\(J\cdot s\)!

V.查文献

用好web of science的引文跟踪和检索跟踪:

VI.数值计算出现bug时,debug的方法

重要:程序出现问题时,debug的方法:

0)有些bug很难发现,所以对待科研程序必须非常认真、非常注意有没有bug

有些bug很难发现,但确实造成结果不正确,所以对待一个科研程序的态度必须要非常认真、非常注意有没有bug

1)一部分一部分运行,debug

将一部分程序剪切到思源,然后只运行剩下的部分程序。这样一部分一部分debug,就能知道问题在哪个部分!!!

2)多使用一些print查看中间结果

从print的结果中可以发现一些规律,从而找到错误所在,比如在有bug的程序中发现数据一直是递增的,则问题可能是在for循环中某个变量一直在循环中累加,就找到了错误所在。

3)修改参数再print查看结果

修改参数再查看结果,就可能发现错误所在!

4)有可能不是程序有bug,是软件突然有问题,关掉python,再打开再运行!!!

我7点半其实就写好了程序,但一直运行不出来,我以为是程序有bug,一直研究到了21点17分,才发现别的python程序也运行不出来,只要是有画图的程序就运行不出来。后来我把python关了,再打开,这些程序就能运行出来图片了

原来是python自己出问题了,而不是我的程序有bug!!!所以以后注意,遇到运行不出来的情况,还可能是软件有问题,关掉python,再打开再运行!!!

后来我发现这个问题不是python的问题,而是只要我将电脑连海信作为扩展屏,有画图的python程序就运行不出来,所以以后运行python时将海信扩展屏关掉!!!

或者使用spyder这个IDE来编译画图程序就可以。

5)特殊值法,找一些具体例子分析,比如程序中有bug却不知道问题在哪,可以具体计算一下出问题的k=9的情况,具体例子更能够发现问题在哪里、在哪个函数上

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表