二分法实例应用(一)

简介: 二分法实例应用(一):方程求解(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 的定时任务方式更高效且安全。
427 24
【📕分布式锁通关指南 07】源码剖析redisson利用看门狗机制异步维持客户端锁
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习:从基础到高级应用
【10月更文挑战第3天】本文将深入浅出地介绍深度学习的基本概念、关键技术和应用实例。我们将从神经网络的基本原理出发,逐步探索深度学习的核心算法和模型,并通过具体案例展示如何将这些理论应用于实际问题中。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和启发。
|
7月前
|
消息中间件 数据库
如何保证消息的可靠性?可以百分百保证MQ的消息可靠性吗?
如何保证消息的可靠性?可以百分百保证MQ的消息可靠性吗?
|
11月前
|
UED
「Mac畅玩鸿蒙与硬件17」鸿蒙UI组件篇7 - Animation组件基础
在应用开发中,动画效果可以增强用户体验。鸿蒙框架提供了 translate、scale 和 rotate 等动画功能,允许对组件进行平移、缩放和旋转等操作。本篇将介绍 Animation 组件的基础知识和示例代码。
566 10
「Mac畅玩鸿蒙与硬件17」鸿蒙UI组件篇7 - Animation组件基础
|
12月前
|
机器学习/深度学习 数据采集 传感器
深度学习之智能交通信号控制
基于深度学习的智能交通信号控制是交通管理领域的一项创新技术,旨在提高交通流量的效率,减少拥堵和排放,并改善交通安全。通过深度学习技术,交通信号控制系统可以实时分析交通数据,优化信号配时和调度,从而实现智能化的交通管理。
353 2
|
弹性计算 自然语言处理 Windows
通义灵码 Visual Studio 下载安装指南(附安装包)
本安装步骤适用于 Windows 10 及以上操作系统中安装和使用通义灵码。
135330 21
|
机器学习/深度学习 数据可视化 数据挖掘
R语言深度学习卷积神经网络 (CNN)对 CIFAR 图像进行分类:训练与结果评估可视化
R语言深度学习卷积神经网络 (CNN)对 CIFAR 图像进行分类:训练与结果评估可视化
遥感数据趋势分析Sen+mk
Sen's Slope估计器和Mann-Kendall趋势检验的结合,为遥感数据的长期趋势分析提供了一个强大的工具。Sen's Slope对异常值不敏感,而Mann-Kendall则能确定趋势的显著性和方向。在遥感数据的处理和分析中,正确应用这两种方法能够有效地挖掘出数据背后的环境和气候变化信息,对于科学研究和决策支持都具有重要价值。
528 3
|
网络协议 数据安全/隐私保护 网络架构