forked from rosh/MQL5Book
96 lines
2.8 KiB
MQL5
96 lines
2.8 KiB
MQL5
//+------------------------------------------------------------------+
| |
//| EnvError.mq5 |
| |
//| Copyright 2021, MetaQuotes Ltd. |
| |
//| https://www.mql5.com |
| |
//+------------------------------------------------------------------+
| |
#include "Matrix.mqh"
| |
| |
//+------------------------------------------------------------------+
| |
//| Script program start function |
| |
//+------------------------------------------------------------------+
| |
void OnStart()
| |
{
| |
// make sure matrix inversion works without errors
| |
Print("Test matrix inversion (should pass)");
| |
double a[9] =
| |
{
| |
1, 2, 3,
| |
4, 5, 6,
| |
7, 8, 0,
| |
};
| |
| |
ResetLastError();
| |
MatrixSquare mA(a); // assign data to source matrix
| |
Print("Input");
| |
mA.print();
| |
MatrixSquare mAinv(3);
| |
mAinv = !mA; // invert it and store in new matrix
| |
Print("Result");
| |
mAinv.print();
| |
| |
Print("Check inverted by multiplication");
| |
MatrixSquare test(3); // check inversion via multiplication
| |
test = mA * mAinv;
| |
test.print(); // get identity matrix
| |
| |
Print(EnumToString(Matrix::lastError())); // ok
| |
| |
// try invert another matrix
| |
Print("Test matrix inversion (should fail)");
| |
double b[9] =
| |
{
| |
-22, -7, 17,
| |
-21, 15, 9,
| |
-34,-31, 33
| |
};
| |
| |
MatrixSquare mB(b);
| |
Print("Input");
| |
mB.print();
| |
ResetLastError();
| |
Print("Result");
| |
(!mB).print();
| |
Print(EnumToString(Matrix::lastError())); // singular
| |
| |
Print("Empty matrix creation");
| |
MatrixSquare m0(0);
| |
Print(EnumToString(Matrix::lastError()));
| |
| |
Print("'Rectangular' square matrix creation");
| |
MatrixSquare r12(1, 2);
| |
Print(EnumToString(Matrix::lastError()));
| |
}
| |
//+------------------------------------------------------------------+
| |
/*
| |
example output
| |
| |
Test matrix inversion (should pass)
| |
Input
| |
1.00000 2.00000 3.00000
| |
4.00000 5.00000 6.00000
| |
7.00000 8.00000 0.00000
| |
Result
| |
-1.77778 0.88889 -0.11111
| |
1.55556 -0.77778 0.22222
| |
-0.11111 0.22222 -0.11111
| |
Check inverted by multiplication
| |
1.00000 +0.00000 0.00000
| |
-0.00000 1.00000 +0.00000
| |
0.00000 0.00000 1.00000
| |
ERR_USER_MATRIX_OK
| |
Test matrix inversion (should fail)
| |
Input
| |
-22.00000 -7.00000 17.00000
| |
-21.00000 15.00000 9.00000
| |
-34.00000 -31.00000 33.00000
| |
Result
| |
0.0 0.0 0.0
| |
0.0 0.0 0.0
| |
0.0 0.0 0.0
| |
ERR_USER_MATRIX_SINGULAR
| |
Empty matrix creation
| |
ERR_USER_MATRIX_EMPTY
| |
'Rectangular' square matrix creation
| |
ERR_USER_MATRIX_NOT_SQUARE
| |
*/
| |
//+------------------------------------------------------------------+
|