二元搜索解优化问题

4 篇文章 0 订阅
#include <stdio.h>
//binSearch计算x^2=2的近似解,精度1e-5; 证明二元搜索的快速低复杂度寻优能力
float func(float x) {
    return x * x - 2;
}

float binSearch(float beg, float end, float acc) {
    float mid;
    while ( end - beg > acc) {
        mid = (end + beg) / 2;
        if (func(mid) > 0) { //递增是大于,否者相反
            end = mid;
        } else {
            beg = mid;
        }
        printf("beg,end,acc %f,%f,%f\n",beg,end,acc);
    }
    return mid;
}

int main () {
    float a = binSearch(1, 2, 1e-5);
    printf("x*x = 2 solution is %f\n", a); //binSearch(1, 2, 1e-2)
    printf("x*x = 2 solution is %f\n", binSearch(1, 2, 1e-6));
    printf("x*x = 2 solution is %f\n", binSearch(1, 2, 1e-10));
    //1e-10明显超出float精度了,造成算法不收敛;
    
    return 0;
}
  • 圆剖面,倒水之后水面下和总半圆面积比值r(0.6比如),问灌水高度多少;转为优化问题 灌水高度h介于[0,R]之间优化;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值