包含一维函数最小值搜索、无约束多维函数最小值搜索等最优化算法
更多...
|
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
◆ Func1ds
◆ FuncNd
using rm::FuncNd = std::function<double(const std::vector<double> &)> |
◆ FuncNds
◆ DiffMode
◆ FminMode
◆ derivative()
#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 = {} ) |
◆ grad()
#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 ) |