Matrisler ve Vektörlerle Matematiksel İşlemler

Toplama, çıkarma, çarpma ve bölme gibi matematiksel işlemler, matrisler ve vektörler üzerinde eleman bazında gerçekleştirilebilir.

Matematiksel fonksiyonlar başlangıçta skaler değerler üzerinde ilgili işlemleri gerçekleştirmek için tasarlanmıştır. Fonksiyonların çoğu artık matrislere ve vektörlere uygulanabilmektedir. Bu fonksiyonlar şunlardır: MathAbs, MathArccos, MathArcsin, MathArctan, MathCeil, MathCos, MathExp, MathFloor, MathLog, MathLog10, MathMod, MathPow, MathRound, MathSin, MathSqrt, MathTan, MathExpm1, MathLog1p, MathArccosh, MathArcsinh, MathArctanh, MathCosh, MathSinh ve MathTanh. Bu tür işlemler sırasında, matrisler ve vektörler eleman bazında işlenir. Örnek:

//---
  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 ve MathPow için ikinci eleman, uygun büyüklükte bir skaler veya matris/vektör olabilir.

Aşağıdaki örnek, bir vektöre matematiksel fonksiyonları uygulayarak standart sapmanın nasıl hesaplanacağını göstermektedir.

//+------------------------------------------------------------------+
//| Komut dosyası başlatma fonksiyonu                                |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- vektörü doldurmak için başlatma fonksiyonunu kullan
  vector r(10ArrayRandom); // 0'dan 1'e rastgele sayılar dizisi
//--- ortalama değeri hesapla
  double avr=r.Mean();       // dizi ortalama değeri
  vector d=r-avr;            // ortalama değerden sapmalar dizisini hesapla
  Print("avr(r)="avr);
  Print("r="r);
  Print("d="d);
  vector s2=MathPow(d2);   // sapmaların karelerinin dizisi
  double sum=s2.Sum();       // sapmaların karelerinin toplamı
//--- standart sapmayı iki farklı şekilde hesapla
  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
*/
//+------------------------------------------------------------------+
//| Vektörü rastgele değerlerle doldur                               |
//+------------------------------------------------------------------+
void ArrayRandom(vectorv)
 {
  for(ulong i=0i<v.Size(); i++)
    v[i]=double(MathRand())/32767.;
 }