c++问题,请求高手帮忙啊。

来源:百度知道 编辑:UC知道 时间:2024/05/06 23:41:18
已经想的我头痛了。。。。。
我都不知道自己哪里错了。
#include"iostream"
using namespace std;
double f(double a,double b,double c,double d,double x);
double df(double a,double b,double c,double d,double x);
double getroot(double a,double b,double c,double d,double x0);
void main()
{
double a=2,b=-4,c=3,d=-6,x0=1.5;
while(f(a,b,c,d,x0)>1e-21)
{
x0=getroot(a,b,c,d,x0);
}
cout<<x0<<endl;
a=1;b=2;c=3;d=4;x0=1;
while(f(a,b,c,d,x0)>1e-31)
{
x0=getroot(a,b,c,d,x0);
}
cout<<x0<<endl;
}
double f(double a,double b,double c,double d,double x)
{return (a*x*x*x+b*x*x+c*x+d);}
double df(double a,double b,double c,double d,double x)
{return (3*a*x*x+2*b*x+c);}
double getroot(double a,double b,double c,double d,double x)
{return (x-f(a,b,c,d,x)/df(a,b,c,d,x));}
运行编译都通过,算法错了,牛顿迭代法求根。我都都快晕了。
对了我追加分啊。

#include "stdafx.h"
#include <iostream>
using namespace std;
double f(double a,double b,double c,double d,double x);
double df(double a,double b,double c,double d,double x);
double getroot(double a,double b,double c,double d,double x);
void main()
{
double a=2,b=-4,c=3,d=-6,x=1.5;
while(f(a,b,c,d,x)>1e-21)
{
x=getroot(a,b,c,d,x);
}
cout<<x<<endl;
a=1;b=2;c=3;d=4;x=1;
while(f(a,b,c,d,x)>1e-31)
{
x=getroot(a,b,c,d,x);
}
cout<<x<<endl;
}
double f(double a,double b,double c,double d,double x)
{return (a*x*x*x+b*x*x+c*x+d);}
double df(double a,double b,double c,double d,double x)
{return (3*a*x*x+2*b*x+c);}
double getroot(double a,double b,double c,double d,double x)
{return (x-f(a,b,c,d,x)/df(a,b,c,d,x));}
看看这是不是你想要的结果。
改了几个地方,你自己对照看吧。

while(fabs(f(a,b,c,d,x0)) > 1e-21)