首先可以将方程两边同时加上x,,这时候两边同时再除以1+x,就得到了,变形为。(变性后的迭代式不唯一,这里随便选取一个)
当x是准确值的时候,两边应该是相等的,如果x是近似值,x误差很小很小,我们变可以认为x是可接受的近似解。
因此可以构造迭代式:
根据上面的迭代式,可以得到一个x值的序列:,这个序列中的每一个值都应该比前面的值更加接近x的精确值, 关于什么是不动点迭代法这里大致介绍一下:
详细请参考:第四章:方程求根的迭代法 - 简书 (jianshu.com)中的4.2
#include<stdio.h>
#include<math.h>
#define PRECISION 0.000001
int main()
{
//用迭代法计算方程x^2=a的解,即计算根号a的值(不用库函数)
float a,x=1.0,temp;
int count=0;
printf("请输入一个非负数初始迭代值a:");
scanf("%f",&a);
do
{
temp=x;
x=1+(a-1)/(x+1);
count++;
}while(fabs(x-temp)>=PRECISION);
printf("\t方程的近似解为:%f,迭代次数为%d\n",x,count);
return 0;
}