| //+------------------------------------------------------------------+
|
| //| delegatefunctions.mqh |
|
| //| Copyright 2003-2022 Sergey Bochkanov (ALGLIB project) |
|
| //| Copyright 2012-2023, MetaQuotes Ltd. |
|
| //| https://www.mql5.com |
|
| //+------------------------------------------------------------------+
|
| //| Implementation of ALGLIB library in MetaQuotes Language 5 |
|
| //| |
|
| //| The features of the library include: |
|
| //| - Linear algebra (direct algorithms, EVD, SVD) |
|
| //| - Solving systems of linear and non-linear equations |
|
| //| - Interpolation |
|
| //| - Optimization |
|
| //| - FFT (Fast Fourier Transform) |
|
| //| - Numerical integration |
|
| //| - Linear and nonlinear least-squares fitting |
|
| //| - Ordinary differential equations |
|
| //| - Computation of special functions |
|
| //| - Descriptive statistics and hypothesis testing |
|
| //| - Data analysis - classification, regression |
|
| //| - Implementing linear algebra algorithms, interpolation, etc. |
|
| //| in high-precision arithmetic (using MPFR) |
|
| //| |
|
| //| This file is free software; you can redistribute it and/or |
|
| //| modify it under the terms of the GNU General Public License as |
|
| //| published by the Free Software Foundation (www.fsf.org); either |
|
| //| version 2 of the License, or (at your option) any later version. |
|
| //| |
|
| //| This program is distributed in the hope that it will be useful, |
|
| //| but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
| //| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
| //| GNU General Public License for more details. |
|
| //+------------------------------------------------------------------+
|
| #include <Object.mqh>
|
| #include "matrix.mqh"
|
| //+------------------------------------------------------------------+
|
| //| Calculates f(arg), stores result to func |
|
| //+------------------------------------------------------------------+
|
| class CNDimensional_Func
|
| {
|
| public:
|
| CNDimensional_Func(void);
|
| ~CNDimensional_Func(void);
|
|
|
| virtual void Func(double &x[],double &func,CObject &obj);
|
| virtual void Func(CRowDouble &x,double &func,CObject &obj);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor without parameters |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_Func::CNDimensional_Func(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_Func::~CNDimensional_Func(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_Func::Func(double &x[],double &func,CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_Func::Func(CRowDouble &x,double &func,CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| calculates func = f(arg), grad[i] = df(arg)/d(arg[i]) |
|
| //+------------------------------------------------------------------+
|
| class CNDimensional_Grad
|
| {
|
| public:
|
| //--- constructor, destructor
|
| CNDimensional_Grad(void);
|
| ~CNDimensional_Grad(void);
|
| //--- virtual method
|
| virtual void Grad(double &x[],double &func,double &grad[],CObject &obj);
|
| virtual void Grad(CRowDouble &x,double &func,CRowDouble &grad,CObject &obj);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor without parameters |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_Grad::CNDimensional_Grad(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_Grad::~CNDimensional_Grad(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_Grad::Grad(double &x[],double &func,double &grad[],
|
| CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_Grad::Grad(CRowDouble &x,double &func,CRowDouble &grad,
|
| CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Calculates func = f(arg), grad[i] = df(arg)/d(arg[i]), |
|
| //| hess[i,j] = d2f(arg)/(d(arg[i])*d(arg[j])) |
|
| //+------------------------------------------------------------------+
|
| class CNDimensional_Hess
|
| {
|
| public:
|
| //--- constructor, destructor
|
| CNDimensional_Hess(void);
|
| ~CNDimensional_Hess(void);
|
| //--- virtual method
|
| virtual void Hess(double &x[],double &func,double &grad[],CMatrixDouble &hess,CObject &obj);
|
| virtual void Hess(CRowDouble &x,double &func,CRowDouble &grad,CMatrixDouble &hess,CObject &obj);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor without parameters |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_Hess::CNDimensional_Hess(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_Hess::~CNDimensional_Hess(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_Hess::Hess(double &x[],double &func,double &grad[],
|
| CMatrixDouble &hess,CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_Hess::Hess(CRowDouble &x,double &func,CRowDouble &grad,
|
| CMatrixDouble &hess,CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Calculates vector function f(arg), stores result to fi |
|
| //+------------------------------------------------------------------+
|
| class CNDimensional_FVec
|
| {
|
| public:
|
| //--- constructor, destructor
|
| CNDimensional_FVec(void);
|
| ~CNDimensional_FVec(void);
|
| //--- virtual method
|
| virtual void FVec(double &x[],double &fi[],CObject &obj);
|
| virtual void FVec(CRowDouble &x,CRowDouble &fi,CObject &obj);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor without parameters |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_FVec::CNDimensional_FVec(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_FVec::~CNDimensional_FVec(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_FVec::FVec(double &x[],double &fi[],CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_FVec::FVec(CRowDouble &x,CRowDouble &fi,CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Calculates f[i] = fi(arg), jac[i,j] = df[i](arg)/d(arg[j]) |
|
| //+------------------------------------------------------------------+
|
| class CNDimensional_Jac
|
| {
|
| public:
|
| //--- constructor, destructor
|
| CNDimensional_Jac(void);
|
| ~CNDimensional_Jac(void);
|
| //--- virtual method
|
| virtual void Jac(double &x[],double &fi[],CMatrixDouble &jac,CObject &obj);
|
| virtual void Jac(CRowDouble &x,CRowDouble &fi,CMatrixDouble &jac,CObject &obj);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor without parameters |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_Jac::CNDimensional_Jac(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_Jac::~CNDimensional_Jac(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_Jac::Jac(double &x[],double &fi[],CMatrixDouble &jac,CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_Jac::Jac(CRowDouble &x,CRowDouble &fi,CMatrixDouble &jac,CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Calculates f(p,q), stores result to func |
|
| //+------------------------------------------------------------------+
|
| class CNDimensional_PFunc
|
| {
|
| public:
|
| //--- constructor, destructor
|
| CNDimensional_PFunc(void);
|
| ~CNDimensional_PFunc(void);
|
| //--- virtual method
|
| virtual void PFunc(double &c[],double &x[],double &func,CObject &obj);
|
| virtual void PFunc(CRowDouble &c,CRowDouble &x,double &func,CObject &obj);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor without parameters |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_PFunc::CNDimensional_PFunc(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_PFunc::~CNDimensional_PFunc(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_PFunc::PFunc(double &c[],double &x[],double &func,CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_PFunc::PFunc(CRowDouble &c,CRowDouble &x,double &func,CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Calculates func = f(p,q), grad[i] = df(p,q)/d(p[i]) |
|
| //+------------------------------------------------------------------+
|
| class CNDimensional_PGrad
|
| {
|
| public:
|
| //--- constructor, destructor
|
| CNDimensional_PGrad(void);
|
| ~CNDimensional_PGrad(void);
|
| //--- virtual method
|
| virtual void PGrad(double &c[],double &x[],double &func,double &grad[],CObject &obj);
|
| virtual void PGrad(CRowDouble &c,CRowDouble &x,double &func,CRowDouble &grad,CObject &obj);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor without parameters |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_PGrad::CNDimensional_PGrad(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_PGrad::~CNDimensional_PGrad(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_PGrad::PGrad(double &c[],double &x[],double &func,
|
| double &grad[],CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_PGrad::PGrad(CRowDouble &c,CRowDouble &x,double &func,
|
| CRowDouble &grad,CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Calculates func = f(p,q), grad[i] = df(p,q)/d(p[i]), |
|
| //| hess[i,j] = d2f(p,q)/(d(p[i])*d(p[j])) |
|
| //+------------------------------------------------------------------+
|
| class CNDimensional_PHess
|
| {
|
| public:
|
| //--- constructor, destructor
|
| CNDimensional_PHess(void);
|
| ~CNDimensional_PHess(void);
|
| //--- virtual method
|
| virtual void PHess(double &c[],double &x[],double &func,double &grad[],CMatrixDouble &hess,CObject &obj);
|
| virtual void PHess(CRowDouble &c,CRowDouble &x,double &func,CRowDouble &grad,CMatrixDouble &hess,CObject &obj);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor without parameters |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_PHess::CNDimensional_PHess(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_PHess::~CNDimensional_PHess(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_PHess::PHess(double &c[],double &x[],double &func,
|
| double &grad[],CMatrixDouble &hess,
|
| CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_PHess::PHess(CRowDouble &c,CRowDouble &x,double &func,
|
| CRowDouble &grad,CMatrixDouble &hess,
|
| CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Callbacks for ODE solvers: calculates dy/dx for given y[] and x |
|
| //+------------------------------------------------------------------+
|
| class CNDimensional_ODE_RP
|
| {
|
| public:
|
| //--- constructor, destructor
|
| CNDimensional_ODE_RP(void);
|
| ~CNDimensional_ODE_RP(void);
|
| //--- virtual method
|
| virtual void ODE_RP(double &y[],double x,double &dy[],CObject &obj);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor without parameters |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_ODE_RP::CNDimensional_ODE_RP(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_ODE_RP::~CNDimensional_ODE_RP(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_ODE_RP::ODE_RP(double &y[],double x,double &dy[],
|
| CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Callbacks for integrators: calculates f(x) for given x |
|
| //| (additional parameters xminusa and bminusx contain x-a and b-x) |
|
| //+------------------------------------------------------------------+
|
| class CIntegrator1_Func
|
| {
|
| public:
|
| //--- constructor, destructor
|
| CIntegrator1_Func(void);
|
| ~CIntegrator1_Func(void);
|
| //--- virtual method
|
| virtual void Int_Func(double x,double xminusa,double bminusx,double &y,CObject &obj);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor without parameters |
|
| //+------------------------------------------------------------------+
|
| CIntegrator1_Func::CIntegrator1_Func(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CIntegrator1_Func::~CIntegrator1_Func(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CIntegrator1_Func::Int_Func(double x,double xminusa,double bminusx,
|
| double &y,CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Callbacks for progress reports: reports current position of |
|
| //| optimization algo |
|
| //+------------------------------------------------------------------+
|
| class CNDimensional_Rep
|
| {
|
| public:
|
| //--- constructor, destructor
|
| CNDimensional_Rep(void);
|
| ~CNDimensional_Rep(void);
|
| //--- virtual method
|
| virtual void Rep(double &arg[],double func,CObject &obj);
|
| virtual void Rep(CRowDouble &arg,double func,CObject &obj);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor without parameters |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_Rep::CNDimensional_Rep(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CNDimensional_Rep::~CNDimensional_Rep(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Empty function body |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_Rep::Rep(double &arg[],double func,CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| |
|
| //+------------------------------------------------------------------+
|
| void CNDimensional_Rep::Rep(CRowDouble &arg,double func,CObject &obj)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|