栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

优化方法——0.618法(黄金分割法)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

优化方法——0.618法(黄金分割法)

#include 
using namespace std;
//0.618法
class Solution
{
public:
	Solution(double x, double y) :a(x), b(y)
	{
		cout << "init parameter successn";
	}
	double func(double& x) const//计算函数值
	{
		return x*(x + 2);
	}
	double solve(double lamda, double dif)
	{
		while (b - a > dif)
		{
			x1 = b - lamda*(b - a);
			x2 = a + lamda*(b - a);
			f1 = func(x1);
			f2 = func(x2);
			if (f1 > f2)
			{
				a = x1;
				x1 = x2;
				f1 = f2;
				x2 = a + lamda*(b - a);
				f2 = func(x2);
			}
			else
			{
				b = x2;
				x2 = x1;
				f2 = f1;
				x1 = b - lamda*(b - a);
				f1 = func(x1);
			}
		}
		res = 0.5*(b + a);
		return func(res);
	}
private:
	double a;
	double b;
	double x1;
	double x2;
	double f1;
	double f2;
	double res;
};

int main()
{
	Solution sol(-4, 6);
	
	cout << sol.solve(0.618, 0.3);
	system("pause");
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/330472.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号