一、问题提出
设方程f(x)=x^3-3x-1=0 有三个实根X1=18739,X2=-0.34727,X3=-1.53209,现采用下面六种不同计算格式,求f(x)=0的根X1,X2;
二、要求
1、编制一个程序进行运算,最后打印出每种迭代格式的敛散情况;
2、用事后误差估计|X(k+1)-Xk|<eps 来控制迭代次数,并且打印出迭代次数;
3、初始值的选取对迭代收敛有何影响;
4,分析迭代收敛和发散的原因;
三、目的和意义
1、通过实验进一步了解方程求根算法;
2、认识选择计算格式的重要性;
3,掌握迭代算法和精度控制;
4,明确迭代收敛性与初值选取的关系;
四、代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <math.h>
using namespace std;
const int maxn=10000;
#define eps 1e-10
double g(double x)
{
//return (3*x+1)/pow(x,2);
//return (pow(x,3)-1)/3;
//return pow((3*x+1),1.0/3.0);
//return 1/(x*x-3);
//return sqrt(3+1/x);
//return (x-((1.0/3.0)*((x*x*x-3*x-1)/(x*x-1))));
}
double abs(double x)
{
return x<0?-x:x;
}
int main()
{
//freopen("in.txt","r",stdin);
int cnt=0;
double x1=-0.5,x2=2;
while((fabs(x2-x1)>=eps)&&cnt<=maxn)
{
double temp=g(x1);
x2=x1;
x1=temp;
cnt++;
}
if(cnt<maxn)
{
printf("%0.6lf\n",x2);
printf("收敛并且迭代了%d次\n",cnt);
}
else
{
printf("发散\n");
}
return 0;
}