二分法实例应用(一)

简介: 二分法实例应用(一):方程求解(POJ 4140)

二分算法实例应用(一)

方程求解 (POJ 4140)

Description

求下面方程的根:f(x) = x^3- 5x^2+ 10x - 80 = 0。

Input

-

Output

精确到小数点后9位。

Sample Input

-

Sample Output

5.705085932



算法思想:

对方程f(x)求导,得f'(x)=3x^2-10x+10。其中f'(x)>0恒成立。

故,f(x)为严格单调增函数。由方程易知f(0)<0,且f(100)>0,所以由零点定理可知,在区间[0,100]内有且仅有一个实根。

由于f(x)在[0,100]内是单调的,所以可以用二分法在区间[0,100]中进行根的满足性探索。



代码逻辑:

  1. 在C语言中,进行浮点数为0判断时,一般考虑判断该数的绝对值是否小于一个极小值ε,通常ε选10^-6。

    代码如下:

    #define EPS 1e-6
  2. 设计求f(x)的值的函数。

    double fun(double x) {
        return pow(x, 3) - 5 * pow(x, 2) + 10 * x - 80;
    }
  3. 采用二分法进行解的探索,

    1. 使用left,right变量来记录根的存在区间的左右端点。x取区间中点。
    2. 若f(x)>0则表明x点为更小的右端点,修改右端点为x;反之,若f(x)≤0则表明x为更大的左端点,修改左端点为x;
    3. 再计算当前区间中点的函数值,返回步骤2进行判断。直至找到一个使f(x)=0的根x。



代码整合:

//
// Created by Ss1Two on 2023/2/7.
//

#include "stdio.h"
#include "math.h"

double EPS = 1e-6;//无穷小值Epsilon->ε=10^-10,用于判断浮点数是否为0

double EquationSolving();//线性方程求解函数声明

double fun(double x);//线性方程计算函数声明

int main(void) {
    printf("%.9f\n", EquationSolving());
    return 0;
}


double fun(double x) {
    return pow(x, 3) - 5 * pow(x, 2) + 10 * x - 80;
}

double EquationSolving() {
    //x->自变量,y->函数值,left->解区间左端点,right->解区间右端点
    double x, left = 0, right = 100, y;

    x = left + (right - left) / 2;
    y = fun(x);

    while (fabs(y) > EPS) {
        if (y > 0) {
            right = x;
        } else {
            left = x;
        }
        x = left + (right - left) / 2;
        y = fun(x);
    }
    return x;
}


Created by Ss1Two on 2023/2/7

目录
相关文章
|
10月前
|
存储 程序员 编译器
C 语言中的数据类型转换:连接不同数据世界的桥梁
C语言中的数据类型转换是程序设计中不可或缺的一部分,它如同连接不同数据世界的桥梁,使得不同类型的变量之间能够互相传递和转换,确保了程序的灵活性与兼容性。通过强制类型转换或自动类型转换,C语言允许开发者在保证数据完整性的前提下,实现复杂的数据处理逻辑。
|
7月前
|
安全
【📕分布式锁通关指南 07】源码剖析redisson利用看门狗机制异步维持客户端锁
Redisson 的看门狗机制是解决分布式锁续期问题的核心功能。当通过 `lock()` 方法加锁且未指定租约时间时,默认启用 30 秒的看门狗超时时间。其原理是在获取锁后创建一个定时任务,每隔 1/3 超时时间(默认 10 秒)通过 Lua 脚本检查锁状态并延长过期时间。续期操作异步执行,确保业务线程不被阻塞,同时仅当前持有锁的线程可成功续期。锁释放时自动清理看门狗任务,避免资源浪费。学习源码后需注意:避免使用带超时参数的加锁方法、控制业务执行时间、及时释放锁以优化性能。相比手动循环续期,Redisson 的定时任务方式更高效且安全。
398 24
【📕分布式锁通关指南 07】源码剖析redisson利用看门狗机制异步维持客户端锁
|
7月前
|
消息中间件 数据库
如何保证消息的可靠性?可以百分百保证MQ的消息可靠性吗?
如何保证消息的可靠性?可以百分百保证MQ的消息可靠性吗?
|
11月前
|
UED
「Mac畅玩鸿蒙与硬件17」鸿蒙UI组件篇7 - Animation组件基础
在应用开发中,动画效果可以增强用户体验。鸿蒙框架提供了 translate、scale 和 rotate 等动画功能,允许对组件进行平移、缩放和旋转等操作。本篇将介绍 Animation 组件的基础知识和示例代码。
549 10
「Mac畅玩鸿蒙与硬件17」鸿蒙UI组件篇7 - Animation组件基础
|
弹性计算 自然语言处理 Windows
通义灵码 Visual Studio 下载安装指南(附安装包)
本安装步骤适用于 Windows 10 及以上操作系统中安装和使用通义灵码。
135178 21
|
人工智能
AI工具:Gnomic智能体
AI工具:Gnomic智能体
214 0
|
机器学习/深度学习 数据可视化 数据挖掘
R语言深度学习卷积神经网络 (CNN)对 CIFAR 图像进行分类:训练与结果评估可视化
R语言深度学习卷积神经网络 (CNN)对 CIFAR 图像进行分类:训练与结果评估可视化
|
存储 Java 网络安全
如何使用Python批量连接网络设备?
【7月更文挑战第4天】
270 1
如何使用Python批量连接网络设备?
|
网络协议 数据安全/隐私保护 网络架构
|
运维 Kubernetes 监控
构建高效自动化运维体系:基于Docker和Kubernetes的实践指南
【5月更文挑战第29天】 在现代云计算环境中,自动化运维已成为提升服务效率、确保系统稳定性的关键因素。本文深入探讨了如何利用Docker容器化技术和Kubernetes集群管理工具来构建一个高效且灵活的自动化运维体系。通过分析具体实施步骤和策略,我们旨在为读者提供一个清晰的指导框架,以支持他们在不断变化的技术需求中快速部署和扩展应用程序。本指南不仅涉及技术的基础知识,还涵盖了持续集成/持续部署(CI/CD)流程的集成,以及监控和日志管理的优化实践。