叠代法是用於求方程或方程組近似根的壹種常用的算法設計方法。設方程為f(x)=0,用某種數學方法導出等價的形式x=g(x),然後按以下步驟執行:
⑴ 選壹個方程的近似根,賦給變量x0;
⑵ 將x0的值保存於變量x1,然後計算g(x1),並將結果存於變量x0;
⑶ 當x0與x1的差的絕對值還大於指定的精度要求時,重復步驟⑵的計算。
若方程有根,並且用上述方法計算出來的近似根序列收斂,則按上述方法求得的x0就認為是方程的根。上述算法用C程序的形式表示為:
算法叠代法求方程的根
以下是引用片段:
{ x0=初始近似根;
do {
x1=x0;
x0=g(x1); /*按特定的方程計算新的近似根*/
} while (fabs(x0-x1)>Epsilon);
printf(“方程的近似根是%f\n”,x0);
}
叠代算法也常用於求方程組的根,令
X=(x0,x1,…,xn-1)
設方程組為:
xi=gi(X) (I=0,1,…,n-1)
則求方程組根的叠代算法可描述如下:
算法叠代法求方程組的根
以下是引用片段:
{ for (i=0;i
x=初始近似根;
do {
for (i=0;i
y=x;
for (i=0;i
x=gi(X);
for (delta=0.0,i=0;i
if (fabs(y-x)>delta) delta=fabs(y-x);
} while (delta>Epsilon);
for (i=0;i
printf(“變量x[%d]的近似根是 %f”,I,x);
printf(“\n”);
}
具體使用叠代法求根時應註意以下兩種可能發生的情況:
⑴ 如果方程無解,算法求出的近似根序列就不會收斂,叠代過程會變成死循環,因此在使用叠代算法前應先考察方程是否有解,並在程序中對叠代的次數給予限制;
⑵ 方程雖然有解,但叠代公式選擇不當,或叠代的初始近似根選擇不合理,也會導致叠代失敗。
① N 為兔子的個數, M為月份 (N+N*1)^M-1=2N^M-1 (註解)