C++ 二分法求解方程的解
二分法是一种求解方程近似根的方法。对于一个函数 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++ 二分法求解方程的解的更多相关文章
- vijosP1371 方程的解
vijosP1371 方程的解 链接:https://vijos.org/p/1371 [思路] 组合公式+快速幂+高精单精. 求x^x %1000:因为x最大为2^31-1所以用快速幂在O(logx ...
- [Swift]LeetCode640. 求解方程 | Solve the Equation
Solve a given equation and return the value of x in the form of string "x=#value". The equ ...
- MATLAB求解方程与方程组
1. solve函数 ①求解单个一元方程的数值解 syms x; x0 = double(solve(x +2 - exp(x),x)); 求x+2 = exp(x)的解,结果用double ...
- Leetcode 640.求解方程
求解方程 求解一个给定的方程,将x以字符串"x=#value"的形式返回.该方程仅包含'+',' - '操作,变量 x 和其对应系数. 如果方程没有解,请返回"No so ...
- Java实现 LeetCode 640 求解方程(计算器的加减法计算)
640. 求解方程 求解一个给定的方程,将x以字符串"x=#value"的形式返回.该方程仅包含'+',' - '操作,变量 x 和其对应系数. 如果方程没有解,请返回" ...
- 方程的解_NOI导刊2010提高
方程的解 给定x,求\(a_1+a_2+...+a_k=x^x\ mod\ 1000\)的正整数解解的组数,对于100%的数据,k≤100,x≤2^31-1. 解 显然x是可以快速幂得到答案的,而该问 ...
- P1771 方程的解_NOI导刊2010提高(01)
P1771 方程的解_NOI导刊2010提高(01) 按题意用快速幂把$g(x)$求出来 发现这不就是个组合数入门题吗! $k$个人分$g(x)$个苹果,每人最少分$1$个,有几种方法? 根据插板法, ...
- 【Java例题】4.4使用牛顿迭代法求方程的解
4. 使用牛顿迭代法求方程的解:x^3-2x-5=0区间为[2,3]这里的"^"表示乘方. package chapter4; public class demo4 { publi ...
- 模拟7题解 T1方程的解
方程的解 [扩展欧几里德] 首先进行特判,两个小时基本想到了,除了a!=0,b==0,a*c<0这种情况 其次就是一般情况: 首先exgcd求出ax+by=GCD(a,b)的一组任意解 然后两边 ...
随机推荐
- js 获取 最近七天 30天 昨天的方法 -- 转
自己用到了 找了下 先附上原作的链接 http://www.cnblogs.com/songdongdong/p/7251254.html 原谅我窃取你的果实 谢谢你谢谢你 ~ 先附上我自己用到 ...
- Linq SelectMany 交叉连接
class Student1 { public int Score { get; set; } public Student1(int score) { this.Score = score; } } ...
- Nagios监控的部署与配置
[安装Nagios] yum install -y httpd httpd-devel httpd-tools mysql mysql-devel mysql-server php php-devel ...
- 您的 Java 代码安全吗 — 还是暴露在外? 【转】
在开发 Java Web 应用程序时,您需要确保应用程序拥有完善的安全性特征补充.这里在谈到 Java 安全性时,我们并不谈及 Java 语言提供的安全性 API,也不涉及使用 Java 代码来保护应 ...
- NHibernate的基本使用
一.O/R Mapping 概论 工厂模式+反射+每个数据库的DAL层来解决数据访问层的代码 针对数据库表中字段的变化我们是无法预料的,所以每一次用户需求的修改都会直接导致我们程序员来修改—实体类(B ...
- jquery实现链接的title快速出现
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- JVM 掌握要点
重读JVM jvm系列:jvm知识点总览 1. 认识Java虚拟机 默认Hotspot实现 2. 类加载机制 知道双亲委派模型 编译为class javac → 装载 class ClassLoade ...
- TR069网管协议应用在Android系统开发的前言
随着智能平台的终端设备不断发展,迫切需要我们解决这些终端的管理问题,而现有的终端统一管理平台已经成熟,主要是基于tr069协议网管平台,比如华为的itms等终端管理平台.所以,这篇文章就是为了实现一种 ...
- 关于tr069网管开发系列教程
原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 声明:本系列涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅 ...
- linux文件访问权限(像rw-r--rw-是什么意思)
Linux的文件访问权限分为 读.写.执行三种 r:可读(4) w:可写(2)对目录来说则可新建文件 x:可执行(1)对目录来说则可进入该目录 可用 ls -l 查看文件 像上图的-rw-r--rw- ...