📄 一维搜索.c
字号:
#include"stdio.h"
//#include"conio.h"
#include"math.h"
#define e 0.001
#define tt 0.01
float function(float x)
{
float y=8*pow(x,3)-2*pow(x,2)-7*x+3;//求解的一维函数
return(y);
}
void finding(float a[3],float f[3])
{ int i;
float t=tt,a1,f1; //,ia;
a[0]=0; //初始区间的下限值;
f[0]=function(a[0]);
for (i=0;;i++)
{
a[1]=a[0]+t;
f[1]=function(a[1]);
if(f[1]<f[0]) break;
if(fabs(f[1]-f[0])>=e)
{
t=-t; a[0]=a[1]; f[0]=f[1];
}
//else{
//if(ia==1) return;
//t=t/2;ia=1;}
}
for(i=0;;i++)
{a[2]=a[1]+t;f[2]=function(a[2]);
if(f[2]>f[1]) break;
t=2*t;
a[0]=a[1]; f[0]=f[1];
a[1]=a[2]; f[1]=f[2];
}
if(a[0]>a[2])
{a1=a[0]; f1=f[0];
a[0]=a[2]; f[0]=f[2];
a[2]=a1; f[2]=f1;
}
return(0);
}
float gold(float *ff)
{ int i=0;
float a1[3],f1[3],a[4],f[4];
float aa;
finding(a1,f1);
a[0]=a1[0]; f[0]=f1[0];
a[3]=a1[2]; f[3]=f1[2];
a[1]=a[0]+0.382*(a[3]-a[0]); a[2]=a[0]+0.618*(a[3]-a[0]);
f[1]=function(a[1]); f[2]=function(a[2]);
for (i=0; ;i++)
{ if(f[1]>=f[2])
{a[0]=a[1]; f[0]=f[1];
a[1]=a[2]; f[1]=f[2];
a[2]=a[0]+0.618*(a[3]-a[0]);f[2]=function(a[2]);
}
else{a[3]=a[2]; f[3]=f[2];
a[2]=a[1]; f[2]=f[1];
a[1]=a[0]+0.382*(a[3]-a[0]); f[1]=function(a[1]);
}
if((a[3]-a[0])<e)
{aa=(a[1]+a[2])/2; *ff=function(aa);
break;
}
}
return(aa);
}
void main()
{
float xx,ff;
xx=gold(&ff);
printf("\nThe optimal Design Result Is:\n");
printf("\n\tx*=%f\n\nf*=%f\n",xx,ff);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -