求解方程x^2=a的根,不使用库函数直接求解(不动点迭代法)

        首先可以将方程两边同时加上x,x^2+x=x+a,这时候两边同时再除以1+x,就得到了x=(x+a)/(1+x),变形为x=1+(a-1)/(1+x)。(变性后的迭代式不唯一,这里随便选取一个)

        当x是准确值的时候,两边应该是相等的,如果x是近似值,x误差很小很小,我们变可以认为x是可接受的近似解。 

 因此可以构造迭代式:

                                        x_n=1+(a-1)/(1+x_{n-1})

根据上面的迭代式,可以得到一个x值的序列:x_0,x_1,x_2,x_3,...,x_{n-1},x_{n},这个序列中的每一个值都应该比前面的值更加接近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;
}

猜你喜欢

转载自blog.csdn.net/weixin_55848732/article/details/132010518
今日推荐