进退法确定最小值区间(C语言)

该博客介绍了如何运用进退法在C语言中确定最小值所在的区间,包括程序的设计思路、程序框图和具体的C语言实现代码,并提供了测试结果以验证算法的正确性。

进退法确定最小值区间

  • 优化设计
进退法确定最小值所在区间程序框图

在这里插入图片描述

C语言程序
#include <stdio.h>

//定义目标函数
#define F(x) (x*x-6*x+9)

void RetreatMethod(float X1,float H)
{
	float f1, f2, f3;
	float x1, x2, x3;
	float h, temp;
	//初值计算
	h = H;
	x1 = X1;
	f1 = F(x1);
	x2 = x1 + h;
	f2 = F(x2);
	printf("***进退法确定最小值区间***\r\n初值x1=%f 步长=%f\r\n\r\n", x1, h);
	if (f1 < f2)	//判断搜索方向
	{	
		//初始方向错误,反向搜索
		h = -h;
		//交换x1,x2
		temp = x2;
		x2 = x1;
		x1 = temp;
		//交换f1,f2
		temp = f2;
		f2 = f1;
		f1 = temp;
		//计算x3,f3
		x3 = x2 + h;
		f3 = F(x3);
	}
	else
	{		//初始方向正确,正向搜索
			//增大步幅,计算x3,f3
			h = 2*h;
			x3 = x2 + h;
			f3 = F(x3);
	}
	printf("x1=%f  x2=%f  x3=%f  f1=%f  f2=%f  f3=%f\r\n", x1, x2, x3, f1, f2, f3);
	//循环计算比较f2,f3,直至满足“高-低-高”条件
	while (!(f2 < f3))
	{
		x1 = x2;
		x2 = x3;
		f2 = f3;
		x3 = x2 + h;
		f3 = F(x3);
		printf("x1=%f  x2=%f  x3=%f  f1=%f  f2=%f  f3=%f\r\n", x1, x2, x3, f1, f2, f3);
	}
	//输出最小值区间
	if (x1 < x3)
	{
		printf("\r\n最小值区间:[%f,%f]\r\n", x1, x3);
	}
	else
	{
		printf("\r\n最小值区间:[%f,%f]\r\n", x3, x1);
	}
}
int main()
{
	RetreatMethod(0,0.1);
	return 0;
}
测试结果

在这里插入图片描述
欢迎反馈交流!

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值