Alglib c как подключить
решаю задание на с++. использую рад студио.
нашёл библиотеку для работы с матрицами, получилось вычислить собственные вектора (alglib::rmatrixevd(A,n,1,Lm,Lm1,V, V1).
теперь надо вычислить значения квадратной матрицы A*X=B. тоесть решить СЛАУ.
как объявить alglib:ensesolverlsreport для выходного значения. примеров как всегда нет и не находятся.
код
void Matr_B1(double F[2*M][2*M],double A1[2*M][N],double Av[2*M],double B[2*M][N]) < // int n=2*M; alglib::ae_int_t info; alglib::densesolverlsreport rep1 ; bool pr=false; alglib::real_2d_array A,V,V1; alglib::real_1d_array Lm,Lm1;// A.setlength(n,n); V.setlength(n,n);Lm.setlength(n); V1.setlength(n,n);Lm1.setlength(n); for (int j=0;j\n", argv[0]); exit(EXIT_FAILURE); > std::vector X(5), Y(5); X[0]=0.1; X[1]=0.4; X[2]=1.2; X[3]=1.8; X[4]=2.0; Y[0]=0.1; Y[1]=0.7; Y[2]=0.6; Y[3]=1.1; Y[4]=0.9; alglib::real_1d_array AX, AY; AX.setcontent(X.size(), &(X[0])); AY.setcontent(Y.size(), &(Y[0])); alglib::spline1dinterpolant spline; alglib::spline1dbuildcubic(AX, AY, X.size(), 2,0.0,2,0.0, spline); //alglib::spline1dbuildcubic(AX, AY, spline); for(size_t i=0; i printf("\n"); for(int i=-50; i printf("\n"); return EXIT_SUCCESS; >
Пытаюсь его откомпилировать выполнив:
g++ example_alglib.cpp
Получаю ошибки:
/tmp/ccAhAImI.o: In function `main': example_alglib.cpp:(.text+0x1c8): undefined reference to `alglib::real_1d_array::real_1d_array()' example_alglib.cpp:(.text+0x1d7): undefined reference to `alglib::real_1d_array::real_1d_array()' example_alglib.cpp:(.text+0x20a): undefined reference to `alglib::real_1d_array::setcontent(int, double const*)' example_alglib.cpp:(.text+0x23d): undefined reference to `alglib::real_1d_array::setcontent(int, double const*)' example_alglib.cpp:(.text+0x24c): undefined reference to `alglib::spline1dinterpolant::spline1dinterpolant()' example_alglib.cpp:(.text+0x28b): undefined reference to `alglib::spline1dbuildcubic(alglib::real_1d_array const&, alglib::real_1d_array const&, int, int, double, int, double, alglib::spline1dinterpolant&)' example_alglib.cpp:(.text+0x35a): undefined reference to `alglib::spline1dcalc(alglib::spline1dinterpolant const&, double)' example_alglib.cpp:(.text+0x3a1): undefined reference to `alglib::spline1dinterpolant::~spline1dinterpolant()' example_alglib.cpp:(.text+0x3b0): undefined reference to `alglib::real_1d_array::~real_1d_array()' example_alglib.cpp:(.text+0x3bf): undefined reference to `alglib::real_1d_array::~real_1d_array()' example_alglib.cpp:(.text+0x434): undefined reference to `alglib::spline1dinterpolant::~spline1dinterpolant()' example_alglib.cpp:(.text+0x447): undefined reference to `alglib::real_1d_array::~real_1d_array()' example_alglib.cpp:(.text+0x45a): undefined reference to `alglib::real_1d_array::~real_1d_array()' collect2: error: ld returned 1 exit status
Подскажите как победить эти ошибки? не чего толкового нагуглить не могу. Собираю:
g++ --version g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
ALGLIB — библиотека численного анализа — библиотека для MetaTrader 4

Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Реальный автор:
Сергей Бочканов. Сайт проекта ALGLIB — http://www.alglib.net/. История библиотеки берет своё начало в далеком 1999 году.
Примечание: Библиотека работает на MetaTrader 4 build 555 и выше.
Для работы нужно распаковать архив в папку: каталог_данных_терминала.
Коды библиотеки размещаются в папке: каталог_данных_терминала\Math\Alglib\
Примеры тестовых скриптов можно найти в папке: каталог_данных_терминала\MQL4\Scripts\Alglib\
ALGLIB — одна из самых больших и полных математических библиотек
Вам необходимо произвести быстрое Фурье-преобразование? Решить систему дифференциальных уравнений? Или произвести сложный анализ данных? И чтобы все методы были собраны в одном месте, да еще и в исходном коде? Тогда выбирайте библиотеку численных методов ALGLIB!
На сегодняшний день ALGLIB является одной из лучших библиотек алгоритмов, написанных на нескольких языках. Вот что говорится о ней на официальном сайте проекта:
ALGLIB — это кросс-платформенная библиотека численного анализа, поддерживающая несколько языков программирования (C++, C#, Pascal, VBA) и несколько операционных систем (Windows, Linux, Solaris). Возможности ALGLIB включают в себя:
- Линейную алгебру (прямые алгоритмы, EVD, SVD)
- Решение систем уравнений (линейных и нелинейных)
- Интерполяцию
- Оптимизацию
- FFT
- Численное интегрирование
- Линейную и нелинейную аппроксимацию по МНК
- Решение обыкновенных ДУ
- Вычисление специальных функций
- Статистику (описательную статистику и проверку гипотез)
- Анализ данных — классификацию, регрессию, в т.ч. с использованием нейронных сетей
- Реализацию алгоритмов линейной алгебры, интерполяции и т.д. в арифметике высокой точности (с использованием MPFR)
За что выбрать ALGLIB? За то, что библиотека ALGLIB:
- переносима. Она может быть откомпилирована практически на любой платформе с использованием практически любого компилятора.
- проста в использовании. Поддерживает много языков программирования. Если вы используете один язык, вы не должны изучать другой (например, FORTRAN) чтобы откомпилировать внешнюю библиотеку.
- распространяется вместе с исходным кодом. И может быть использована на условиях GPL 2+.
- подходит и для коммерческих пользователей. Те, кто хочет использовать ALGLIB в коммерческой программе, могут купить коммерческую лицензию
Большим плюсом проекта ALGLIB является то, что библиотека постоянно развивается, добавляются новые функции и вносятся исправления по замечаниям пользователей. Последняя текущая версия 3.6.0.
Кроме того, библиотека ALGLIB содержит огромный набор тесткейсов, максимально покрывающих функционал предлагаемых методов. Это позволит вам самостоятельно произвести тесты и сообщить о найденных ошибках авторам проекта.
Здесь представлен представлен перевод ALGLIB версии 3.5.0.
Для работы с библиотекой нужно использовать статические функции класса CAlglib — все функции библиотеки для удобства вынесены в системный класс CAlgib в виде статических функций.
Помимо небольшого демонстрационного скрипта usealglib.mq4, прилагаются переведенные скрипты-тесткейсы — testclasses.mq4 и testinterfaces.mq4. Для запуска тесткейсов используются одноименные включаемые файлы testclasses.mqh и testinterfaces.mqh, которые должны находиться в папке \MQL4\Scripts\Alglib\Testcases\.
Внимание: Выполнение скрипта testclasses.mq4 занимает продолжительное время (около 30 минут).
Подробнее о пакетах портированной библиотеки ALGLIB MQL4:
Пакет содержит классы:
- CHighQualityRand — генератор случайных чисел высокой степени точности.
- CNearestNeighbor — построение и решения KD — деревьев.
- BitConverter — класс, преобразующий числа типа int и double в массив битов, и наоборот.
- CInfOrNaN — класс генерации «не чисел» и плюс/минус бесконечности, а также их генерации.
- ArrayReverse — функция обращения элементов массива.
- GetSelectionString — функция получения строки, собранной из элементов массива типа char.
- MathSign — функция вычисления знака числа.
- MathSinh — функция вычисления гиперболического синуса.
- MathCosh — функция вычисления гиперболического косинуса.
- MathTanh — функция вычисления гиперболического тангенса.
- CBdSS — вычисление функций ошибок.
- CDForest — работа с лесами деревьев решений.
- CKMeans — кластеризация алгоритмом k-means++.
- CLDA — линейный дискриминантный анализ.
- CLinReg — линейная регрессия.
- CMLPBase — многослойный персептрон (нейронные сети).
- CLogit — множественная логит-регрессия.
- CMarkovCPD — цепи Маркова для данных о населении.
- CMLPTrain — обучение многослойного персептрона.
- CMLPE — ансамбли нейронных сетей.
- CPCAnalysis — метод главных компонент.
- CODESolver — решение обыкновенных дифференциальных уравнений.
- CFastFourierTransform — быстрое преобразование Фурье.
- CConv — свертка.
- CCorr — кросс-корреляция.
- CFastHartleyTransform — быстрое преобразование Хартли.
- CGaussQ — квадратурные формулы Гаусса.
- CGaussKronrodQ — квадратурные формулы Гаусса-Кронрода.
- CAutoGK — адаптивный интегратор.
- CIDWInt — интерполяция и аппроксимация по обратному средневзвешенному расстоянию.
- CRatInt — рациональная интерполяция.
- CPolInt — полиномиальная интерполяция.
- CSpline1D — одномерная сплайн-интерполяция.
- CLSFit — аппроксимация линейным или нелинейным МНК.
- CPSpline — параметрическая сплайн-интерполяция.
- CSpline2D — двухмерная сплайн-интерполяция.
- COrtFac — QR/LQ декомпозиции, декомпозиции Хессенберга и двухдиагональных, трехдиагональных матриц.
- CEigenVDetect — нахождение собственных чисел и векторов.
- CMatGen — генерация случайных матриц.
- CTrFac — декомпозиция LU и декомпозиция Холецкого.
- CRCond — оценка числа обусловленности матрицы.
- CMatInv — обращение матрицы.
- CBdSingValueDecompose — сингулярное разложение бидиагональных матрицы.
- CSingValueDecompose — сингулярное разложение матрицы.
- CFbls — быстрые базовые линейные решения.
- CMatDet — вычисление определителя матрицы.
- CSpdGEVD — нахождение собственных чисел и векторов в обобщенных симметричных матрицах.
- CInverseUpdate — обращение и обновление матриц.
- CSchur — декомпозиция Исая Шура.
- CMinCG — оптимизация методом сопряженных градиентов.
- CMinBLEIC — оптимизация с линейными ограничениями в виде равенств и неравенств.
- CMinLBFGS — оптимизация способом последовательного построения и уточнения квадратичной модели функции.
- CMinQP — квадратичное программирование с линейными ограничениями в виде равенств и неравенств.
- CMinLM — оптимизация методом Левенберга-Марквардта.
- CMinComp — функции обратной совместимости.
- CDenseSolver — решение систем линейных уравнений.
- CNlEq — решение систем нелинейных уравнений.
- CGammaFunc — Гамма-функция.
- CIncGammaF — неполная Гамма-функция.
- CBetaF — Бета-функция.
- CIncBetaF — неполная Бета-функция.
- CPsiF — пси-функция.
- CAiryF — функции Эйри.
- CBessel — функции Бесселя целого порядка.
- CJacobianElliptic — эллиптические функции Якоби.
- CDawson — интеграл Доусона.
- CTrigIntegrals — тригонометрические интегралы.
- CElliptic — эллиптические интегралы первого и второго рода.
- CExpIntegrals — экспоненциальные интегралы.
- CFresnel — интегралы Френеля.
- CHermite — полиномы Эрмита.
- CChebyshev — полиномы Чебышева.
- CLaguerre — полиномы Лагерра.
- CLegendre — полиномы Лежандра.
- CChiSquareDistr — хи-квадрат распределение.
- CBinomialDistr — биномиальное распределение.
- CNormalDistr — нормальное распределение.
- CPoissonDistr — распределение Пуассона.
- CStudenttDistr — t-распределение Стъюдента.
- CFDistr — F-распределение.
- CBaseStat — базовые статистические методы.
- CCorrTests — тест на значимость коэффициента корреляции.
- CJarqueBera — критерий Жака-Бера.
- CMannWhitneyU — U-критерий Манна-Уитни.
- CSignTest — критерий знаков.
- CStudentTests — t-тесты Стьюдента.
- CVarianceTests — F-тест и тест хи-квадрат.
- CWilcoxonSignedRank — W-критерий Уилкоксона.
Код:
Функции библиотеки имеют развернутые комментарии, с инструкциями об использовании.
//+------------------------------------------------------------------+ //| Calculation of the distribution moments: mean, variance, | //| skewness, kurtosis. | //| INPUT PARAMETERS: | //| X - sample | //| N - N>=0, sample size: | //| * if given, only leading N elements of X are | //| processed | //| * if not given, automatically determined from | //| size of X | //| OUTPUT PARAMETERS | //| Mean - mean. | //| Variance- variance. | //| Skewness- skewness (if variance<>0; zero otherwise). | //| Kurtosis- kurtosis (if variance<>0; zero otherwise). | //+------------------------------------------------------------------+ static bool CBaseStat::SampleMoments(const double &cx[],const int n,double &mean, double &variance,double &skewness,double &kurtosis) < //--- check if(!CAp::Assert(n>=0,__FUNCTION__+": the error variable")) return(false); //--- check if(!CAp::Assert(CAp::Len(cx)>=n,__FUNCTION__+": length(x))) return(false); //--- check if(!CAp::Assert(CApServ::IsFiniteVector(cx,n),__FUNCTION__+": x is not finite vector")) return(false); //--- create variables double v=0; double v1=0; double v2=0; double stddev=0; //--- Init, special case 'N=0' mean=0; variance=0; skewness=0; kurtosis=0; //--- check if(n0) return(true); //--- Mean for(int i=0;i//--- Variance (using corrected two-pass algorithm) if(n!=1) < //--- calculation for(int i=0;i for(int i=0;i 1); //--- calculation stddev=MathSqrt(variance); > else variance=EMPTY_VALUE; //--- Skewness and kurtosis if(stddev!=0) < //--- calculation for(int i=0;i //--- change values skewness=skewness/n; kurtosis=kurtosis/n-3; > //--- successful execution return(true); >
Для работы с библиотекой нужно использовать статические функции класса CAlglib. Приведем исходный код скрипта функций usealglib.mq4 для вычисления некоторых статистических параметров торговли:
//+------------------------------------------------------------------+ //| UseAlglib.mq4 | //| Copyright 2012, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Подключение библиотек | //+------------------------------------------------------------------+ #include #include //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() < //--- объект для хранения прибыли/убытка по каждой сделке CArrayDouble *profit=new CArrayDouble; //--- объекты для хранения баланса CArrayDouble *balance_total=new CArrayDouble; //--- первоначальный баланс double balance=0; //--- получение истории //--- общее количество закрытых ордеров int orders_total=OrdersHistoryTotal(); //--- получение данных о прибыли и балансе for(int i=0;iif(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) < Print("Ошибка при доступе к исторической базе (",GetLastError(),")"); return; > int order_type=OrderType(); //--- получение первоначального баланса if(order_type==6) // OP_BALANCE=6 < if(NormalizeDouble(OrderProfit()+OrderSwap(),2)>=0.0) if(balance==0.0) balance=OrderProfit(); > //--- получение прибыли и баланса if(order_type==OP_BUY || order_type==OP_SELL) < double order_profit=OrderProfit()+OrderSwap()+OrderCommission(); profit.Add(NormalizeDouble(order_profit,2)); balance_total.Add(balance); balance=balance+NormalizeDouble(order_profit,2); > > //--- balance_total.Add(balance_total.At(balance_total.Total()-1)+profit.At(balance_total.Total()-1)); //--- копирование данных баланса в массив типа double double arr_balance[]; ArrayResize(arr_balance,balance_total.Total()); for(int i=0;i //--- копирование данных прибыли в массив типа double double arr_profit[]; ArrayResize(arr_profit,profit.Total()); for(int i=0;i //--- линейная регресcия //--- количество независимых переменных int nvars=1; //--- объем выборки int npoints=balance_total.Total(); //--- создание матрицы параметров для линейной регрессии CMatrixDouble xy(npoints,nvars+1); for(int i=0;i 0,i); xy[i].Set(1,arr_balance[i]); > //--- переменная, для определения результата вычислений (успешный, неуспешный) int info; //--- объекты классов, необходимые для хранения информации о вычислениях CLinearModelShell lm; CLRReportShell ar; //--- массивы для хранения результатов регрессии double lr_coeff[]; double lr_values[]; ArrayResize(lr_values,npoints); //--- вычисление коэффициентов линейной регрессии CAlglib::LRBuild(xy,npoints,nvars,info,lm,ar); //--- получение коэффициентов линейной регрессии CAlglib::LRUnpack(lm,lr_coeff,nvars); //--- получение восстановленных значений линейной регрессии for(int i=0;i 0]*i+lr_coeff[1]; //--- вычисление Expected Payoff double exp_payoff,tmp1,tmp2,tmp3; CAlglib::SampleMoments(arr_profit,exp_payoff,tmp1,tmp2,tmp3); //--- вычисление массива HPR double HPR[]; ArrayResize(HPR,balance_total.Total()-1); for(int i=0;i1;i++) HPR[i]=balance_total.At(i+1)/balance_total.At(i); //--- вычисление стандартного отклонения и мат.ожидания от HPR double AHPR,SD; CAlglib::SampleMoments(HPR,AHPR,SD,tmp2,tmp3); SD=MathSqrt(SD); //--- вычисление LR Correlation double lr_corr=CAlglib::PearsonCorr2(arr_balance,lr_values); //--- получение LR Standard Error double lr_stand_err=0; for(int i=0;i double delta=MathAbs(arr_balance[i]-lr_values[i]); lr_stand_err=lr_stand_err+delta*delta; > lr_stand_err=MathSqrt(lr_stand_err/(npoints-2)); //--- вычисление Sharpe Ratio double sharpe_ratio=(AHPR-1)/SD; //--- печать PrintFormat("-----------------------------------------------"); PrintFormat("Функция зависимости: y = %.2fx + %.2f",lr_coeff[0],lr_coeff[1]); //--- параметры PrintFormat("Expected Payoff = %.2f",exp_payoff); PrintFormat("AHPR = %.4f",AHPR); PrintFormat("Sharpe Ratio = %.2f",sharpe_ratio); PrintFormat("LR Correlation = %.2f",lr_corr); PrintFormat("LR Standard Error = %.2f",lr_stand_err); PrintFormat("-----------------------------------------------"); //--- удаление объектов delete profit; delete balance_total; > //+------------------------------------------------------------------+
Получим примерно следующий результат:
About ALGLIB
ALGLIB is a cross-platform numerical analysis and data processing library. It supports five programming languages ( C++ , C# , Java , Python , Delphi ) and several operating systems (Windows and POSIX, including Linux). ALGLIB features include:
- Data analysis (classification/regression, statistics)
- Optimization and nonlinear solvers
- Interpolation and linear/nonlinear least-squares fitting
- Linear algebra (direct algorithms, EVD/SVD), direct and iterative linear solvers
- Fast Fourier Transform and many other algorithms
ALGLIB Project offers you several editions of ALGLIB:
ALGLIB Free Edition (download):
+ delivered for free under GPL or Personal/Academic license
+ offers full set of numerical functionality
+ extensive algorithmic optimizations
— single-threaded
— license agreement does not suit most commercial applications
ALGLIB Commercial Edition (more information):
+ flexible commercial license without royalties or distribution fees
+ extensive algorithmic optimizations
+ high performance C++ version (SMP, commercial HPC kernels)
+ two C# versions — managed and HPC one (native code, SMP/SIMD)
+ commercial support and warranties
Why to choose ALGLIB? Because it is:
- portable . It can be compiled almost anywhere with almost any compiler.
- easy to use . Easy integration, comes with extensive documentation.
- efficient . Deep algorithmic and low-level optimizations inside.
- trusted by leading companies . From nuclear research to aerospace.
Announcements
Resources and links
Issues tracker
ALGLIB forum
ALGLIB User Guide online
- dense direct linear solvers
- sparse iterative/direct linear solvers
- dense BLAS
- LU, Cholesky, QR/LQ and SVD decompositions
- matrix inversion, norms and condition numbers
- generation of random matrices
- Sparse BLAS
- LU, Cholesky decompositions
- linear solvers
- eigensolvers
- dense symmetric/Hermitian EVD
- dense nonsymmetric EVD
- sparse symmetric EVD
- single-dimensional interpolation
- 1D, 2D and 3D splines
- fast scattered N-dimensional interpolation
- least squares curve fitting
- single-dimensional curve fitting
- 2D and N-D surfaces
- least squares curve fitting
- Thin plate splines
- Interpolation and fitting
- Large-scale algorithms
- IDW
- original, modified and modified-stabilized algorithms
- linear programming
- simplex method
- interior point method
- quadratic programming
- interior point method
- nonlinear programming
- augmented Lagrangian methods
- SQP
- SLP
- unconstrained nonlinear optimization
- constrained nonlinear optimization (box, linear, nonlinear constraints)
- constrained quadratic programming
- nonsmooth optimization
- Multi-objective optimization
- FFT
- convolution
- correlation
- LDA, PCA
- hierarchical and k-means clustering
- decision forests
- nonlinear classifiers
- Randomized trees and decision forests
- Regression and classification
- Variable importance
- Filtering and smoothing
- Predicting
- descriptive statistics
- parametric and non-parametric tests
- nearest neighbor search
DOCUMENTATION LICENSE:
1. ALGLIB User Guide is licensed for personal use only. See ALGLIB Reference Manual for a free documentation under BSD-like license
2. You may read the Guide and make unlimited copies for personal use.
3. Any other kinds of using the Guide, specifically, sales or any other commercial use, distribution on any material media, through computer networks or any other ways, are prohibited.
ALGLIB® — numerical analysis library, 1999-2024.
ALGLIB is a registered trademark of the ALGLIB Project.
Policies for this site: privacy policy, trademark policy.