如何用二分法实现求解一个方程的根
----------------解决方案--------------------------------------------------------
我是个菜鸟
请问你说的二分法是个什么方法啊
----------------解决方案--------------------------------------------------------
先对给定的范围(定义域,假设为x1,x2)做判断F(x1),F(x2),F((x1+x2)/2);使得x更新为(x1+x2)/2,条件就是两个函数同号.
再假定F(x1)*F((x1+x2)/2)>0;(x2,同理)
则做x1=(x1+x2)/2
一直做下去直到所得到的函数值F((x1+x2)/2)很接近0;
还有弦截法,主要是看两点形成的直线与曲线的点做更新,还有做切线的交点.原理是一样的,使用的是若F(x1)*F(x2)<0,则在(x1,x2)之间一定有一个零点.
----------------解决方案--------------------------------------------------------
楼主的是什么方程?一元二次?
----------------解决方案--------------------------------------------------------
怎么看了这么多都是书上有的啊 好好看书才是真道理
----------------解决方案--------------------------------------------------------
一元二次方程
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
二分法求2*x*x*x-4*x*x+3*x-6=0
#include <stdio.h>
#include <math.h>
void main()
{
float x0,x1,x2,fx0,fx1,fx2;
do
{
PRINTF("enter x1 & x2:");
scanf("%f,%f",&x1,&x2);
fx1=x1*((x\2*x1-4)*x1+3)-6;
fx2=x2*((2*x2-4)*x2+3)-6;
}while(fx1*fx2>0);
do
{
x0=(x1+x2)/2;
fx0=x0*((2*x0-4)*x0+3)-6;
if ((fx0*fx1)>0)
{
x2=x0;
fx2=fx0;
}
else
(
x1=x0;
fx1=fx0;
}
}while(fabs(fx0)>=1e-5);
printf("x=%6.2f\n",x0);
}
这是我看到的一个二分法的实列,不知道对你有没有用
----------------解决方案--------------------------------------------------------
这里需要知道中值定理,最大x的fx和最小x的fx如果乘积同号则与x轴无交点,反之则有解,然后逼近就行
----------------解决方案--------------------------------------------------------