二分法是一种求解方程近似根的方法。对于一个函数 f(x)f(x),使用二分法求 f(x)f(x) 近似解的时候,我们先设定一个迭代区间(在这个题目上,我们之后给出了的两个初值决定的区间 [-20,20][−20,20]),区间两端自变量 xx 的值对应的 f(x)f(x) 值是异号的,之后我们会计算出两端 xx 的中点位置 x'x′ 所对应的 f(x')f(x′) ,然后更新我们的迭代区间,确保对应的迭代区间的两端 xx 的值对应的 f(x)f(x) 值还会是异号的。

重复这个过程直到我们某一次中点值 x'x′ 对应的 f(x') < \epsilonf(x′)<ϵ (题目中可以直接用EPSILON)就可以将这个 x'x′ 作为近似解返回给 main 函数了。

例如:

上面所示的一个迭代过程的第一次的迭代区间是 [a_1, b_1][a1​,b1​],取中点 b_2b2​,然后第二次的迭代区间是 [a_1, b_2][a1​,b2​],再取中点 a_2a2​,然后第三次的迭代区间是 [a_2, b_2][a2​,b2​],然后取 a_3a3​,然后第四次的迭代区间是 [a_3, b_2][a3​,b2​],再取红色中点 cc,我们得到发现 f(c)f(c) 的值已经小于 \epsilonϵ,输出 cc 作为近似解。

在这里,我们将用它实现对形如 px + q = 0px+q=0 的一元一次方程的求解。

在这里,你完成的程序将被输入两个正整数 pp 和 qq(你可以认为测评机给出的 0 < |p| \leq 10000<∣p∣≤1000且 0 < |q| \leq 10000<∣q∣≤1000),程序需要用二分法求出 px + q = 0px+q=0 的近似解。

输入格式

测评机会反复运行你的程序。每次程序运行时,输入为一行,包括一组被空格分隔开的符合描述的正整数 pp 和 qq。你可以认为输入数据构成的方程 px + q = 0px+q=0 都是有解且解在 [-20, 20][−20,20] 的区间内。

输出格式

输出为一行,包括一个数字。为方程 px + q = 0px+q=0 的近似解。请使用四舍五入的方式保留小数点后 44 位小数。

#include <cstdio>
#include <cmath>
#include<iostream>
#define EPSILON 1e-7
using namespace std; double bisection(int p, int q, double(*func)(int, int, double));
double f(int p, int q, double x);
int main() {
int p;
int q;
//scanf_s("%d %d", &p, &q);
//printf_s("%.4lf\n", bisection(p, q, f));
cin >> p >> q;
cout << bisection(p, q, f) << endl;
return 0;
} double bisection(int p, int q, double(*func)(int, int, double)) {
double m = -20.0;
double n = 20.0;
double h = (m + n) / 2.0;
double u = 0.0;
while( abs((*func)(p, q, h))>EPSILON)
{
double z = (*func)(p, q, m);
double y = (*func)(p, q, n);
u = (*func)(p, q, h);
cout << u << endl;
if (z > 0 && u > 0 || z < 0 && u < 0)
{
m = (m + n) / 2;
n = n;
}
else
{
n = double(m + n) / 2;
m = m;
} h = (double)(m + n) / 2; } return h; } double f(int p, int q, double x) {
return p * x + q;
}

  

C++ 二分法求解方程的解的更多相关文章

  1. vijosP1371 方程的解

    vijosP1371 方程的解 链接:https://vijos.org/p/1371 [思路] 组合公式+快速幂+高精单精. 求x^x %1000:因为x最大为2^31-1所以用快速幂在O(logx ...

  2. [Swift]LeetCode640. 求解方程 | Solve the Equation

    Solve a given equation and return the value of x in the form of string "x=#value". The equ ...

  3. MATLAB求解方程与方程组

    1.      solve函数 ①求解单个一元方程的数值解 syms x; x0 = double(solve(x +2 - exp(x),x)); 求x+2 = exp(x)的解,结果用double ...

  4. Leetcode 640.求解方程

    求解方程 求解一个给定的方程,将x以字符串"x=#value"的形式返回.该方程仅包含'+',' - '操作,变量 x 和其对应系数. 如果方程没有解,请返回"No so ...

  5. Java实现 LeetCode 640 求解方程(计算器的加减法计算)

    640. 求解方程 求解一个给定的方程,将x以字符串"x=#value"的形式返回.该方程仅包含'+',' - '操作,变量 x 和其对应系数. 如果方程没有解,请返回" ...

  6. 方程的解_NOI导刊2010提高

    方程的解 给定x,求\(a_1+a_2+...+a_k=x^x\ mod\ 1000\)的正整数解解的组数,对于100%的数据,k≤100,x≤2^31-1. 解 显然x是可以快速幂得到答案的,而该问 ...

  7. P1771 方程的解_NOI导刊2010提高(01)

    P1771 方程的解_NOI导刊2010提高(01) 按题意用快速幂把$g(x)$求出来 发现这不就是个组合数入门题吗! $k$个人分$g(x)$个苹果,每人最少分$1$个,有几种方法? 根据插板法, ...

  8. 【Java例题】4.4使用牛顿迭代法求方程的解

    4. 使用牛顿迭代法求方程的解:x^3-2x-5=0区间为[2,3]这里的"^"表示乘方. package chapter4; public class demo4 { publi ...

  9. 模拟7题解 T1方程的解

    方程的解 [扩展欧几里德] 首先进行特判,两个小时基本想到了,除了a!=0,b==0,a*c<0这种情况 其次就是一般情况: 首先exgcd求出ax+by=GCD(a,b)的一组任意解 然后两边 ...

随机推荐

  1. Packet for query is too large (84 > -1).

    windows下的resin配置连接mysql,常用的安全的做法是将数据库信息配置到conf目录下的resin.xml文件中. 因为resin连接mysql不是必须的,所以resin本身没有提供mys ...

  2. OpenShift实战(一):OpenShift高级安装

    1.1 服务器基本信息 本次安装采用一个master.5个node.3个etcd,node节点两块硬盘,60G磁盘用于docker storage,xxx改为自己的域名或主机名. 节点 功能 IP 内 ...

  3. ThreadLocal源码分析:(一)set(T value)方法

    在ThreadLocal的get(),set()的时候都会清除线程ThreadLocalMap里所有key为null的value. 而ThreadLocal的remove()方法会先将Entry中对k ...

  4. .NET Core/.NET之Stream简介

    之前写了一篇C#装饰模式的文章提到了.NET Core的Stream, 所以这里尽量把Stream介绍全点. (都是书上的内容) .NET Core/.NET的Streams 首先需要知道, Syst ...

  5. lua保存table到文件并从文件解析成table

    require("json") result = { ["ip"]="192.168.0.177", ["date"]= ...

  6. 微信号的openid的深入理解

    header('Location:https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$this->appid.'&r ...

  7. 在windows环境下安装redis和phpredis的扩展

    在windows环境下安装redis和phpredis的扩展 1.首先配置php: 需要在windows的集成环境中找到php的扩展文件夹,ext,然后在网上寻找自己的php对应的.dll文件 比如说 ...

  8. vSphere Client 搭建Windows server 2008 r2 服务器指南

    下载准备 下载并安装vSphere Client 链接:https://pan.baidu.com/s/1v0IrGrMjpA2FGeqagaJN-g 密码:zzd1 下载Windows server ...

  9. python 函数 装饰器 内置函数

    函数 装饰器 内置函数 一.命名空间和作用域 二.装饰器 1.无参数 2.函数有参数 3.函数动态参数 4.装饰器参数 三.内置函数 salaries={ 'egon':3000, 'alex':10 ...

  10. Asp.Net Core 2.0 项目实战(8)Core下缓存操作、序列化操作、JSON操作等Helper集合类

    本文目录 1.  前沿 2.CacheHelper基于Microsoft.Extensions.Caching.Memory封装 3.XmlHelper快速操作xml文档 4.Serializatio ...