Operazioni matematiche con matrici e vettori

Le operazioni matematiche, tra cui addizione, sottrazione, moltiplicazione e divisione, possono essere eseguite sugli opportuni elementi di matrici e vettori.

Le funzioni matematiche erano originariamente progettate per eseguire operazioni rilevanti su valori scalari. La maggior parte delle funzioni possono essere applicate a matrici e vettori. Queste includono MathAbs, MathArccos, MathArcsin, MathArctan, MathCeil, MathCos, MathExp, MathFloor, MathLog, MathLog10, MathMod, MathPow, MathRound, MathSin, MathSqrt, MathTan, MathExpm1, MathLog1p, MathArccosh, MathArcsinh, MathArctanh, MathCosh, MathSinh, and MathTanh. Tali operazioni implicano l'elaborazione di opportuni elementi di matrici e vettori. Esempio

//---
  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]]
  */

Per MathMod e MathPow, il secondo elemento può essere sia uno scalare o una matrice/vettore della dimensione appropriata.

L'esempio seguente mostra come calcolare la deviazione standard applicando funzioni matematiche a un vettore.

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
//-- usa la funzione di inizializzazione per riempire il vettore
  vector r(10ArrayRandom); // array di numeri casuali da 0 a 1
//-- calcolare il valore medio
  double avr=r.Mean();       // array valore medio
  vector d=r-avr;            // calcolare un array di deviazioni dalla media
  Print("avr(r)="avr);
  Print("r="r);
  Print("d="d);
  vector s2=MathPow(d2);   // array di deviazioni al quadrato
  double sum=s2.Sum();       // somma delle deviazioni al quadrato
//-- calcolare la deviazione standard in due metodi diversi
  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
*/
//+------------------------------------------------------------------+
//| Riempie un vettore con valori casuali                       |
//+------------------------------------------------------------------+
void ArrayRandom(vectorv)
 {
  for(ulong i=0i<v.Size(); i++)
    v[i]=double(MathRand())/32767.;
 }