最新版最优化黄金分割法C语言程序,与课本同步,纠正了老课本上的分割点继承造成的问题!
#include<stdio.h>
#include<math.h>
void main()
#define f(t) (k1*t*t+k2*t+k3)
{
double f,f1,f2,x,a,a1,b,b1,e,k1,k2,k3,u;
printf("请输入二次项系数k1=");
scanf("%lf",&k1);
printf("请输入一次项系数k2=");
scanf("%lf",&k2);
printf("请输入常数项k3=");
scanf("%lf",&k3);
printf("请输入搜索区间左端点a=");
scanf("%lf",&a);
printf("请输入搜索区间右端点b=");
scanf("%lf",&b);
printf("请输入搜索精度e=");
scanf("%lf",&e);
u=0.618;
do
{
a1=b-u*(b-a);
f1=f(a1);
b1=a+u*(b-a);
f2=f(b1);
if(f1<f2)
{
b=b1;
}
else
{
a=a1;
}
}while(b-a>=e);
x=0.5*(a+b);
f=k1*x*x+k2*x+k3;
printf("\n黄金分割法
终了区间[a,b]:");
printf("\na=%lf,b=%lf",a,b);
printf("\n最佳步长近视值x及其对应的函数值f:");
printf("\nx=%lf,f=%lf",x,f);
}