长沙县移动营业厅:C++解方程

来源:百度文库 编辑:神马品牌网 时间:2024/04/30 02:57:14
2.6x^3-118.85x-303=0
用C++编程解之。。(要求用牛顿法)

#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
double f(double,double ,double ,double);
double df(double,double ,double ,double);
double absv(double);
int main(){
int i=1;
double x,x0,a,b,c;
double cmp[2];
cmp[0]=0.0;
//cin>>x0;
//x=x0;
do{
//cin>>a>>b>>c;
double min;
//min=(a<b)?a:b;
//x=sqrt(min*min-2*c*c);
//cout<<x<<endl;
a=0;b=0;c=0;
cin>>x;
do{
//cout<<f(x,a,b,c)/df(x,a,b,c)<<endl;
//system("pause");

x=x-f(x,a,b,c)/df(x,a,b,c);
cmp[i%2]=x;
i++;
}while(absv(cmp[0]-cmp[1])>10e-15);
cout.precision(3);
cout.setf(ios::fixed);
cout<<x<<endl;
}while(cin.get()!=EOF);
return 0;
}
double absv(double x)
{return (x>0?x:-x);
}

double f(double x,double a,double b,double c)
{//double ans=1/sqrt(a*a-x*x)+1/sqrt(b*b-x*x)-1/c;
a=0;b=0;c=0;
double ans;
ans=2.6*pow(x,3)-118.85*x-303;
return ans;
}
double df(double x,double a,double b,double c)
{ //cout<<x/pow((a*a-x*x),3/2)+x/pow((b*b-x*x),3/2);
//double ans=(x/pow((a*a-x*x),3/2)+x/pow((b*b-x*x),3/2));
a=0;b=0;c=0;
double ans;
ans=8.4*pow(x,2)-118.85;
return ans;
}