计算化学公社

标题: 数值梯度和解析梯度是怎么回事 [打印本页]

作者
Author:
幸运兔    时间: 2015-5-25 09:51
标题: 数值梯度和解析梯度是怎么回事
请问一下数值梯度和解析梯度是如何定义的,又各有什么优缺点?

作者
Author:
sobereva    时间: 2015-5-25 13:19
我做的课件中的一部分

作者
Author:
幸运兔    时间: 2015-5-25 14:35
谢谢sob老师,非常赞,非常清晰明朗,在这给您鞠一躬。谢谢老师
作者
Author:
youyno    时间: 2015-5-25 15:15
可以这么理解吗?解析梯度下,一阶结构优化,二阶算频率,三阶找过渡态
作者
Author:
sobereva    时间: 2015-5-25 22:34
youyno 发表于 2015-5-25 15:15
可以这么理解吗?解析梯度下,一阶结构优化,二阶算频率,三阶找过渡态

不对。
找过渡态的方法有很多,有的只需要依赖梯度(一阶导数),有的需要Hessian矩阵(二阶导数)。平时用的opt=TS就属于后者。
作者
Author:
beefly    时间: 2015-5-27 10:50
本帖最后由 beefly 于 2015-5-27 10:51 编辑

假设f(x)=x*x*x

f(x)的解析梯度公式:f'(x)=3*x*x
f(x)在x=1的梯度:f'(x=1)=3*1*1=3

f(x)的数值梯度公式:f'(x) ~ [f(x+d) - f(x-d)]/2d
若d=0.001,f(x)在x=1的梯度:f'(x=1) ~ [f(1.001) - f(0.009)]/0.002 = 3.000001

解析梯度一般比数值梯度的精度高,尤其是柔性分子和弱相互作用体系。

计算解析梯度,需要事先导出解析梯度表达式,但是很多情况下表达式要么不存在,要么太难写,要么暂时尚未程序化。数值梯度没有这些限制。

当仅有一两个坐标变量的情况下,解析梯度在计算量上并没有太大优势,尤其是post-HF方法,解析梯度远远比数值梯度耗时;但是当坐标变量增多以后,解析梯度比数值梯度快得多。




作者
Author:
scf    时间: 2015-5-28 09:05
beefly 发表于 2015-5-27 10:50
假设f(x)=x*x*x

f(x)的解析梯度公式:f'(x)=3*x*x
但是很多情况下表达式要么不存在

什么情况下解析梯度的表达式是不存在的
作者
Author:
helpme    时间: 2015-5-28 09:15
scf 发表于 2015-5-28 09:05
什么情况下解析梯度的表达式是不存在的

就是这个表达式特别难,现在还没有人推导出来。
有些人专门做这个方向的,比如厦大的梁万珍老师。
作者
Author:
superrice    时间: 2015-5-28 10:08
sobereva 发表于 2015-5-25 13:19
我做的课件中的一部分

请问sob老师,如果是二阶数值导数,dx的取值有什么讲究吗?还是这个根据体系不同,取值也不同,也不知道什么值会比较准。另外有没有什么比较准确的外推的办法?
作者
Author:
sobereva    时间: 2015-5-28 11:04
scf 发表于 2015-5-28 09:05
什么情况下解析梯度的表达式是不存在的

原理上任何情况都存在
作者
Author:
sobereva    时间: 2015-5-28 11:06
superrice 发表于 2015-5-28 10:08
请问sob老师,如果是二阶数值导数,dx的取值有什么讲究吗?还是这个根据体系不同,取值也不同,也不知道 ...

一般就是凭经验。如果不嫌麻烦,也可以不断调节步长,看看小到什么时候结果就不怎么变了,以及小到什么程度之后结果就波动之类(数值噪音开始明显了),这就容易确定取什么值合适了。
作者
Author:
卡开发发    时间: 2015-5-28 12:14
scf 发表于 2015-5-28 09:05
什么情况下解析梯度的表达式是不存在的

如果基函数不解析,如数值基组方法,就没办法解析梯度;还有QMC这种,连波函数都是离散的,就没办法进行梯度计算。
作者
Author:
卡开发发    时间: 2015-5-28 12:25
superrice 发表于 2015-5-28 10:08
请问sob老师,如果是二阶数值导数,dx的取值有什么讲究吗?还是这个根据体系不同,取值也不同,也不知道 ...

Sob老师的ppt和6#Beefly前辈说的还很清楚,二阶导数可以写成lim(△x→0):[f(x+△x)+f(x-△x)-2f(x)]/2△x,也就是说理论上而言,△x越接近0越合理,但实际如Sob前辈说的那样,但计算的精度有限导致过小的△x计算误差很大。

DMol3这种数值基组显然不能直接计算解析导数,不过可以以其Help文档作为指导原则:
For very flat potential energy surfaces, larger step sizes may be needed. Smaller values may be appropriate for steep surfaces.
作者
Author:
sobereva    时间: 2015-5-28 12:26
卡开发发 发表于 2015-5-28 12:14
如果基函数不解析,如数值基组方法,就没办法解析梯度;还有QMC这种,连波函数都是离散的,就没办法进行 ...

可以分两个层次,理论是解析的理论,只不过具体求解时离散数值求解。能量求解时的数值化不一定影响梯度可以(半)解析地获得。
可以先从理论上推出能量的解析导数表达式,然后再去离散数值求解推得的解析导数公式。Dmol3这样也是有解析梯度的。

作者
Author:
卡开发发    时间: 2015-5-28 13:39
sobereva 发表于 2015-5-28 12:26
可以分两个层次,理论是解析的理论,只不过具体求解时离散数值求解。能量求解时的数值化不一定影响梯度可 ...

理论层次是解析的,这点我赞同前辈的说法。不过因方法而异可能会产生一些局限。DMol3计算二阶导数的时候采用的确实是全数值的二阶差分,估计二阶导数没办法这样做(详细原因不明,没有代码及详细的说明供考证)。

另外,不一定指的是Hessian的处理,比如动能项,DMol3生成数值基组采用的是平滑势阱,存在二阶导数,所以还是可以在实空间做;而SIESTA的话数值基组产生是在无限深势阱产生的,势阱边界上没办法产生二阶导数,这样也就不得不进行Fourier变换到倒空间进行处理,这样SIESTA计算的体系必须有边界且计算量与边界大小相关。
作者
Author:
nagami    时间: 2015-5-28 14:02
本帖最后由 nagami 于 2015-5-28 14:39 编辑
superrice 发表于 2015-5-28 10:08
请问sob老师,如果是二阶数值导数,dx的取值有什么讲究吗?还是这个根据体系不同,取值也不同,也不知道 ...

提高数值导数精度,对中心差分格式进行Richardson外推是一种不错的选择,量化估计不怎么合适,计算量又增加了





欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3