1. 程式人生 > >簡單迭代法求解方程舉例

簡單迭代法求解方程舉例

迭代法是方程及方程組求解的重要方法。關於其原理可另行查詢。這裡附上一篇簡單的迭代法小程式。

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

#include<stdio.h>
#include<math.h>
#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<stdio.h>
#include<math.h>
#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);
	}
}