一维搜索黄金分割法C程序

#include
#include
#define f(x) x+20/x //定义函数F=x+20/x
#define M 0.618 //定义常变量M=0.618
void main()
{
double y1,y2,x1,x2,x,a,b,e;
int n;
n=1;
printf("请输入收敛精度e=");
//流程图中的收敛精度ε用小写字母e代替
scanf("%lf",&e);
printf("请输入区间左值a=");
scanf("%lf",&a);
printf("请输入区间右值b=");
scanf("%lf",&b);
printf("n a b x1 x2 y1 y2 b-a\n");
x1=b-M*(b-a);
x2=a+M*(b-a);
y1=f(x1);
y2=f(x2);
printf("%d %.4lf %.4lf %.4lf %.4lf %.4lf %.4lf\n",n,a,b,x1,x2,y1,y2,b-a);
n=n++;
do
{
if(y1{
b=x2;
x2=x1;
y2=y1;
x1=b-M*(b-a);
y1=f(x1);
printf("%d %.4lf %.4lf %.4lf %.4lf %.4lf %.4lf %.4lf\n",n,a,b,x1,x2,y1,y2,b-a);
n=n++;
}
else
{
a=x1;
x1=x2;
y1=y2;
x2=a+M*(b-a);
y2=f(x2);
printf("%d %.4lf %.4lf %.4lf %.4lf %.4lf %.4lf %.4lf\n",n,a,b,x1,x2,y1,y2,b-a);
n=n++;
}
}
while(fabs((b-a))>=e);
x=(a+b)*0.5;
printf("x=%.5lf f(x)=%.5lf\n",x,f(x));
getchar();
}

相关文档
最新文档