简单迭代法求解方程举例

迭代法是方程及方程组求解的重要方法。关于其原理可另行查询。这里附上一篇简单的迭代法小程序。

用于解方程:x+e^x=0,求解精度0.00001.

#include
#include
#define fnx(x) -exp(x)
void main()
{
	float x0,x1;
	x0=0;
	x1=fnx(x0);
	while(fabs(x1-x0)>0.00001)
	{
		x0=x1;
		x1=fnx(x1);
	}
	printf("x=%f\n",x1);
}

编程思考:用一元方程的基本迭代法求根,所构造的迭代函数必须是收敛的,也就是说经过一系列的迭代后,计算结果应该趋近于一个定值。若经过许多次迭代后仍然不收敛,就可能是发散的,为防止无限制地循环下去,可以设定最多循环次数,例如循环50次仍不收敛就不再迭代,终止程序。下面附上自己修改过的程序(愿指正):

#include
#include
#define fnx(x) -exp(x)
void main()
{
	float x0,x1,x2,x3;
	unsigned int count=0,number=0; //count 用于统计连续收敛值的个数,number用于限制不收敛情况下最多的迭代次数。
	x0=0;
	x1=fnx(x0);
	x2=fabs(x1-x0);
	while(x2>0.00001)
	{
		number++;
		x3=x2;
		x0=x1;
		x1=fnx(x1);
		x2=fabs(x1-x0);

		if(x3>=x2)
			count++;
		else
			count=0;

		if(number>=50 && count==0)
		{
			printf("不收敛,exit!!\n");
			break;
		}
	}
	if(count!=0)
	{
		printf("x=%f\n",x1);
	}
}


你可能感兴趣的:(算法)