開根運算的代碼實現()

問題爲x^0.5=X;x爲非負實數。

 

一、運用牛頓迭代法

兩邊平方移項得 X^2-x=0,可以用牛頓迭代法求解二元一次方程的根

#include<stdio.h>
#include<math.h>



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;


}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章