📄 code5_1.cpp
字号:
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
#define MAX 100
#define e 1e-4
double coef[MAX];
double coef_orginal[MAX];
double x[MAX];
double f(double x,double t[])
{
double temp=t[0];
for(int i=1;i<=MAX;i++)
{
if(t[i]==99999)
break;
temp += t[i]*pow(x,i);
}
return temp;
}
void qiudao()
{
int i;
for(i=0;i<=MAX;i++)
{
if(coef[i] == 99999 )
break;
}
i--;
for(int j=1;j<=i;j++)
{
coef[j-1] = coef[j]*j;
}
coef[i] = 99999;
}
int Newton(double x0)
{
int k;
x[0] = x0;
qiudao();
for(k=1;k<=MAX;k++)
{
x[k] = x[k-1]-f(x[k-1],coef_orginal)/f(x[k-1],coef);
if(x[k]-x[k-1]<e&&x[k]-x[k-1]>-e)
break;
}
if(k==MAX)
return -1;
else
return k;
}
int main()
{
cout.precision(8);
cout.setf(ios::fixed);
int i;
cout<<"请输入原函数的系数,按照低次向高次的顺序!并且在完成之后输入99999! 记得系数为0的输入0!"<<endl;
for(i=0;i<=MAX;i++)
{
cin>>coef[i];
coef_orginal[i] = coef[i];
if(coef[i] == 99999)
break;
}
int k;
double x0;
cout<<"请输入x0:"<<endl;
cin>>x0;
k = Newton(x0);
double error[MAX];
for(i=0;i<=k;i++)
{
double t1,t2,t3,temp;
t1 = x[i]-0;
t2 = sqrt(3)-x[i];
t3 = -sqrt(3)-x[i];
if(t1<0) t1 = -t1;
if(t2<0) t2 = -t2;
if(t3<0) t3 = -t3;
if(t1<=t2)
temp = t1;
else temp = t2;
if(temp>t3)
temp = t3;
error[i] = temp;
}
cout<<"用Newton法做出的结果为:"<<endl;
cout<<"x0"<<" k"<<" x[k] f(x) error"<<endl;
for(i=0;i<=k;i++)
{
cout<<x0<<" "<<i<<" "<<x[i]<<" "<<f(x[i],coef)<<" "<<error[i]<<endl;
}
cout<<"sqrt(3) = "<<sqrt(3)<<endl;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -