🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
UnaryOptimizer.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstMath/Function.hpp"
25#include "AstMath/SolverStats.h"
26#include <type_traits>
27
28
29AST_NAMESPACE_BEGIN
30
31
34class AST_MATH_API IUnaryOptimizer
35{
36public:
37 virtual ~IUnaryOptimizer() = default;
38
45 virtual errc_t solve(UnaryScalarFunc& func, double min, double max, double& result, double* funcValue = nullptr) = 0;
46};
47
48
52class AST_MATH_API UnaryOptimizer : public IUnaryOptimizer
53{
54public:
55 using IUnaryOptimizer::solve;
56
62 UnaryOptimizer(double relTol, double absTol, int maxIter);
63
66 explicit UnaryOptimizer(double absTol);
67
68 ~UnaryOptimizer() override = default;
69
71 double getRelTol() const { return relTol_; };
73 double getAbsTol() const { return absTol_; };
75 int getMaxIter() const { return maxIter_; };
76
78 void setRelTol(double relTol) { relTol_ = relTol; };
80 void setAbsTol(double absTol) { absTol_ = absTol; };
82 void setMaxIter(int maxIter) { maxIter_ = maxIter; };
83
85 const SolverStats& getStats() const { return stats_; };
86
94 template<typename Func>
95 typename std::enable_if<!std::is_base_of<UnaryScalarFunc, typename std::remove_pointer<Func>::type>::value, errc_t>::type
96 solve(Func func, double min, double max, double& result, double* funcValue = nullptr) {
97 UnaryScalarGenericFunc<Func> adapter(std::move(func));
98 return this->solve(adapter, min, max, result, funcValue);
99 }
100
101protected:
102 double relTol_;
103 double absTol_;
105 SolverStats stats_{};
106};
107
108
109AST_NAMESPACE_END
一元函数极小值求解器接口
定义 UnaryOptimizer.hpp:35
virtual errc_t solve(UnaryScalarFunc &func, double min, double max, double &result, double *funcValue=nullptr)=0
求解一元函数在区间内的极小值点
一元函数极小值求解器基类
定义 UnaryOptimizer.hpp:53
double relTol_
相对误差容限
定义 UnaryOptimizer.hpp:102
int getMaxIter() const
获取最大迭代次数
定义 UnaryOptimizer.hpp:75
void setMaxIter(int maxIter)
设置最大迭代次数
定义 UnaryOptimizer.hpp:82
int maxIter_
最大迭代次数
定义 UnaryOptimizer.hpp:104
double absTol_
绝对误差容限
定义 UnaryOptimizer.hpp:103
void setRelTol(double relTol)
设置相对误差容限
定义 UnaryOptimizer.hpp:78
double getRelTol() const
获取相对误差容限
定义 UnaryOptimizer.hpp:71
const SolverStats & getStats() const
获取求解器统计信息
定义 UnaryOptimizer.hpp:85
void setAbsTol(double absTol)
设置绝对误差容限
定义 UnaryOptimizer.hpp:80
std::enable_if<!std::is_base_of< UnaryScalarFunc, typenamestd::remove_pointer< Func >::type >::value, errc_t >::type solve(Func func, double min, double max, double &result, double *funcValue=nullptr)
求解一元函数极小值点(支持lambda函数)
定义 UnaryOptimizer.hpp:96
double getAbsTol() const
获取绝对误差容限
定义 UnaryOptimizer.hpp:73
一元标量值函数
定义 UnaryScalarFunc.hpp:31
泛型一元函数适配器
定义 UnaryScalarFunc.hpp:48
求解器统计信息
定义 SolverStats.h:30