用C++编写程序 用牛顿迭代法求方程 3*x*x*x-4*x*x-5*x+13=0 在x=1附近的根,要求精度为10的-6次方 5
2个回答
展开全部
#include <iostream>
#include <cmath>
using namespace std;
static k=0;
static int count=1;
double f(double x)
{
return (3*x*x*x-4*x*x-5*x+13);//返回f(x)=3*x*x*x-4*x*x-5*x+13的值
}
int main()
{
double x0,x1,x2;
double e=0.000001;//精度
cout<<"请输入任意两个数作为初值,X0<X1"<<endl;
cin>>x0>>x1;
x2=x1-f(x1)*(x1-x0)/(f(x1)-f(x0));
while(x2-x1>e||x1-x2>e)
{
x0=x1;
x1=x2;
x2=x1-f(x1)*(x1-x0)/(f(x1)-f(x0));
count+=1;
}
cout<<"方程的根为:"<<x2<<endl;
cout<<"迭代的次数为:"<<count<<endl;
return 0;
}
#include <cmath>
using namespace std;
static k=0;
static int count=1;
double f(double x)
{
return (3*x*x*x-4*x*x-5*x+13);//返回f(x)=3*x*x*x-4*x*x-5*x+13的值
}
int main()
{
double x0,x1,x2;
double e=0.000001;//精度
cout<<"请输入任意两个数作为初值,X0<X1"<<endl;
cin>>x0>>x1;
x2=x1-f(x1)*(x1-x0)/(f(x1)-f(x0));
while(x2-x1>e||x1-x2>e)
{
x0=x1;
x1=x2;
x2=x1-f(x1)*(x1-x0)/(f(x1)-f(x0));
count+=1;
}
cout<<"方程的根为:"<<x2<<endl;
cout<<"迭代的次数为:"<<count<<endl;
return 0;
}
展开全部
感觉楼上的回答有点问题,x2=x1-f(x1)*(x1-x0)/(f(x1)-f(x0)); 没有用到方程导数,是割线法?
下面是百度百科上的代码供参考。只要令 a=3 b=-4 c=-5 d=13 x=1 就可以了
C++代码
//此函数是用来求3元一次方程ax^3+bx^2+cx+d=0的解
//比如 x^3-27=0,我们就可以输入1 0 0 -27,这样我们就可以得到一个解
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double diedai(double a,double b,double c,double d,double x);
double a,b,c,d;
double x=1.0;
cout<<"请依次输入方程四个系数:";
cin>>a>>b>>c>>d;
x=diedai(a,b,c,d,x);
cout<<x<<endl;
return 0;
}
double diedai(double a,double b,double c,double d,double x)
{
while(abs(a*x*x*x+b*x*x+c*x+d)>0.000001)
{
x=x-(a*x*x*x+b*x*x+c*x+d)/(3*a*x*x+2*b*x+c);
}
return x;
}
下面是百度百科上的代码供参考。只要令 a=3 b=-4 c=-5 d=13 x=1 就可以了
C++代码
//此函数是用来求3元一次方程ax^3+bx^2+cx+d=0的解
//比如 x^3-27=0,我们就可以输入1 0 0 -27,这样我们就可以得到一个解
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double diedai(double a,double b,double c,double d,double x);
double a,b,c,d;
double x=1.0;
cout<<"请依次输入方程四个系数:";
cin>>a>>b>>c>>d;
x=diedai(a,b,c,d,x);
cout<<x<<endl;
return 0;
}
double diedai(double a,double b,double c,double d,double x)
{
while(abs(a*x*x*x+b*x*x+c*x+d)>0.000001)
{
x=x-(a*x*x*x+b*x*x+c*x+d)/(3*a*x*x+2*b*x+c);
}
return x;
}
参考资料: http://baike.baidu.com/view/643093.htm
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询