24小时热门版块排行榜    

查看: 2870  |  回复: 24
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

chaogumath

铜虫 (小有名气)


[交流] 大规模优化数值计算,梯度的计算方式讨论

各位,
    最近在做非线性规划的大规模数值计算。用的是向前差分近似计算梯度:
g=[f(xi+h)-f(xi)]/h,用for i=1:n 进行循环计算。但是大家看到,如果变量有500个的话,就要计算500次f(xi+h),这个计算量太大了。例如:f(xi+h)计算1次需要0.001秒,那么,计算梯度g就需要5秒。这已经占了整个计算时间的70%。咋办?请教各位同仁。
回复此楼

» 本帖已获得的红花(最新10朵)

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

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

chaogumath(金币+2):谢谢参与
引用回帖:
6楼: Originally posted by chaogumath at 2011-09-03 17:28:15:
这个for循环确实厉害。使我想到一句话,中国人民的事情,就算再小,乘以13亿就是大事了。呵呵。谢谢各位指点。

关于Matlab的循环,多说两句吧。因为Matlab是执行脚本的,而不是像C++之类的编译后执行,循环的本质是每次都重新读取代码执行,这个效率是极其低下的,所以尽量避免使用循环语句是Matlab编程的一条基本准则。而Matlab也提供很多内建的程序使得很多情况下剔除循环语句成为可能。
10楼2011-09-04 03:31:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 25 个回答

chaogumath(金币+2):谢谢参与
500不叫大
计算500次不叫多
计算1次需要0.001秒,你的机子比蜗牛还慢,的改善硬件!
2楼2011-08-30 07:23:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chaogumath

铜虫 (小有名气)


送鲜花一朵
只是举个例子,500只能算小规模的。
这句话看了没有?“这已经占了整个计算时间的70%。”一个循环需要8秒的话,计算g就需要5秒。你做实验的时候是这样的吗?
请大侠分析得透彻一点,否则云里雾里的,抓不到本质。呵呵。
3楼2011-08-30 08:24:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chaogumath(金币+2):谢谢参与
你这里关键是函数值的计算耗费时间,与优化算法没什么关系啊?
如果你的函数计算,要解一个pde或者cfd,那就慢了,
所以,你的从函数计算着手解决问题
4楼2011-08-30 11:13:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见