二分法求三次方程的根

二分法求根

#include "stdio.h"
#define f(x) a*x*x*x+b*x*x+c*x+d

int main()
{
    freopen("in.txt", "r", stdin);
    int a, b, c, d;
    double x1, x2, x, y1, y2, y;
    while (scanf("%d%d%d%d", &a, &b, &c, &d) != EOF)
    {
        x1 = -100;
        x2 = 100;
        x = (x1+x2) / 2;
        while ((x2-x1) > 0.01)
        {
            y1 = f(x1);
            y2 = f(x2);
            y = f(x);
            if (y1 == 0)
            {
                x = x1;
                break;
            }
            if (y2 == 0)
            {
                x = x2;
                break;
            }
            if (y1*y < 0)
            {
                x2 = x;
                x = (x1+x2) / 2;
            }
            else
            {
                x1 = x;
                x = (x1+x2) / 2;
            }
        }
        printf("%.f\n", x);
    }
    return 0;
}
时间: 2024-08-05 15:21:00

二分法求三次方程的根的相关文章

Openjudge ch0111/t6253 用二分法求方程的根

这题只是考你最后有没有(r-l)/2而已…… 总时间限制: 1000ms 内存限制: 65536kB 描述 用二分法求下面方程在(-10, 10)之间的一个根. 2x3- 4x2+ 3x- 6 = 0 输入 一个小于1的非负实数e,它的值表示所能允许的误差 输出 一个实数,其值为求得的一个根,要求精确到小数点后8位.若该区间上没有根,则输出“No Solution” 样例输入 0 样例输出 2.00000000 提示 对于一个连续函数f(x),若f(a)*f(b) <= 0,则f(x)在区间[a

C语言之基本算法23—二分法求方程近似根

//二分法! /* ======================================================== 题目:用二分法求解方程3x^3-2x^2-16=0的近似解. ========================================================= */ #include <stdio.h> #include <math.h> double hs(double t) { return 3*t*t*t-2*t*t-16;/

02:二分法求函数的零点

http://noi.openjudge.cn/ch0111/02/ 02:二分法求函数的零点 总时间限制:  1000ms 内存限制:  65536kB 描述 有函数: f(x) = x5 - 15 * x4+ 85 * x3- 225 * x2+ 274 * x - 121 已知 f(1.5) > 0 , f(2.4) < 0 且方程 f(x) = 0 在区间 [1.5,2.4] 有且只有一个根,请用二分法求出该根. 输入 无. 输出 该方程在区间[1.5,2.4]中的根.要求四舍五入到小

4142:二分法求函数的零点(二分查找)

查看 提交 统计 提示 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 有函数: f(x) = x5 - 15 * x4+ 85 * x3- 225 * x2+ 274 * x - 121 已知 f(1.5) > 0 , f(2.4) < 0 且方程 f(x) = 0 在区间 [1.5,2.4] 有且只有一个根,请用二分法求出该根. 输入 无. 输出 该方程在区间[1.5,2.4]中的根.要求四舍五入到小数点后6位. 样例输入 无 样例输出 1.849016 只输出结果

链表实现二分法求根

#include<iostream>#include<iomanip>#include<cmath>using namespace std;class poly{public: double c; int e; poly*next;};poly*input();double f(poly*head,double x);double root(poly*head,double a, double b);int main(){ poly*head; double a, b;

用弦截法求一元三次方程的根x^3-5x^2+16x-80=0 ;带注释!

//用弦截法求一元三次方程的根x^3-5x^2+16x-80=0 #include<stdio.h>#include<math.h> float f(float x) //定义子函数f(x) = x^3-5x^2+16x-80,当f(x) →0时,则x即为所求的实数根:  {     float y;     y=((x-5.0)*x+16.0)*x-80.0;     return(y);          //返回f(x)的值  }    float xpoint( float

用二分法求下面方程在(-10,10)之间的根。【谭浩强第四版课后习题】

用二分法求下面方程在(-10,10)之间的根:2x3-4x2+3x-6=0 编程思路:仿照二分查找,将区间划分为两部分,记录区间左右端点,得到中点.每次运算将中点带入方程: 结果>0:根应该向小一点的值拟合,high=mid; 结果<0:根应该向大一点的值拟合,low=mid; 对于跳出循环的条件,我首先是认为low和high应该无限逼近:while(fabs(low-high)>1e-5),当循环体内结果=0后,便使用break跳出循环:if(temp==0) break;但是没有得到

03-1. 二分法求多项式单根

二分法求函数根的原理为:如果连续函数f(x)在区间[a, b]的两个端点取值异号,即f(a)f(b)<0,则它在这个区间内至少存在1个根r,即f(r)=0. 二分法的步骤为: 检查区间长度,如果小于给定阈值,则停止,输出区间中点(a+b)/2:否则 如果f(a)f(b)<0,则计算中点的值f((a+b)/2): 如果f((a+b)/2)正好为0,则(a+b)/2就是要求的根:否则 如果f((a+b)/2)与f(a)同号,则说明根在区间[(a+b)/2, b],令a=(a+b)/2,重复循环:

中国大学MOOC-陈越、何钦铭-数据结构基础习题集 03-1. 二分法求多项式单根

03-1. 二分法求多项式单根(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 杨起帆(浙江大学城市学院) 二分法求函数根的原理为:如果连续函数f(x)在区间[a, b]的两个端点取值异号,即f(a)f(b)<0,则它在这个区间内至少存在1个根r,即f(r)=0. 二分法的步骤为: 检查区间长度,如果小于给定阈值,则停止,输出区间中点(a+b)/2:否则 如果f(a)f(b)<0,则计算中点的值f((a+b)/2): 如