开根运算的代码实现()

问题为x^0.5=X;x为非负实数。

 

一、运用牛顿迭代法

两边平方移项得 X^2-x=0,可以用牛顿迭代法求解二元一次方程的根

#include
#include



double func(double x,double c) //要求解的函数方程


{


	return x*x-c;


}


double func1(double x) //导函数


{


	return 2*x;


}




int Newton(double *x, double precision, int maxcyc,double c)//maxcyc 最大迭代次数,c被开方数


{
	double x1, x0;


	int k;


	x0 = *x;


	for (k = 0; k < maxcyc; k++)


	{


		if (func1(x0) == 0.0)


		{


			printf("迭代过程中导数为0\n");


			return 0;


		}


		x1 = x0 - func(x0,c) / func1(x0);


		if (fabs(x1 - x0) < precision || fabs(func(x1,c)) < precision)//达到设定的精度


		{

			*x = x1;
			return 1;


		}


		else


			x0 = x1; //准备下次迭代

	}


	printf("迭代次数超过预期!\n"); //迭代次数达到,仍没有达到精度


	return 0;


}



int main()


{


	double x, precision,c;


	int maxcyc;

    printf("输入被开方数");

    scanf("%lf",&c); 


	printf("输入初始迭代值x0");


	scanf("%lf", &x);


	printf("输入最大迭代次数:");


	scanf("%d", &maxcyc);


	printf("请输入迭代要求的精度:");


	scanf("%lf", &precision);


	if (Newton(&x, precision, maxcyc,c) == 1)


		printf("该值附近的根为:%lf\n", x);


	else

		printf("迭代失败!\n");


	while(1);


	return 0;


}

 

你可能感兴趣的:(题目)