ライブラリ関数を使用せずに方程式 x^2=a の根を直接解きます (固定小数点反復法)

        まず、方程式の両辺に同時に x を加えます。 x^2+x=x+a このとき、両辺を同時に 1+x で割ると、 x=(x+a)/(1+x)x=1+(a-1)/(1+x) の変形を取得します。 ( 変性された 反復は一意ではありません。ここで 1 つ選択してください)

        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 の正確な値にほぼ近くなるはずです。固定小数点反復法とは何かをここで簡単に紹介します。

 詳細については、第 4 章: 方程式の根を求める反復法 - Jianshu (jianshu.com)4.2 (<) を参照してください。 /span> a>

#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
おすすめ