TAG:
程序设计思想及范例,迭代问题,非线性方程求根问题
TEXT:
下面介绍二分法求方程根的算法步骤,事先给定小的正数。
将区间分半,取中点,求,若,则取,否则作下一步。
计算,若,取;否则取,形成新的含根区间,且。
对于新的含根区间重复上述步骤,直到,取
作为的近似值。此时的计算误差为
计算过程的图例如下:
二分法迭代过程
二分法程序简单,方法可靠。但是要求得到较精确的结果所花费的时间比较长,一般不单独使用,求方程根的主要方法是迭代法。
利用二分法,求方程的实根,精确到两位小数。
为了便于计算函数值编制函数float function(float x)。在主函数中首先给出了有根区间,在程序中用[x1,x2]表示。由于不确定函数需要执行的次数,因此使用do- while循环,循环条件为区间中点的函数值小于,当函数值小于时,近似认为当前的值为方程根。
程序代码如下:
#include "stdio.h"
#include "math.h"
float function(float x)
{
float f;
f= x*((2*x-4)*x+3)-6;
return f;
}
void main()
{
float x1,x2,x0,fx1,fx2,fx0;
x1=10;x2=-10;
fx1=function(x1);
fx2=function(x2);
do
{
x0=(x1+x2)/2.0; /*
计算中点*/
fx0=function(x0); /*
计算中点处的函数值*/
if(fx0*fx1<0) /*
计算新的区间*/
{ /*
区间中点的函数值与x1的函数值正负号相反*/
/*
区间中点的y坐标与x1点的y坐标在不同y半轴上*/
x2=x0; /*
新区间为[x1,x0]*/
fx2=fx0;
}
else
{ /*
区间中点的y坐标与x1点的y坐标在相同y半轴上*/
x1=x0; /*
新区间为[x0,x2]*/
fx1=fx0;
}
}while(fabs(fx0)>=1e-6);
printf("The root is %f",x0);
}
REF:.txt,
非线性方程求根问题.txt,clip_image051.jpg