24小时热门版块排行榜    

查看: 654  |  回复: 6

byin

铜虫 (正式写手)

[求助] 关于最速下降法精度的问题

最速下降法么,我的理解是,从x1点出发,沿着x1点的负梯度方向(即原子受力方向)向前走,走到势能V在该方向上最近的极小值点x2,再沿着x2的负梯度方向拐弯继续走。因此,撇开效率不谈,理论上,最速下降法可以达到任意要求的精度,比如受力小于1e-4 eV/A等很小的量。

1,但是为什么我的算例中,有的例子中,受力到2e-3 eV/A就走不动了,给其任意小的位移更新dx,势能V都会增加?

2,另外有一些例子就比较离谱了,受力还很大的时候,比如10 eV/A,势能也推不动,这是为什么?

谢谢!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Bessel

木虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
jiaoyixiong: 金币+5, 赞!鼓励交流 2013-01-20 08:54:51
你要找的是全局最小值,理论上当然能找到。但是计算机来算又是另一回事,很可能系统陷入了势能面上的局域极小值的阱里,很难翻过势垒继续往能量更低的方向走。

举个形象的例子,人们下山的时候,虽然目的地是山脚(势能最小),山路起伏,下山过程中可能会走一段上坡路(势垒)。
2楼2013-01-20 01:45:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

byin

铜虫 (正式写手)

引用回帖:
2楼: Originally posted by Bessel at 2013-01-20 01:45:57
你要找的是全局最小值,理论上当然能找到。但是计算机来算又是另一回事,很可能系统陷入了势能面上的局域极小值的阱里,很难翻过势垒继续往能量更低的方向走。

举个形象的例子,人们下山的时候,虽然目的地是山脚 ...

谢谢回复1

问题是,无论是最小值点还是极小值点,导数总要为0吧。但是数值计算中,其导数(受力)总是不能达到任意小的数。
3楼2013-01-20 14:20:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Bessel

木虫 (正式写手)

【答案】应助回帖

★ ★ ★
jiaoyixiong: 金币+3, 赞!头像很拉风,讲解很专业! 2013-01-20 15:20:40
引用回帖:
3楼: Originally posted by byin at 2013-01-20 08:20:56
谢谢回复1

问题是,无论是最小值点还是极小值点,导数总要为0吧。但是数值计算中,其导数(受力)总是不能达到任意小的数。...

计算机不可能达到任意小的数,double 类型的小数部分只能精确到小数点后 10 位。 一般根据系统误差要求,设定某个值 epslion,当俩数的差的绝对值小于epslion时,可以认为这俩数相等了。
4楼2013-01-20 15:18:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

byin

铜虫 (正式写手)

引用回帖:
4楼: Originally posted by Bessel at 2013-01-20 15:18:17
计算机不可能达到任意小的数,double 类型的小数部分只能精确到小数点后 10 位。 一般根据系统误差要求,设定某个值 epslion,当俩数的差的绝对值小于epslion时,可以认为这俩数相等了。...

好的,谢谢!

但是我的第二个问题怎么解释呢?那些例子中,受力还很大,就不能再更新了。任意小的坐标更新都会使势能增大,why?
5楼2013-01-20 15:33:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Bessel

木虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★
byin: 金币+5, 有帮助 2013-01-20 16:35:41
引用回帖:
5楼: Originally posted by byin at 2013-01-20 09:33:02
好的,谢谢!

但是我的第二个问题怎么解释呢?那些例子中,受力还很大,就不能再更新了。任意小的坐标更新都会使势能增大,why?...

我没亲自做,也不知道你具体在做什么,没法回答你的问题。

可能代码错误,可能系统有什么特性。

错误的可能有千万种,正确的只有一个。这个问题还是留给你自己吧,我能解释的我已经都说了。
6楼2013-01-20 16:10:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

byin

铜虫 (正式写手)

引用回帖:
6楼: Originally posted by Bessel at 2013-01-20 16:10:38
我没亲自做,也不知道你具体在做什么,没法回答你的问题。

可能代码错误,可能系统有什么特性。

错误的可能有千万种,正确的只有一个。这个问题还是留给你自己吧,我能解释的我已经都说了。...

thanks
7楼2013-01-20 16:35:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 byin 的主题更新
信息提示
请填处理意见