编写程序,用二分法求方程2x3-4x2+3x-6=0在(-10,10)之间的根.提示:用do-while语句实现.二分法的计算步骤:准备 计算f(x)在有根区间[a,b]端点处的值f(a),f(b)二分 计算f(x)在区间中点(a+b)/2处的值f[(a+b)/2]判断若f[(a+b)/2]=0,则即是根,计算过程结束.否则,检测:若f[(a+b)/2]与f(a)异号,则根位于区间[a,(a+b)/2]内,这时以(a+b)/2代替b;若f[(a+b)/2]与f(a)同号,则根位于区间[(a+b)/2,b]内,这时以(a+b)/2代替a;反复执行步骤2和3,直到区间[a,b]长度缩小到允许的误差范围之内,此时中点(a+b)/2即为所求的根.下边是我做的,不知道哪里出错了.#include #include void main(){ float a=-10.0;float b=10.0;float fc,fa,c;c=(a+b)/2;fc=2*pow(c,3)-4*pow(c,2)+3*c-6;fa=
编写程序,用二分法求方程2x3-4x2+3x-6=0在(-10,10)之间的根.
提示:
用do-while语句实现.
二分法的计算步骤:
准备 计算f(x)在有根区间[a,b]端点处的值f(a),f(b)
二分 计算f(x)在区间中点(a+b)/2处的值f[(a+b)/2]
判断若f[(a+b)/2]=0,则即是根,计算过程结束.
否则,检测:
若f[(a+b)/2]与f(a)异号,则根位于区间[a,(a+b)/2]内,这时以(a+b)/2代替b;
若f[(a+b)/2]与f(a)同号,则根位于区间[(a+b)/2,b]内,这时以(a+b)/2代替a;
反复执行步骤2和3,直到区间[a,b]长度缩小到允许的误差范围之内,此时中点(a+b)/2即为所求的根.
下边是我做的,不知道哪里出错了.
#include
#include
void main()
{
float a=-10.0;
float b=10.0;
float fc,fa,c;
c=(a+b)/2;
fc=2*pow(c,3)-4*pow(c,2)+3*c-6;
fa=2*pow(a,3)-4*pow(a,2)+3*a-6;
if (fc==0)
printf("the result is %lf.\n",c);
else
{
do
{
c=(a+b)/2;
if (fa*fc0.1e-6);
printf("the result is %lf.\n",c);
}
}
#include
using namespace std;
double p(double x)
{
return 2*x*x*x-4*x*x+3*x-6;
}
int main()
{
double a,b;
cin >> a >> b;
double fa = p(a),fb = p(b),fm;
do
{
fm = p((a+b)/2);
if(fm==0) break;
if(fm*fa