03 2022 档案

摘要:为R Markdown配置TinyTex编译环境上一篇博客《通过R Studio用Markdown写Beamer》的最后遗留了一个问题,那就是如何在本地win11的系统环境下快捷方便的构建一个pdflatex的环境。常规方案都是安装一个TexLive和下载一大堆的扩展文件,或者用Docker的方案去构建一个完整的环境,但是都很费时间精力。偶然的情况下看到了益辉大神基于TexLive修改了一个R的扩展包TinyTex。经过测试,这毫无疑问是目前在本地构建R Markdown完整环境的最佳解决方案。 阅读全文
posted @ 2022-03-31 09:26 DECHIN 阅读(488) 评论(0) 推荐(0)
摘要:通过R Studio用Markdown写Beamer虽说在科研和工程中,最重要的还应该聚焦于研究的内容本身,但是如何去更好更严肃的展示自己的研究成果,并且不耗费太多的时间成本,这也是一个长期被讨论的话题。本文中介绍了R Markdown这样的一个解决方案,可以用于构建Beamer演示文档,用更少的工作量去构建一个效果更好的演示文档,对科学研究而言也是一个值得称道的工作。 阅读全文
posted @ 2022-03-29 17:00 DECHIN 阅读(823) 评论(1) 推荐(0)
摘要:Python中将字典转为成员变量本文所解决的问题场景是这样的:如果给定一个字典,比如一般从json文件或者npz文件中加载出来的数据都是字典的数据结构,如果我们希望把这个字典赋值给一个类,且使得字典的key和value分别作为类的成员变量名和成员变量值,那么该如何实现呢?对于一个展平的字典而言(没有嵌套字典),我们直接使用update就可以将字典中的所有key和value转变为当前类的成员变量。比较麻烦的是包含有嵌套字典的层级结构字典,此时我们只能使用循环,并且递归的对类的成员变量进行赋值。 阅读全文
posted @ 2022-03-28 21:54 DECHIN 阅读(2276) 评论(1) 推荐(1)
摘要:MindSpore尝鲜之Vmap功能本文介绍了华为推出的深度学习框架MindSpore中最新支持的vmap功能函数,可以用于向量化的计算,本质上的主要作用是替代并加速python中的for循环的操作。最早是在numba和pytroch、jax中对vmap功能进行了支持,其实numpy中的底层计算也用到了向量化的运算,因此速度才如此之快。vmap在python中更多的是与即时编译功能jit一同使用,能够起到简化编程的同时对性能进行极大程度的优化,尤其是python中的for循环的优化。但是对于一些numpy、jax或者MindSpore中已有的算子而言,还是建议直接使用其已经实现的算子,而不是vmap再手写一个。 阅读全文
posted @ 2022-03-28 11:08 DECHIN 阅读(598) 评论(0) 推荐(0)
摘要:python中的super是什么?本文通过一个python的实际案例的设计,来讲解python面向对象的技术——类的继承中必用的super函数的逻辑。其实我们可以把python中类的继承理解成这样的一个过程:当我们在括号中明确了父类时,其实已经引用了父类的成员函数,但是并没有执行父类的初始化函数。在执行子类的初始化函数的同时,会检查是否重载了父类的成员函数,如果重载则会直接覆盖。而只有在执行了super之后,才相当于执行了父类的初始化函数,此时才可以访问父类的成员变量。 阅读全文
posted @ 2022-03-22 16:56 DECHIN 阅读(1155) 评论(0) 推荐(0)
摘要:从经典动力学理解勒让德变换为了通过一些实际问题来理解勒让德变换,我们假定了这样的一个场景:一个叫勒让德的人在足球场边上被不知来源的球砸中了脑袋,只能够判断足球砸到脑袋的一瞬间的速度方向。而通过勒让德变换的函数值,结合足球旋转的角速度,我们就可以得出足球的真实来源。同时,通过勒让德变换,我们还可以从拉格朗日力学推导到哈密顿力学。而且勒让德变换在热力学系统也有非常重要的应用场景。 阅读全文
posted @ 2022-03-21 19:51 DECHIN 阅读(1930) 评论(1) 推荐(0)
摘要:分子动力学模拟算法框架分子动力学模拟是一个跨越众多学科领域的强大工具,从物理学的角度来看分子动力学模拟的话,其基于量子力学(量子化学)构建模型,通过牛顿力学进行演化迭代,最后能够在时间平均上等同于统计力学的系综平均,是一个堪比复变函数欧拉公式的优美过程。本文就当前分子动力学模拟的框架进行了整体介绍,其中并不展开讲解各项技术内容,但是也为感兴趣的研究人员提供一个简单的入口。 阅读全文
posted @ 2022-03-17 16:26 DECHIN 阅读(1734) 评论(0) 推荐(1)
摘要:从刘维尔方程到Velocity-Verlet算法本文延续历史上分子动力学模拟演化算法的发展顺序,分别讲述了Verlet、LeapFrog和Velocity-Verlet三个算法的形式,并且结合刘维尔方程,推导了Velocity-Verlet算法中的三个演化步骤的内在含义。三种不同的演化算法,都有不同的初始依赖,而对于计算过程而言,越多的初始依赖,就会涉及到越多的参数存储问题。一个好的演化算法,只需要依赖于少量的参数,而具备较高的精度。 阅读全文
posted @ 2022-03-15 12:37 DECHIN 阅读(3858) 评论(0) 推荐(0)
摘要:SETTLE约束算法的批量化处理在前一篇文章中介绍了SETTLE约束算法在分子动力学模拟中的应用,本文通过用Jax的Vmap功能对SETTLE函数进行了扩维,使得其可以批量的计算多分子体系的约束条件。这里采用的案例是一个含有16个水分子(48原子)的小体系,从结果中可以看到,在随机移动和批量SETTLE的作用下,所有的水分子都保留了原始的键长和键角,简单理解这个过程就是一个刚体三角形的平移和旋转的过程。 阅读全文
posted @ 2022-03-11 17:48 DECHIN 阅读(381) 评论(0) 推荐(0)
摘要:Scipy和Numpy的插值对比线性插值和三次样条插值都是非常常用的插值算法,使用插值法,可以帮助我们对离散的样本信息进行扩展,得到样本信息中所不包含的样本点的信息。插值法有着非常广泛的应用场景,就比如某手机厂商所号称的x千万像素拍照,其中插值法就发挥了重要作用。在python的scipy这个库中实现了线性插值算法和三次样条插值算法,而numpy库中实现了线性插值的算法,我们通过这两者的不同使用方式,来看下所得到的插值的结果。 阅读全文
posted @ 2022-03-09 09:22 DECHIN 阅读(3472) 评论(0) 推荐(2)
摘要:分子动力学模拟之SETTLE约束算法继上一篇文章介绍了分子动力学模拟中常用的LINCS约束算法之后,本文再介绍一种SETTLE约束算法,及其基于Jax的实现方案。LINCS约束算法相对来说比较通用,更适合于成键关系比较复杂的通用的体系,而SETTLE算法更加适用于三原子轴对称体系,比如水分子。SETTLE算法结合velocity-verlet算法,可以确保一个分子只进行整体的旋转运动,互相之间的距离又保持不变。比较关键的是,SETTLE算法所依赖的参数较少,也不需要微分,因此在性能上十分有优势。 阅读全文
posted @ 2022-03-08 09:05 DECHIN 阅读(1127) 评论(0) 推荐(0)