主题:步长如此小如何改
lqmj
[专家分:40] 发布于 2011-01-01 18:09:00
奇怪,给定初始点和参数,进行满足一不等式的线性搜索,得到一个迭代点,为何步长竟然小到10的负159次方,不知程序错在何处?到底是程序错了还是只需调整参数?请高手能传授,不胜感激!
回复列表 (共10个回复)
沙发
asymptotic [专家分:16630] 发布于 2011-01-02 00:54:00
有何不妥? 10 ** (-159) 没有什么特别呀,在双精度表示下不会下溢; 其实,最重要的是您所说问题的单位是什么,若特征单位是 10 ** (-158),则根本无所谓您说的问题,若是您的特征单位是 1,步数要 10 ** (159),则真的是有些问题了,求解的时间复杂度相当大。
板凳
lqmj [专家分:40] 发布于 2011-01-02 09:23:00
当找不到问题的症结时非常郁闷,感到很无助,但在论坛中一提问就得到素不相识的高手老师的热情指点,感动万分!
3 楼
lqmj [专家分:40] 发布于 2011-01-02 09:42:00
给定初始点x,搜索方向d,要求出下一个迭代点,那我需要计算步长,这个步长要满足一个不等式,我采用双精度计算,我依次采用0.1的 k = 1次方, k = 2次方,k = 3次方,。。。试探,直到满足那个规定的不等式,才得到步长。
在求步长的过程中我需要不断计算[f(x+0.1^k*d)-f(x)]/[0.1^k],其中 f 是连续函数,我担心的是 k 很大,分母很小,分子也很小,这样会造成数值不稳定吧
4 楼
asymptotic [专家分:16630] 发布于 2011-01-02 19:50:00
当然,分子属于两个相近的数想减,有效数字损失。
5 楼
lqmj [专家分:40] 发布于 2011-01-03 10:34:00
感谢您的回复,但我的程序中必须算[f(x+steplength*d)-f(x)]/steplength,老师有啥建议没
6 楼
asymptotic [专家分:16630] 发布于 2011-01-03 18:56:00
本质还是导数的差商近似,用 Taylor 展开推导局部截断阶数较高的公式,可以改善;看看数值分析的数吧,对你有好处。但关于差商,数值界目前的结论是:不稳定。
7 楼
lqmj [专家分:40] 发布于 2011-01-05 16:14:00
感谢您的回复
8 楼
lqmj [专家分:40] 发布于 2011-01-05 16:59:00
编程中遇到一现象:
real(8),parameter :: eps = 1.0d-4
write(1,fmt=1030) "eps = ",eps
1030 format(/A10,f12.4)
奇怪为何要求按上面格式输出eps时,显示
run time error
sqrt:domain error
没有write语句则能给出一运行结果,why?
9 楼
lqmj [专家分:40] 发布于 2011-01-05 17:00:00
请高手们能帮助我
10 楼
lqmj [专家分:40] 发布于 2011-08-22 11:02:00
现在我才明白,当时出现步长特别小是因为我在编程中把一个量的符号弄错了,当把这个符号弄错时整个算法的理论就错了,难怪算不出。
我来回复