包含一维函数最小值搜索、无约束多维函数最小值搜索等最优化算法
更多...
|
| using | rm::Func1d = std::function<double(double)> |
| | 一元函数
|
| using | rm::Func1ds = std::vector<std::function<double(double)>> |
| | 一元函数组
|
| using | rm::FuncNd = std::function<double(const std::valarray<double> &)> |
| | 多元函数
|
| using | rm::FuncNds = std::function<std::valarray<double>(const std::valarray<double> &)> |
| | 多元函数组
|
|
| double | rm::derivative (Func1d func, double x, DiffMode mode=DiffMode::Central, double dx=1e-3) |
| | 计算一元函数的导数
|
| std::valarray< double > | rm::grad (FuncNd func, const std::valarray< 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::valarray< double >, double > | rm::fminunc (FuncNd func, const std::valarray< double > &x0, const OptimalOptions &options={}) |
| | 无约束多维函数的最小值搜索,可参考 多维无约束最优化方法
|
| std::pair< std::valarray< double >, double > | rm::fmincon (FuncNd func, const std::valarray< double > &x0, FuncNds c, FuncNds ceq, const OptimalOptions &options={}) |
| | 有约束多维函数的最小值搜索
|
| std::valarray< double > | rm::lsqnonlin (const FuncNds &func, const std::valarray< double > &x0, const OptimalOptions &options={}) |
| | 非线性最小二乘求解,实现与 [1] 类似的算法
|
| std::valarray< double > | rm::lsqnonlinRKF (const FuncNds &func, const std::valarray< double > &x0, RobustMode rb, const OptimalOptions &options={}) |
| | 带 Robust 核函数的非线性最小二乘求解
|
包含一维函数最小值搜索、无约束多维函数最小值搜索等最优化算法
◆ Func1d
#include <rmvl/algorithm/numcal.hpp>
一元函数
◆ Func1ds
| using rm::Func1ds = std::vector<std::function<double(double)>> |
#include <rmvl/algorithm/numcal.hpp>
一元函数组
◆ FuncNd
| using rm::FuncNd = std::function<double(const std::valarray<double> &)> |
#include <rmvl/algorithm/numcal.hpp>
多元函数
◆ FuncNds
| using rm::FuncNds = std::function<std::valarray<double>(const std::valarray<double> &)> |
#include <rmvl/algorithm/numcal.hpp>
多元函数组
◆ ConsMode
#include <rmvl/algorithm/numcal.hpp>
约束求解模式
| 枚举值 |
|---|
| Exterior Python: rm.ConsMode.Exterior | 外罚函数法
|
| Lagrange Python: rm.ConsMode.Lagrange | 拉格朗日乘子法(仅支持等式约束)
|
◆ DiffMode
#include <rmvl/algorithm/numcal.hpp>
梯度/导数计算模式
| 枚举值 |
|---|
| Central Python: rm.DiffMode.Central | 中心差商
|
| Ridders Python: rm.DiffMode.Ridders | Richardson 外推 [17]
|
◆ FminMode
#include <rmvl/algorithm/numcal.hpp>
多维函数最优化模式
| 枚举值 |
|---|
| ConjGrad Python: rm.FminMode.ConjGrad | 共轭梯度法 [7]
|
| Simplex Python: rm.FminMode.Simplex | 单纯形法 [13]
|
◆ LsqMode
#include <rmvl/algorithm/numcal.hpp>
最小二乘求解模式
| 枚举值 |
|---|
| SGN Python: rm.LsqMode.SGN | 改进的 Gauss-Newton 法,单次寻找最优步长的 Gauss-Newton 法
|
| GN Python: rm.LsqMode.GN | Gauss-Newton 法
|
| LM Python: rm.LsqMode.LM | Levenberg-Marquardt 法 [4] [11]
|
◆ RobustMode
#include <rmvl/algorithm/numcal.hpp>
Robust 核函数
| 枚举值 |
|---|
| L2 Python: rm.RobustMode.L2 | L2 核函数
|
| Huber Python: rm.RobustMode.Huber | Huber 核函数 [8]
|
| Tukey Python: rm.RobustMode.Tukey | Tukey 核函数 [18]
|
| Cauchy Python: rm.RobustMode.Cauchy | Cauchy 核函数
|
| GM Python: rm.RobustMode.GM | Geman-McClure 核函数 [6]
|
◆ derivative()
| Python: |
|---|
| rm.derivative( | func, x[, mode[, dx]] | ) -> | grad |
#include <rmvl/algorithm/numcal.hpp>
计算一元函数的导数
- 参数
-
| [in] | func | 一元函数 |
| [in] | x | 指定位置的自变量 |
| [in] | mode | 导数计算模式,默认为中心差商 DiffMode::Central |
| [in] | dx | 坐标的微小增量,默认为 1e-3 |
- 返回
- 函数在指定点的导数
◆ fminbnd()
| std::pair< double, double > rm::fminbnd |
( |
Func1d | func, |
|
|
double | x1, |
|
|
double | x2, |
|
|
const OptimalOptions & | options = {} ) |
| Python: |
|---|
| rm.fminbnd( | func, x1, x2[, options] | ) -> | x, fval |
#include <rmvl/algorithm/numcal.hpp>
一维函数最小值搜索
- 参数
-
| [in] | func | 一维约束函数 |
| [in] | x1 | 搜索区间左端点 |
| [in] | x2 | 搜索区间右端点 |
| [in] | options | 优化选项,可供设置的有 max_iter 和 tol |
- 返回
- [x, fval] 最小值点和最小值
◆ fmincon()
| Python: |
|---|
| rm.fmincon( | func, x0, c, ceq[, options] | ) -> | x, fval |
#include <rmvl/algorithm/numcal.hpp>
有约束多维函数的最小值搜索
- 参数
-
| [in] | func | 多维函数 |
| [in] | x0 | 初始点 |
| [in] | c | 不等式约束 \(f_c(x)\le0\) |
| [in] | ceq | 等式约束 \(f_{ceq}(x)=0\) |
| [in] | options | options 优化选项,可供设置的有 cons_mode、max_iter、tol 和 dx,当 cons_mode == ConsMode::Exterior 时,fmin_mode 也可供设置 |
- 注解
- 当 cons_mode == ConsMode::Lagrange 时,参数 c 被忽略
- 返回
- [x, fval] 最小值点和最小值
◆ fminunc()
| std::pair< std::valarray< double >, double > rm::fminunc |
( |
FuncNd | func, |
|
|
const std::valarray< double > & | x0, |
|
|
const OptimalOptions & | options = {} ) |
| Python: |
|---|
| rm.fminunc( | func, x0[, options] | ) -> | x, fval |
#include <rmvl/algorithm/numcal.hpp>
无约束多维函数的最小值搜索,可参考 多维无约束最优化方法
- 参数
-
| [in] | func | 多维约束函数 |
| [in] | x0 | 初始点 |
| [in] | options | 优化选项,可供设置的有 fmin_mode、max_iter、tol 和 dx |
- 返回
- [x, fval] 最小值点和最小值
◆ grad()
| Python: |
|---|
| rm.grad( | func, x[, mode[, dx]] | ) -> | grad |
#include <rmvl/algorithm/numcal.hpp>
计算多元函数的梯度
- 参数
-
| [in] | func | 多元函数 |
| [in] | x | 指定位置的自变量 |
| [in] | mode | 梯度计算模式,默认为中心差商 DiffMode::Central |
| [in] | dx | 计算偏导数时,坐标的微小增量,默认为 1e-3 |
- 返回
- 函数在指定点的梯度向量
◆ lsqnonlin()
| std::valarray< double > rm::lsqnonlin |
( |
const FuncNds & | func, |
|
|
const std::valarray< double > & | x0, |
|
|
const OptimalOptions & | options = {} ) |
| Python: |
|---|
| rm.lsqnonlin( | func, x0[, options] | ) -> | x |
#include <rmvl/algorithm/numcal.hpp>
非线性最小二乘求解,实现与 [1] 类似的算法
- 参数
-
| [in] | func | 最小二乘目标函数,满足
\[F(\boldsymbol x_k)=\frac12\|\boldsymbol f(\boldsymbol x_k)\|_2^2=\frac12
\left(\texttt{func}[0]^2+\texttt{func}[1]^2+\cdots+\texttt{func}[n]^2\right)\]
|
| [in] | x0 | 初始点 |
| [in] | options | 优化选项,可供设置的有 lsq_mode、max_iter、tol 和 dx |
- 返回
- 最小二乘解
◆ lsqnonlinRKF()
| Python: |
|---|
| rm.lsqnonlinRKF( | func, x0, rb[, options] | ) -> | x |
#include <rmvl/algorithm/numcal.hpp>
带 Robust 核函数的非线性最小二乘求解
- 参数
-
- 返回
- 最小二乘解
◆ region()
| std::pair< double, double > rm::region |
( |
Func1d | func, |
|
|
double | x0, |
|
|
double | delta = 1 ) |
| Python: |
|---|
| rm.region( | func, x0[, delta] | ) -> | a, b |
#include <rmvl/algorithm/numcal.hpp>
采用进退法确定搜索区间
- 参数
-
| [in] | func | 一维函数 |
| [in] | x0 | 初始点 |
| [in] | delta | 搜索步长 |
- 返回
- 搜索区间