计算方法 实验二 非线性方程求根

来源:互联网 发布:js判断空字符串 编辑:程序博客网 时间:2024/05/17 04:47

一、问题提出

设方程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-10double 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;}




原创粉丝点击