矩阵和向量的数学运算

数学运算,包括加法、减法、乘法和除法,可以针对矩阵和向量按元素级执行。

数学函数最初设计用于对标量值执行相关操作。 大多数函数可以应用于矩阵和向量。 其中包括 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= {{1, 4}, {9, 16}};

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

  */

对于 MathModMathPow,第二个元素可以是标量,,或相应大小的矩阵/向量。

下面的示例展示如何将数学函数应用于向量来计算标准偏差。

//+------------------------------------------------------------------+

//| 脚本程序 start 函数                                                |

//+------------------------------------------------------------------+

void OnStart()

 {

//--- 使用初始化函数填充矢量

  vector r(10, ArrayRandom); // 从0 到1 的随机数数组

//--- 计算平均值

  double avr=r.Mean();       // 数组平均值

  vector d=r-avr;            // 计算与平均值的偏差数组

  Print("avr(r)=", avr);

  Print("r=", r);

  Print("d=", d);

  vector s2=MathPow(d, 2);   // 方差平方数组

  double sum=s2.Sum();       // 方差平方和

//--- 以两种不同的方法计算标准偏差

  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(vector& v)

 {

  for(ulong i=0; i<v.Size(); i++)

    v[i]=double(MathRand())/32767.;

 }