| RMVL 1.5.2 Robotic Manipulation and Vision Library

载入中...
搜索中...
未找到
类 | 类型定义 | 枚举 | 函数
最优化算法库
RMVL 核心模块

包含一维函数最小值搜索、无约束多维函数最小值搜索等最优化算法 更多...

最优化算法库 的协作图:

## 类
struct | rm::OptimalOptions
| 无约束多维函数优化选项 更多...

## 类型定义
using | rm::Func1d = std::function<double(double)>
| 一元函数
using | rm::Func1ds = std::vector<Func1d>
| 一元函数组
using | rm::FuncNd = std::function<double(const std::vector<double> &)>
| 多元函数
using | rm::FuncNds = std::vector<FuncNd>
| 多元函数组

## 枚举
enum class | rm::DiffMode : uint8_t { rm::DiffMode::Central , rm::DiffMode::Ridders }
| 梯度/导数计算模式 更多...
enum class | rm::FminMode : uint8_t { rm::FminMode::ConjGrad , rm::FminMode::Simplex }
| 多维函数最优化模式 更多...

## 函数
double | rm::derivative (Func1d func, double x, DiffMode mode=DiffMode::Central, double dx=1e-3)
| 计算一元函数的导数
std::vector< double > | rm::grad (FuncNd func, const std::vector< double > &x, DiffMode mode=DiffMode::Central, double dx=1e-3)
| 计算多元函数的梯度
std::pair< double, double > | rm::region (Func1d func, double x0, double delta=1)
| 采用进退法确定搜索区间
std::pair< double, double > | rm::fminbnd (Func1d func, double x1, double x2, const OptimalOptions &options={})
| 一维函数最小值搜索
std::pair< std::vector< double >, double > | rm::fminunc (FuncNd func, const std::vector< double > &x0, const OptimalOptions &options={})
| 无约束多维函数的最小值搜索 [4] [8] ，可参考 多维无约束最优化方法
std::pair< std::vector< double >, double > | rm::fmincon (FuncNd func, const std::vector< double > &x0, const FuncNds &c, const FuncNds &ceq, const OptimalOptions &options={})
| 有约束多维函数的最小值搜索
std::vector< double > | rm::lsqnonlin (const FuncNds &funcs, const std::vector< double > &x0, const OptimalOptions &options={})
| 无约束非线性最小二乘求解

## 详细描述

包含一维函数最小值搜索、无约束多维函数最小值搜索等最优化算法

## 类型定义说明

## ◆ Func1d

using rm::Func1d = std::function<double(double)>

`#include <rmvl/core/numcal.hpp>`

一元函数

## ◆ Func1ds

using rm::Func1ds = std::vector<Func1d>

`#include <rmvl/core/numcal.hpp>`

一元函数组

## ◆ FuncNd

using rm::FuncNd = std::function<double(const std::vector<double> &)>

`#include <rmvl/core/numcal.hpp>`

多元函数

## ◆ FuncNds

using rm::FuncNds = std::vector<FuncNd>

`#include <rmvl/core/numcal.hpp>`

多元函数组

## 枚举类型说明

## ◆ DiffMode

enum class rm::DiffMode : uint8_t
| strong

`#include <rmvl/core/numcal.hpp>`

梯度/导数计算模式

枚举值
Central | 中心差商
Ridders | Richardson 外推

## ◆ FminMode

enum class rm::FminMode : uint8_t
| strong

`#include <rmvl/core/numcal.hpp>`

多维函数最优化模式

枚举值
ConjGrad | 共轭梯度法
Simplex | 单纯形法

## 函数说明

## ◆ derivative()

double rm::derivative | ( | Func1d | func,
|  | double | x,
|  | DiffMode | mode = DiffMode::Central,
|  | double | dx = 1e-3 )

`#include <rmvl/core/numcal.hpp>`

计算一元函数的导数

参数

  [in] | func | 一元函数
  [in] | x | 指定位置的自变量
  [in] | mode | 导数计算模式，默认为中心差商 `Diff_Central`
  [in] | dx | 坐标的微小增量，默认为 `1e-3`

返回
  函数在指定点的导数

## ◆ fminbnd()

std::pair< double, double > rm::fminbnd | ( | Func1d | func,
|  | double | x1,
|  | double | x2,
|  | const OptimalOptions & | options = {} )

`#include <rmvl/core/numcal.hpp>`

一维函数最小值搜索

参数

  [in] | func | 一维约束函数
  [in] | x1 | 搜索区间左端点
  [in] | x2 | 搜索区间右端点
  [in] | options | 优化选项

返回
  `[x, fval]` 最小值点和最小值

## ◆ fmincon()

std::pair< std::vector< double >, double > rm::fmincon | ( | FuncNd | func,
|  | const std::vector< double > & | x0,
|  | const FuncNds & | c,
|  | const FuncNds & | ceq,
|  | const OptimalOptions & | options = {} )

`#include <rmvl/core/numcal.hpp>`

有约束多维函数的最小值搜索

参数

  [in] | func | 多维函数
  [in] | x0 | 初始点
  [in] | c | 不等式约束 \(f_c(x)\le0\)
  [in] | ceq | 等式约束 \(f_{ceq}(x)=0\)
  [in] | options | options 优化选项

返回
  `[x, fval]` 最小值点和最小值

## ◆ fminunc()

std::pair< std::vector< double >, double > rm::fminunc | ( | FuncNd | func,
|  | const std::vector< double > & | x0,
|  | const OptimalOptions & | options = {} )

`#include <rmvl/core/numcal.hpp>`

无约束多维函数的最小值搜索 [4] [8] ，可参考 多维无约束最优化方法

参数

  [in] | func | 多维约束函数
  [in] | x0 | 初始点
  [in] | options | 优化选项

返回
  `[x, fval]` 最小值点和最小值

## ◆ grad()

std::vector< double > rm::grad | ( | FuncNd | func,
|  | const std::vector< double > & | x,
|  | DiffMode | mode = DiffMode::Central,
|  | double | dx = 1e-3 )

`#include <rmvl/core/numcal.hpp>`

计算多元函数的梯度

参数

  [in] | func | 多元函数
  [in] | x | 指定位置的自变量
  [in] | mode | 梯度计算模式，默认为中心差商 `Diff_Central`
  [in] | dx | 计算偏导数时，坐标的微小增量，默认为 `1e-3`

返回
  函数在指定点的梯度向量

## ◆ lsqnonlin()

std::vector< double > rm::lsqnonlin | ( | const FuncNds & | funcs,
|  | const std::vector< double > & | x0,
|  | const OptimalOptions & | options = {} )

`#include <rmvl/core/numcal.hpp>`

无约束非线性最小二乘求解

参数

  [in] | funcs | 多维最小二乘约束函数，满足 \(F(\pmb x_k)=\frac12\|\pmb f(\pmb x_k)\|_2^2\)
  [in] | x0 | 初始点
  [in] | options | 优化选项

返回
  最小二乘解

## ◆ region()

std::pair< double, double > rm::region | ( | Func1d | func,
|  | double | x0,
|  | double | delta = 1 )

`#include <rmvl/core/numcal.hpp>`

采用进退法确定搜索区间

参数

  [in] | func | 一维函数
  [in] | x0 | 初始点
  [in] | delta | 搜索步长

返回
  搜索区间