1 / 4
文档名称:

一位优化黄金分割法二次插值法合用.doc

格式:doc   大小:29KB   页数:4页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

一位优化黄金分割法二次插值法合用.doc

上传人:1542605778 2021/3/3 文件大小:29 KB

下载得到文件列表

一位优化黄金分割法二次插值法合用.doc

文档介绍

文档介绍:#include<>
#include<>
#define R
#define ff(x) pow((x-1),6)
double f(double x)
{ double m;
m=pow((x-1),6);
return m;
}
#define R
int main()
{
double h0=R,y1,y2,y3,x1,x2,x3,h;
double s,a,b,e,m;
int n=0,k;
x1=0;h=h0;x2=h;
y1=f(x1);y2=f(x2);
if(y2>y1)
{
h=-h;
x3=x1;
y3=y1;
x1=x2;
y1=y2;
x2=x3;
y2=y3;
}
x3=x2+h;y3=f(x3);
while(y3<y2)
{
h*=;
x1=x2;
y1=y2;
x2=x3;
y2=y3;
x3=x2+h;
y3=f(x3);
}
printf("输出f(%f)=%f,f(%f)=%f,f(%f)=%f\n\n\n\n",x1,y1,x2,y2,x3,y3);
if(x1<x3)
{
a=x1;
b=x3;
}
else
{
a=x3;
b=x1;
}
printf("输出由进退法得出的一维搜索区间[%f,%f]\n\n\n",a,b);
while(1){
printf("输入精度e值 k值 空格隔开\nk为1则用黄金分割法求解,k为2用二次插值法求解\n");
scanf("%lf %d",&e,&k);
double hj(double *a,double *b,double e,int *n);
double ecfg(double e,double x1,double h,double x3);
if(k==1)
{
s=hj(&a,&b,e,&n);
m=(a+b)/2;
printf("a=%lf,b=%lf,s=%lf,m=%lf,n=%d\n",a,b,s,m,n);
printf("最小区间为[a,b]=[%lf,%lf],\n最优函数极值s=%lf,\n精确解m=%lf,\n黄金分割法迭代次数n=%d\n\n\n",a,b,s,m,n);
}
else{
double x;
x=ecfg( e,x1,h,x3);
printf("a*=%f\n",x);
printf("y*=%f\n\n\n",f(x));
} }
}
double hj(double *a,double *b,double e,int *n)
{