Opérations mathématiques avec des matrices et des vecteurs
Les opérations mathématiques, y compris l'addition, la soustraction, la multiplication et la division, peuvent être effectuées sur des matrices et des vecteurs élément par élément.
Les fonctions mathématiques ont été conçues à l'origine pour effectuer des opérations pertinentes sur des valeurs scalaires. La plupart des fonctions peuvent être appliquées aux matrices et vecteurs. Celles-ci incluent MathAbs, MathArccos, MathArcsin, MathArctan, MathCeil, MathCos, MathExp, MathFloor, MathLog, MathLog10, MathMod, MathPow, MathRound, MathSin, MathSqrt, MathTan, MathExpm1, MathLog1p, MathArccosh, MathArcsinh, MathArctanh, MathCosh, MathSinh et MathTanh . De telles opérations impliquent un traitement élément par élément des matrices et des vecteurs. Exemple
//---
matrix a= {{1, 4}, {9, 16}};
Print("matrix a=\n",a);
a=MathSqrt(a);
Print("MatrSqrt(a)=\n",a);
/*
matrix a=
[[1,4]
S [9,16]]
MatrSqrt(a)=
[[1,2]
[3,4]]
*/
|
Pour MathMod et MathPow, le deuxième élément peut être soit un scalaire, soit une matrice/vecteur de la taille appropriée.
L'exemple suivant montre comment calculer l'écart type en appliquant des fonctions mathématiques à un vecteur.
//+------------------------------------------------------------------+
//| Fonction de démarrage du programme |
//+------------------------------------------------------------------+
void OnStart()
{
//--- utilise la fonction d'initialisation pour remplir le vecteur
vector r(10, ArrayRandom); // tableau de nombres aléatoires de 0 à 1
//--- calcule la valeur moyenne
double avr=r.Mean(); // valeur moyenne du tableau
vector d=r-avr; // calcule un tableau d'écarts par rapport à la moyenne
Print("avr(r)=", avr);
Print("r=", r);
Print("d=", d);
vector s2=MathPow(d, 2); // tableau des écarts au carré
double sum=s2.Sum(); // somme des écarts au carré
//--- calcule l'écart type dans deux méthodes différentes
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
*/
//+------------------------------------------------------------------+
//| Remplissage d'un vecteur avec des valeurs aléatoires |
//+------------------------------------------------------------------+
void ArrayRandom(vector& v)
{
for(ulong i=0; i<v.Size(); i++)
v[i]=double(MathRand())/32767.;
}
|