Математические операции над матрицами и векторами

Математические операции — сложение, вычитание, умножение и деление — можно производить над матрицами и векторами почленно.

Математические функции изначально были предназначены для проведения математических операций над скалярными величинами. Теперь большая часть этих функций может использоваться и с новыми типами данных — матрицами и векторами — MathAbs, MathArccos, MathArcsin, MathArctan, MathCeil, MathCos, MathExp, MathFloor, MathLog, MathLog10, MathMod, MathPow, MathRound, MathSin, MathSqrt, MathTan, MathExpm1, MathLog1p, MathArccosh, MathArcsinh, MathArctanh, MathCosh, MathSinh, MathTanh. В этом случае матрица или вектор обрабатываются почленно. Пример:

//---
  matrix a= {{14}, {916}};
  Print("matrix a=\n",a);
  a=MathSqrt(a);
  Print("MatrSqrt(a)=\n",a);
  /*
   matrix a=
   [[1,4]
    [9,16]]
   MatrSqrt(a)=
   [[1,2]
    [3,4]]
  */

В случае MathMod и MathPow в качестве второго параметра может быть использован как скаляр, так и матрица или вектор соответствующего размера.

Покажем на примере, как вычислить стандартное отклонение с помощью математических функций над вектором.

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- используем инициализирующую функцию для заполнения вектора
  vector r(10ArrayRandom); // массив случайных чисел от 0 до 1
//--- вычислим среднее значение
  double avr=r.Mean();       // среднее значение массива
  vector d=r-avr;            // вычислим массив отклонений от среднего значения
  Print("avr(r)="avr);
  Print("r="r);
  Print("d="d);
  vector s2=MathPow(d2);   // массив квадратов отклонений
  double sum=s2.Sum();       // сумма квадратов отклонений
//--- вычислим стандартное отклонение 2-мя способами
  double std=MathSqrt(sum/r.Size());
  Print(" std(r)="std);
  Print("r.Std()="r.Std());   
 }
/*
  avr(r)=0.5300302133243813
  r=[0.8346201971495713,0.8031556138798182,0.6696676534318063,0.05386516922513505,0.5491195410016175,0.8224433118686484,...
  d=[0.30458998382519,0.2731254005554369,0.1396374401074251,-0.4761650440992462,0.01908932767723626,0.2924130985442671, ...
   std(r)=0.2838269732183663
  r.Std()=0.2838269732183663
*/
//+------------------------------------------------------------------+
//| Заполняет вектор случайными значениями                           |
//+------------------------------------------------------------------+
void ArrayRandom(vectorv)
 {
  for(ulong i=0i<v.Size(); i++)
    v[i]=double(MathRand())/32767.;
 }