method_0.618.cpp

来自「最优化理论与算法(第2版)这本书中的课后作业。用C++实现的一些具体算法。」· C++ 代码 · 共 45 行

CPP
45
字号
#include<iostream.h>
#include<math.h>

void main()
{
	double ak,bk,langk,miuk;
	double L;
	double flangk,fmiuk;
	int sn=0;

	ak=-1;
	bk=1;
	L=0.16;
	langk=ak+0.382*(bk-ak);
	miuk=ak+0.618*(bk-ak);
	flangk=2*pow(langk,2)-langk-1;
	fmiuk=2*pow(miuk,2)-miuk-1;

	for(int i=0;i<10;i++)
	{
	if((bk-ak)<L) break;
	if(flangk>fmiuk) sn=3;
	else
		sn=4;

	switch(sn)
	{
	case 3:
		ak=langk;langk=miuk;
		flangk=fmiuk;
		miuk=ak+0.618*(bk-ak);
		fmiuk=2*pow(miuk,2)-miuk-1;
		continue;
	case 4:
		bk=miuk;miuk=langk;
		fmiuk=flangk;
		langk=ak+0.382*(bk-ak);
		flangk=2*pow(langk,2)-langk-1;
		continue;
	}
	}

	cout<<ak<<"\t"<<bk<<endl<<endl;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?