Alexandria
2.31.0
SDC-CH common library for the Euclid project
Loading...
Searching...
No Matches
MathUtils
MathUtils
root
SecantMethod.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2022 Euclid Science Ground Segment
3
*
4
* This library is free software; you can redistribute it and/or modify it under
5
* the terms of the GNU Lesser General Public License as published by the Free
6
* Software Foundation; either version 3.0 of the License, or (at your option)
7
* any later version.
8
*
9
* This library is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12
* details.
13
*
14
* You should have received a copy of the GNU Lesser General Public License
15
* along with this library; if not, write to the Free Software Foundation, Inc.,
16
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
19
#ifndef _FUNCTIONUTILS_SECANTMETHOD_H
20
#define _FUNCTIONUTILS_SECANTMETHOD_H
21
22
#include "
MathUtils/function/Function.h
"
23
#include <limits>
24
25
namespace
Euclid
{
26
namespace
MathUtils {
27
28
enum class
SecantEndReason
{
SUCCESS
,
MAX_ITER
,
GRADIENT
,
OUT_OF_BOUNDS
,
VALUE_ERROR
};
29
30
struct
SecantParams
{
31
std::size_t
max_iter
= 1000;
32
double
atol
= 1e-8;
34
double
min
= -
std::numeric_limits<double>::infinity
();
36
double
max
=
std::numeric_limits<double>::infinity
();
37
};
38
39
struct
SecantReturn
{
40
double
root
;
41
SecantEndReason
reason
;
42
std::size_t
iterations
;
43
};
44
57
SecantReturn
secantMethod
(
const
Function
&
func
,
double
x0
,
double
x1
,
const
SecantParams
&
params
=
SecantParams
{});
58
59
}
// namespace MathUtils
60
}
// namespace Euclid
61
62
#endif
// _FUNCTIONUTILS_SECANTMETHOD_H
Function.h
std::array
Euclid::MathUtils::NAryFunction
Interface class representing a function with an arbitrary number of parameters.
Definition
Function.h:104
std::numeric_limits::infinity
T infinity(T... args)
Euclid::MathUtils::secantMethod
SecantReturn secantMethod(const Function &func, double x0, double x1, const SecantParams ¶ms=SecantParams{})
Definition
SecantMethod.cpp:25
Euclid::MathUtils::SecantEndReason
SecantEndReason
Definition
SecantMethod.h:28
Euclid::MathUtils::SecantEndReason::OUT_OF_BOUNDS
@ OUT_OF_BOUNDS
Euclid::MathUtils::SecantEndReason::GRADIENT
@ GRADIENT
Euclid::MathUtils::SecantEndReason::MAX_ITER
@ MAX_ITER
Euclid::MathUtils::SecantEndReason::VALUE_ERROR
@ VALUE_ERROR
Euclid::MathUtils::SecantEndReason::SUCCESS
@ SUCCESS
Euclid
Definition
index_sequence.h:27
std::size_t
Euclid::MathUtils::SecantParams
Definition
SecantMethod.h:30
Euclid::MathUtils::SecantParams::max_iter
std::size_t max_iter
Maximum number of iterations.
Definition
SecantMethod.h:31
Euclid::MathUtils::SecantParams::atol
double atol
Definition
SecantMethod.h:32
Euclid::MathUtils::SecantParams::min
double min
If the gradient moves the next iteration below this limit, clip the result.
Definition
SecantMethod.h:34
Euclid::MathUtils::SecantParams::max
double max
If the gradient moves the next iteration above this limit, clip the result.
Definition
SecantMethod.h:36
Euclid::MathUtils::SecantReturn
Definition
SecantMethod.h:39
Euclid::MathUtils::SecantReturn::root
double root
Solution for the function.
Definition
SecantMethod.h:40
Euclid::MathUtils::SecantReturn::iterations
std::size_t iterations
Number of iterations.
Definition
SecantMethod.h:42
Euclid::MathUtils::SecantReturn::reason
SecantEndReason reason
End reason.
Definition
SecantMethod.h:41
Generated by
1.9.8