#include
#include
void main()
{
int i=0,j=0;
long float y1,y2,y3,a,b;
long float k1,k2,k3,x1,x2,x3,h,al;
printf ("请输入二次项系数(不为0)=");
scanf ("%lf",&k1);
printf ("\n请输入一次项系数=");
scanf ("%lf",&k2);
printf ("\n请输入常数项=");
scanf ("%lf",&k3);
printf ("各项系数依次为:");
printf ("%lf %lf %lf\n",k1,k2,k3);
printf ("\n请输入初始点x1=");
scanf ("%lf",&x1);
printf ("\n请输入初始步长h(大于0)=");
scanf ("%lf",&h);
al=1.5;
printf ("初始点x=%f\n" ,x1);
printf ("初始步长h=%f\n",h);
/*printf ("加步系数K=%f\n",al);*/
if(k1
{k1=-k1,k2=-k2,k3=-k3;}
x2=x1+h;
y1=k1*x1*x1+k2*x1+k3;
y2=k1*(x2+h)*(x2+h)+k2*(x2+h)+k3;
if (y1>y2)
{
for (i=0;i
{ h=al*h,x3=x2+h,y3=k1*x3*x3+k2*x3+k3;
if(y3>y2)
break;}
a=x1,b=x3;
printf("i=%d\n",i);
}
else
{
for (j=0;j
}
if (j>=5000000000)
printf("输入有误,请结束程序");
printf("a= %f\n",a);
printf("b= %f\n",b);
/*以下是黄金分割法,已有定义变量:a,b,k1,k2,k3,*/
int q;
long float e;
printf ("请输入精度e=");
scanf ("%lf",&e);
x1=a+0.382*(b-a);
x2=a+0.618*(b-a);
y1=k1*x1*x1+k2*x1+k3;
y2=k1*x2*x2+k2*x2+k3;
for(q=1;fabs(b-a)>e||fabs(y2-y1)>e;q++) {
if(y1>=y2)
{
a=x1,x1=a+0.382*(b-a),y1=k1*x1*x1+k2*x1+k3; x2=a+0.618*(b-a),y2=k1*x2*x2+k2*x2+k3;
}
else
{
b=x2,x2=a+0.618*(b-a),y2=k1*x2*x2+k2*x2+k3; x1=b-0.618*(b-a),y1=k1*x1*x1+k2*x1+k3;
}
}
printf ("极值点=%f\n\n",(a+b)/2);
/*printf ("循环次数=%d\3",q);
printf("值= %f\n",k2/2/k1);
printf ("误差=%f\n",(a+b)/2+k2/2/k1);*/
} {h=al*h,x3=x1-h,y3=k1*x3*x3+k2*x3+k3; if(y3>y1) break;} a=x3,b=x2; /*printf("j=%d\n",j);*/
#include
#include
void main()
{
int i=0,j=0;
long float y1,y2,y3,a,b;
long float k1,k2,k3,x1,x2,x3,h,al;
printf ("请输入二次项系数(不为0)=");
scanf ("%lf",&k1);
printf ("\n请输入一次项系数=");
scanf ("%lf",&k2);
printf ("\n请输入常数项=");
scanf ("%lf",&k3);
printf ("各项系数依次为:");
printf ("%lf %lf %lf\n",k1,k2,k3);
printf ("\n请输入初始点x1=");
scanf ("%lf",&x1);
printf ("\n请输入初始步长h(大于0)=");
scanf ("%lf",&h);
al=1.5;
printf ("初始点x=%f\n" ,x1);
printf ("初始步长h=%f\n",h);
/*printf ("加步系数K=%f\n",al);*/
if(k1
{k1=-k1,k2=-k2,k3=-k3;}
x2=x1+h;
y1=k1*x1*x1+k2*x1+k3;
y2=k1*(x2+h)*(x2+h)+k2*(x2+h)+k3;
if (y1>y2)
{
for (i=0;i
{ h=al*h,x3=x2+h,y3=k1*x3*x3+k2*x3+k3;
if(y3>y2)
break;}
a=x1,b=x3;
printf("i=%d\n",i);
}
else
{
for (j=0;j
}
if (j>=5000000000)
printf("输入有误,请结束程序");
printf("a= %f\n",a);
printf("b= %f\n",b);
/*以下是黄金分割法,已有定义变量:a,b,k1,k2,k3,*/
int q;
long float e;
printf ("请输入精度e=");
scanf ("%lf",&e);
x1=a+0.382*(b-a);
x2=a+0.618*(b-a);
y1=k1*x1*x1+k2*x1+k3;
y2=k1*x2*x2+k2*x2+k3;
for(q=1;fabs(b-a)>e||fabs(y2-y1)>e;q++) {
if(y1>=y2)
{
a=x1,x1=a+0.382*(b-a),y1=k1*x1*x1+k2*x1+k3; x2=a+0.618*(b-a),y2=k1*x2*x2+k2*x2+k3;
}
else
{
b=x2,x2=a+0.618*(b-a),y2=k1*x2*x2+k2*x2+k3; x1=b-0.618*(b-a),y1=k1*x1*x1+k2*x1+k3;
}
}
printf ("极值点=%f\n\n",(a+b)/2);
/*printf ("循环次数=%d\3",q);
printf("值= %f\n",k2/2/k1);
printf ("误差=%f\n",(a+b)/2+k2/2/k1);*/
} {h=al*h,x3=x1-h,y3=k1*x3*x3+k2*x3+k3; if(y3>y1) break;} a=x3,b=x2; /*printf("j=%d\n",j);*/