发新帖本帖赏金 1.00元(功能说明)我要提问
返回列表
打印

关于三分法求最大值!

[复制链接]
804|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
東南博士|  楼主 | 2015-9-18 10:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
二分法作为分治中最常见的方法,适用于单调函数,逼近求解某点的值。但当函数是凸性函数时,二分法就无法适用,这时三分法就可以“大显身手”~~
类似二分的定义Left和Right,mid = (Left + Right) / 2,midmid = (mid + Right) / 2; 如果mid靠近极值点,则Right = midmid;否则(即midmid靠近极值点),则Left = mid;
程序模版如下:

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;
    }
}

相关帖子

沙发
東南博士|  楼主 | 2015-9-18 10:08 | 只看该作者
分析三分法的具体实现
条线段上找到一点,与给定的P点距离最小。很明显的凸性函数,用三分法来解决。
Calc函数即为求某点到P点的距离。
人左右走动,求影子L的最长长度。
根据图,很容易发现当灯,人的头部和墙角成一条直线时(假设此时人站在A点),此时的长度是影子全在地上的最长长度。当人再向右走时,影子开始投影到墙上,当人贴着墙,影子长度即为人的高度。所以当人从A点走到墙,函数是先递增再递减,为凸性函数,所以我们可以用三分法来求解。

使用特权

评论回复
板凳
東南博士|  楼主 | 2015-9-18 10:10 | 只看该作者
下面只给出Calc函数,其他直接套模版即可。
double Calc(double x)
{
    return (h * D - H * x) / (D - x) + x;
}
三分法,首先旋转的角度只要在0到180度即可,超过180度跟前面的相同的。坐标轴旋转后,坐标变换为:
X’ = x * cosa - y * sina;
y’ = y * cosa + x * sina;

使用特权

评论回复

打赏榜单

zhangmangui 打赏了 1.00 元 2015-09-18

地板
zhangmangui| | 2015-9-18 22:34 | 只看该作者
感谢分享     

使用特权

评论回复
5
zhangbo1985| | 2015-9-20 16:47 | 只看该作者
東南博士 发表于 2015-9-18 10:08
分析三分法的具体实现
条线段上找到一点,与给定的P点距离最小。很明显的凸性函数,用三分法来解决。
Calc ...

这个对于凸性函数的求解很方便的。

使用特权

评论回复
6
zhangbo1985| | 2015-9-20 16:48 | 只看该作者
比二分法要来的快捷的,值得推广。

使用特权

评论回复
7
東南博士|  楼主 | 2015-9-25 14:42 | 只看该作者
对于凸性函数的求解很方便的
另外,大家说,如果搞一个模拟量的最大值跟踪的话,如何做一个最大值的比较呢?而这个最大值又是一个不可估计的数值。

使用特权

评论回复
8
baimiaocun2015| | 2015-9-26 11:22 | 只看该作者
这个就看具体的数据处理时的应用了

使用特权

评论回复
9
拉克丝| | 2015-9-27 20:59 | 只看该作者
对于凸性函数的求解很方便

使用特权

评论回复
10
zhangmangui| | 2015-9-28 23:55 | 只看该作者
期待新的分享

使用特权

评论回复
11
suzhanhua| | 2015-9-29 22:55 | 只看该作者
直接求点不行吗

使用特权

评论回复
12
suzhanhua| | 2015-9-29 22:55 | 只看该作者
就是计算麻烦一些。

使用特权

评论回复
13
天灵灵地灵灵| | 2015-9-30 23:07 | 只看该作者
比二分法要来的快捷

使用特权

评论回复
14
598330983| | 2015-9-30 23:18 | 只看该作者
比二分法要来的快捷的,值得推广。

使用特权

评论回复
15
734774645| | 2015-9-30 23:27 | 只看该作者
学习一下这个新方法

使用特权

评论回复
发新帖 本帖赏金 1.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

382

主题

6081

帖子

34

粉丝