实验要求用六种计算方式计算非线性方程的根
废话不多说
代码如下
//一般迭代法
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const double eps=1e-10;
const int MAXN=2000;
double calc3(double x)
{
return (3*x+1.0)/x*x;
}
double calc4(double x)
{
return (x*x*x-1)/3.0;
}
double calc5(double x)
{
return pow(3*x+1,1.0/3.0);
}
double calc6(double x)
{
return 1/(x*x-3);
}
double calc7(double x)
{
return sqrt(3+1/x);
}
double calc8(double x)
{
return x-1.0/3.0*(x*x*x-3*x-1)/(x*x-1);
}
//迭代法
int main()
{
int cnt=0;
double x1 =1.8;
double x2;
while((fabs(x2-x1))>eps&&cnt<=MAXN)
{
double temp=calc5(x1);
x2=x1;
x1=temp;
cnt++;
}
if(cnt<MAXN)
{
printf("%0.6lf\n",x2);
printf("迭代了%d次\n",cnt);
}
else
printf("迭代失败\n");
return 0;
}
//使用一般迭代法收敛效率低其且无法解决(1)式中迭代发散的式子