迭代求方程的根c++
题目
求x³-x-1=0的根
迭代求根方法
- 将方程变形,求出根的收敛表达示g(x),即x=∛(x+1)。而不能变成x=x³-1,因为这个x的表达式是发散的。
- 选一个方程的近似根2,赋给变量x0。
- 将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0;
- 当x0与x1的差的绝对值还大于指定的精度要求时,重复步骤2、3的计算。
代码
cpp
#include<stdio.h>
#include<math.h>
typedef double(*fpt)(double);//函数指针
int rootX(fpt g,double initRoot,double precision,double *root){
double x0=initRoot,x1=0;
int n=0;//迭代次数
do{
printf("x%d=%.5f\n",n,x0);
x1=x0;
x0=g(x1);
n++;
} while(fabs(x0-x1)>= precision);
*root=x0;
printf("x%d=%.5f\n",n,x0);
return n;
}
double f(double x){
return pow(x+1,1.0/3.0);
}
int main(){
double x;
int m=rootX(f,2,0.000005,&x);
printf("迭代%d次,根为%.5f\n",m,x);
}
说明
pow 函数
- base 是底数,可以是任意浮点数。
- exponent 是指数,也可以是任意浮点数。
- 返回值是 base 的 exponent 次幂,类型为 double。
cpp
double pow(double base, double exponent);