实验要求用六种计算方式计算非线性方程的根
废话不多说
代码如下
//一般迭代法
#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)式中迭代发散的式子