//二分算法求值
#include <stdio.h>
#include <math.h>
#define N 20
double ErFenFun(double A,double B,double c);
//求[A,B]区间内,误差不大于c的二分算法
double Fun(double x);
void main()
{
double y,z,q,X;
X=ErFenFun(0.0,1.0,5e-3);
printf("\n求得最后结果为:X=%f\n",X);
}
double ErFenFun(double A,double B,double c)
{
double k[N],a[N],b[N],m;
int i,j,n;
i=0;j=0;
a[0]=A; b[0]=B;
for(n=0;n<=N;n++)
{
k[n]=(a[i]+b[j])/2;
if(Fun(k[n])*Fun(a[i])<0)
{
b[j+1]=k[n];
a[i+1]=a[i];
}
else
{
a[i+1]=k[n];
b[j+1]=b[j];
}
printf("a%d=%f, b%d=%f, k%d=%f\n",i,a[i],j,b[j],n,k[n]);
i++;j++;
if((B-A)*pow(0.5,n+1)<c) break;
}
printf("共需要经过%d次二分!\n",n);
return k[n];
}
double Fun(double x)
{
return pow(x,5)+3*x-1;
}
二分法求值
最新推荐文章于 2023-01-24 16:35:32 发布