工程优化学习(进退法、黄金分割法、二次插值法、三次插值法、最速下降法)

在工程优化课程中,学习了包括进退法、黄金分割法、二次插值法、三次插值法和最速下降法等方法。实际操作中,使用最速下降法针对函数minf(x) = x1^2 + 25*x2^2进行求解,最终得到的结果在精度误差范围内接近极小值点(0,0)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工程优化课程学了进退法、黄金分割法、二次插值法、三次插值法、最速下降法。我自己只测试用最速下降法求(恩,水货我只调试了这一个,调了好多次才调通,然后其他的也没心情调试了):minf(x) = x1^2 + 25*x2^2,得到结果如下图所示,与该函数的极小值点(0,0)在精度误差之内。



#ifndef ENGINEERINGOPTIMIZATION_H_INCLUDED
#define ENGINEERINGOPTIMIZATION_H_INCLUDED

#include <vector>

using std::vector;

/* description:区间类
*/
class Region
{
public:
    double frontierLow; //一维定义域下界
    double frontierHigh; //一维定义域上界
    vector<double> lowerBoundDomain; //n维矢量下界
    vector<double> upperBoundDomain; //n维矢量上界

    Region() {}
    Region(double l, double h)
    {
        frontierLow = l;
        frontierHigh = h;
    }
    Region(double l, double h, vector<double> lowerBound,
            vector<double> upperBound)
    {
        frontierLow = l;
        frontierHigh = h;
        lowerBoundDomain = lowerBound;
        upperBoundDomain = upperBound;
    }
    Region(vector<double> lowerBound, vector<double> upperBound)
    {
        lowerBoundDomain = lowerBound;
        upperBound = upperBoundDomain;
    }
    Region(const Region &region)
    {
        frontierLow = region.frontierLow;
        frontierHigh = region.frontierHigh;
        lowerBoundDomain = region.lowerBoundDomain;
        upperBoundDomain = region.upperBoundDomain;
    }
};


/* @description 计算n维矢量的模值
**
*/
double vectorMag(const vector<double> &v);

/*
** @description 进退法求搜索区间。
** @param initialPoint 搜索初始点
** @param initialStep 搜索初始步长
** @param targetFunc 目标函数f(x)的回调函数,调用者需要提供此函数。
**  它接受一个参数,变量x,返回目标函数的函数值
** @return 返回搜索到的区间
*/
//变量x是一维空间中的点
Region computeSearchRegion(double initialPoint, double initialStep, double (*targetFuc)(double x, int derivationOrder));

/*
** @description 黄金分割法求最小值,目标函数需是单峰函数。缩短搜素区间的三个原则(a<=x<=b):
**          1、“去坏留好”原则,若f(x1)<f(x2),则a<x_min<x2
**          2、对称原则,x1-a = b-x2
**          3、等比收缩原则,每次留下区间的长度都是上次留下区间长度的w倍(0<w<1)
**           调用者需提供目标函数
** @param region 目标函数的定义域
** @param pre
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值