簡單迭代法求解方程舉例
阿新 • • 發佈:2019-02-02
迭代法是方程及方程組求解的重要方法。關於其原理可另行查詢。這裡附上一篇簡單的迭代法小程式。
用於解方程: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); } }