用二分法求方程的根(C语言)

想问下大家,如何求2*x*x*x-4*x*x+3*x-6=0在(-10,10)内的全部的根,要是全部的根,不能只求 一个,大家帮帮忙,帮忙分析下,并给出源代码 ,谢谢大家了啊!

第1个回答  推荐于2018-04-09
刚才那个只能找一个根,现在改了下,可以找所有根:
刚才有个小BUG,改了下::
=================================================
#include <math.h>

void FindRoot(void)
{
double dbLeftX = -10.0;
double dbRightX = 10.0;
double dbResultY = 0.0;
double dbTmp = 0.0;
double dbMidleX =0.0;

//当二分点Y的值不为0不是根(即,二分点X不满足方程)
//当区间无限小时完成计算(下面的语句表示当区间不是无限小时继续计算)
while ( abs(dbRightX-dbLeftX) > 0.1e-6 )
{
//二分区间
dbMidleX = ( dbLeftX + dbRightX ) / 2.0;
//算二分点Y的值
dbResultY = 2 * pow(dbMidleX,3) - 4 * pow(dbMidleX,2) + 3 * dbMidleX - 6;

//如果计算的Y值为0时,找到一个根
if ( abs(dbResultY) < 0.1e-6 )
{
printf("Finde a root in [-10,10] , value = [%lf].\n",dbMidleX);
}

//判断方程的根落于刚才二分区间的哪个区间,并生成新的区间.
if ( dbResultY < 0.0 )
{
dbTmp = 2 * pow(dbLeftX,3) - 4 * pow(dbLeftX,2) + 3 * dbLeftX - 6;
if ( dbTmp < 0.0 )
{
dbLeftX = dbMidleX;
}
else
{
dbRightX = dbMidleX;
}
}
else
{
dbTmp = 2 * pow(dbLeftX,3) - 4 * pow(dbLeftX,2) + 3 * dbLeftX - 6;
if ( dbTmp > 0.0 )
{
dbLeftX = dbMidleX;
}
else
{
dbRightX = dbMidleX;
}
}
}

//区间无限小,如果区间两端计算的Y值一个为正一个为负则区间中点也是一个根
if( 2 * pow(dbLeftX,3) - 4 * pow(dbLeftX,2) + 3 * dbLeftX - 6 < 0 &&
2 * pow(dbRightX,3) - 4 * pow(dbRightX,2) + 3 * dbRightX - 6 >0 )
{
printf("Finde a root in [-10,10] , value = [%lf].\n",dbMidleX);
}
}本回答被提问者和网友采纳
第2个回答  2019-01-26
^是位运算符
不是多少次方
改成q1=pow(10,-3),q2=pow(10,-6);

用二分法求方程的根(C语言编写程序)
int main() { double x0, x1, x2, f0, f1, f2;do { printf("请输入两个点:");scanf("%lf,%lf", &x1, &x2);f1 = ((2 * x1 - 4) * x1 + 3) * x1 - 6; \/\/换成你自己的 方程 f2 = ((2 * x2 - 4) * x2 + 3) * x2 - 6; \/\/换成你自己的 方...

C语言二分法求解方程f(x)=0根
二分法是一种求解方程 $f(x) = 0$ 根的迭代算法,具体步骤如下:定义一个函数 $f(x)$;确定初始区间 $[a, b]$,使得 $f(a)$ 和 $f(b)$ 异号;在区间 $[a, b]$ 中取中点 $c = \\frac{a+b}{2}$,计算 $f(c)$;如果 $f(c) = 0$,则 $c$ 是方程的解,算法结束;...

c语言二分法求方程的根的算法
double *result);main(){ double root; printf("Enter a deviation:"); scanf("%lf",& _e); if(_e == 0.0) _e = DEFAULT_E; if(getRoot(DEFAULT_LOWER, DEFAULT_UPPER, &root))

C语言编程 二分法求方程的根
a=c;说明f(a)和f(c)同号,那么使用a(a+b)\/2缩小迭代区间,继续迭代!

C语言实现二分法求解方程在区间内的根
C语言利用二分法策略寻找非线性方程在给定区间内的唯一实根。这种方法的关键在于,对于连续函数[公式],假设其在[a, b]区间内仅有一个实根,通过不断将区间对半分割,直至找到函数值符号变化的位置,从而确定根的确切位置。二分法的具体步骤是:首先,将区间[a, b]分为两部分,取中点[公式],计算函数...

用C语言二分法求方程的所有的根
void main(){ float a,b,x,Sx,Sb,Sa;printf("input a and b :");scanf("%f,%f",&a,&b);Sa=log(a)+2*a-3;Sb=log(b)+2*b-3;while(1){ x=(a+b)\/2;Sx=log(x)+2*x-3;if(Sx<1e-5){ printf("The root is%f",x);break;} if(Sx*Sa<0){ b=x;} else { a=...

C语言表编程:用二分法求一元三次方程的根 要求:又主函数调用求根子函数...
比如用二分法求f(x)=x^3-6x-1=0的实根。代码如下(已调试):include "math.h"main(){ float x,x1,x2;float F(float x,float x1,float x2);printf("请输入区间[x1,x2]\\n");scanf("%f%f",&x1,&x2);printf("x=%f\\n",F(x,x1,x2));} float F(float x,float x1,float x...

c语言 使用二分法求方程额e^x+x=0在(-1,0)之间的根
if(fa*fb>0){printf("不能用二分法求解");break;} c=(a+b)\/2;fc=(*f)(c);if(fabs(fc)<delta) break;else if(fa*fc<0){b=c,fb=fc; } else {a=c,fa=fc;} if (fabs(b-a)<eps) break;printf(" %d\\t\\t%f\\t%f\\n",n++,c,fc);} return c;} float f(float x){...

用c语言编制程序,利用二分法,求方程cosx-3x+1=0在[0,1]的根.精度为0.0...
include <iostream> include <string> include "math.h"using namespace std;double FunExpression(double x)\/\/函数表达式 { return cos(x) - 3*x + 1;} double Function(double low, double high, double e){ double mid = (low + high) \/ 2;if (FunExpression(mid) == 0)return mid;...

c语言 用二分法求方程2x3-4x2+3x-6=0在(-10,10)之间的根
double getX(double,double);void main(){ double a = -10.0;double b = 10.0;cout<<getX(a,b)<<endl;} double compute(double x){ return (2*x*x*x-4*x*x+3*x-6);} double getX(double a,double b){ double mid = (a+b)\/2;if(compute(mid)==0)return mid;else if(...

相似回答