首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

坐标下升算法(Coordinate Ascent)及C++编程实现

2012-12-28 
坐标上升算法(Coordinate Ascent)及C++编程实现编程实现:注意:求解函数的最小的方法,与此方法基本相同。另

坐标上升算法(Coordinate Ascent)及C++编程实现

坐标下升算法(Coordinate Ascent)及C++编程实现
坐标下升算法(Coordinate Ascent)及C++编程实现编程实现:


注意:求解函数的最小值的方法,与此方法基本相同。另外,该算法对初始值的选取不是非常敏感。对有些问题的求解非常适合。源码下载:http://download.csdn.net/detail/nuptboyzhb/4909729讨论:
第一:对于没有极大值和极小值的函数,本算法肯定计算不出来。但是,实际问题中,如果没有极大值或极小值,说明建立的模型是错误的。
第二:程序本身确实无法知道是最大值还是最小值,因为求解最大值和最小的方法一模一样,都是求偏导得到的。但是,对于很多实际问题,求解目标是明确的。
第三:函数有多个极大值和多个极小值的情况,或称为局部最小值(最大值),此时,算法的计算结果与初始值的选取有很大的关系,初始值离哪个局部最优值近,得到的结果就是这个局部最优值。为了尽可能地找到全局最优值,
可以随机选多组初始值进行迭代,然后再从中选取最优解。
2楼wangeen昨天 20:39
f/x3好像有个符号写反了
Re: NUPTboyZHB昨天 20:43
回复wangeenn观察的真细心。是的,中间有一步打错了,应该是-4*x2,但是迭代的的公式是对的。
Re: wangeen昨天 21:37
回复NUPTboyZHBn恩,加油
Re: NUPTboyZHB昨天 21:37
回复wangeenn加油!
1楼wangeen昨天 14:22
程序倒是很好理解,就是求整个函数变化相对平坦的区域 这个区域不是最大就是最小的,可是如果函数本身不收敛怎么办?而且貌似程序本身无法知道算出来的是最大还是最小数值,或者刚刚好是中间的某个极值,但是不是最大也不是最小的。
Re: NUPTboyZHB昨天 14:33
回复wangeenn你说的情况有可能出现:n第一:对于没有极大值和极小值的函数,本算法肯定计算不出来。但是,实际问题中,如果没有极大值或极小值,说明建立的模型是错误的。n第二:程序本身确实无法知道是最大值还是最小值,因为求解最大值和最小的方法一模一样,都是求偏导得到的。但是,对于很多实际问题,求解目标是明确的。n第三:函数有多个极大值和多个极小值的情况,或称为局部最小值(最大值),此时,算法的计算结果与初始值的选取有很大的关系,初始值离哪个局部最优值近,得到的结果就是这个局部最优值。为了尽可能地找到全局最优值,n可以随机选多组初始值进行迭代,然后再从中选取最优解。
Re: wangeen昨天 15:56
回复NUPTboyZHBn哈哈,随便看看,只是楼主如果能多考虑到各种情况,程序更健壮,大家有需求都可以拿来直接用了。
Re: NUPTboyZHB昨天 16:06
回复wangeenn本没有解决所有函数的意思。因为该算法是用于求解特定函数的最大值的,而且已经证明该函数最大值存在且唯一的情况。我只是根据我的理解,举一个小例子。

热点排行