1、简单迭代法:
参考代码:
#include<stdio.h>
#include<math.h>
#define x0 3//初值
#define MAXREPT 1000//迭代次数
#define EPS 0.5E-6//精度
#define G(x) pow(sin(x)+12*x-1,1.0/3)//你的迭代函数;将原方程化为x=G(x)。
int main()
{
int i;
double x_k=x0,x_k1=x0;
printf(" k xk\n");
for(i=0;i<MAXREPT;i++)
{
printf(" %d %g\n",i,x_k1);
x_k1=G(x_k);
if(fabs(x_k1-x_k)<EPS)
{
printf("The Root is x=%g,k=%d\n",x_k1,i);
return 0;
}
x_k=x_k1;
}
printf("After %d repeate,no solved.\n",MAXREPT);
return 0;
}
样例: f ( x ) = x 3 − s i n x − 12 x + 1 f(x)=x^3-sinx-12x+1 f(x)=x3−sinx−12x+1
样例结果:
2、牛顿迭代法:
参考代码:
#include<stdio.h>
#include<math.h>
#define G(x) x-(x*x*x-sin(x)-12*x+1)/(3*x*x-cos(x)-12) // 迭代函数,G(x)=x-f(x)/f'(x)
#define MAXREPT 1000// 迭代次数
#define EPS 0.5E-6// 精度
#define x0 3// 初值
int main()
{
int i;
double x_k=x0,x_k1=x0;
printf(" k xk\n");
for(int i=0;i<MAXREPT;i++)
{
printf(" %d %g\n",i,x_k1);
x_k1=G(x_k);
if(fabs(x_k1-x_k)<EPS)
{
printf("The Root is x=%g,k=%d\n",x_k1,i);
double ans=f(x_k1);
printf("%g\n",ans);
return 0;
}
x_k=x_k1;
}
printf("After %d repeate,no solved.\n",MAXREPT);
return 0;
}
样例: f ( x ) = x 3 − s i n x − 12 x + 1 f(x)=x^3-sinx-12x+1 f(x)=x3−sinx−12x+1
样例结果:
3、Aitken加速迭代法
参考代码:
#include<stdio.h>
#include<math.h>
#define x0 3// 初值
#define MAXREPT 1000// 迭代次数
#define EPS 0.5E-6// 精度
#define G(x) pow(sin(x)+12*x-1,1.0/3)// 迭代函数,将原方程化为x=G(x)
int main()
{
int i;
double x1=x0,x2=x0;
double y,z;
printf(" k xk\n");
for(i=0;i<MAXREPT;i++)
{
printf(" %d %g\n",i,x2);
y=G(x1);
z=G(y);
x2=z-((z-y)*(z-y))/(z-2*y+x1);
if(fabs(x2-x1)<EPS)
{
printf("The Root is x=%g,k=%d\n",x2,i);
return 0;
}
x1=x2;
}
printf("After %d repeate,no solved.\n",MAXREPT);
return 0;
}
样例: f ( x ) = x 3 − s i n x − 12 x + 1 f(x)=x^3-sinx-12x+1 f(x)=x3−sinx−12x+1
样例结果: