利用迭代算法处理问题,需要做好以下三个方面的工做:
一、确定迭代变量。在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式。所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制。
牛顿迭代公式
设已知方程f(x)=0的近似根x0
,则在x0附近f(x)可用一阶泰勒多项式
近似代替.因此,
方程f(x)=0可近似地表示为p(x)=0。用x1表示p(x)=0的根,它与f(x)=0的根差异不大.
设 ,由于x1满足
解得
重复这一过程,得到迭代公式:
这就是著名的牛顿迭代公式,它相应的不动点方程为
Jacobi迭代公式解线性方程组
线性方程组基本解法:
若
方程组可同解变形为
Jacobi迭代法的计算公式:
即
举个用牛顿法的例子:
题目:用迭代法解方程 63x^3-114x^2-95x+42=0在-1.0, 0.4和1.2三值附近的三个实根。
#include
#include
double f(double x)
{
return ((63*x-114)*x-95)*x+42;
}
double fp(double x)
{
double k = (63*3*x-114*2)*x-95;
double y = f(x);
return x - y/k;
}
int main()
{
int i;
double temp;
double base[3] = {-1, 0.4, 1.2};
for(i=0;i<3;i++)
{
temp = base[i];
while(fabs(f(temp))>1e-7)
{
temp = fp(temp);
}
printf("%g 附近的根是 %g\n",base[i],temp);
}
}