下面总结两种迭代方法:三分法和牛顿迭代
1.三分法
二分法作为分治中最常见的方法,适用于单调函数,逼近求解某点的值。但当函数是凸性函数时,二分法就无法适用,这时三分法就可以大显身手。 如下凸函数:
类似二分的定义left和right
mid1 = (left + right) / 2 mid2 = (mid2 + right) / 2 如果mid1靠近极值点, left = mid1 如果mid2靠近极值点, right = mid2
三分的原理就是每次搜索去掉2/3
程序模版如下:
double Calc(Type a)
{
/* 根据题目的意思计算 */
}
void Solve(void)
{
double Left, Right;
double mid, midmid;
double mid_value, midmid_value;
Left = MIN; Right = MAX;
while (Left + EPS < Right)
{
mid = (Left + Right) / 2;
midmid = (mid + Right) / 2;
mid_area = Calc(mid);
midmid_area = Calc(midmid);
// 假设求解最大极值.
if (mid_area >= midmid_area) Right= midmid;
else Left = mid;
}
}
2.牛顿迭代