您的位置:首页 > 其它

简单迭代法求解方程举例

2017-03-14 16:05 190 查看
迭代法是方程及方程组求解的重要方法。关于其原理可另行查询。这里附上一篇简单的迭代法小程序。

用于解方程: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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: