⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 一维搜索.c

📁 优化设计C语言程序 进退法找区间、坐标轮换发、黄金分割法、区间消去法等
💻 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 + -