Comment GNU Octave de la matrice de travail de la division? Obtenir un comportement inattendu.
Dans GNU Octave, Comment matrice de travail de la division?
Au lieu de faire
1./[1;1]
J'ai accidentellement fait
1/[1;1]
À ma grande surprise, cela donne:
[0.5, 0.5]
La transversale de cas:
1/[1,1]
donne attendus:
error: operator /: nonconformant arguments (op1 is 1x1, op2 is 1x2)
Quelqu'un peut m'expliquer l' [0.5, 0.5] résultat?
OriginalL'auteur eyaler | 2012-09-04
Vous devez vous connecter pour publier un commentaire.
c'est une réponse que j'ai obtenu à partir d'Alan Boulton à la coursera machine learning cours forum de discussion:
L'essentiel de l'idée, c'est que x /y est définie de façon très générale, de sorte qu'il peut traiter avec des matrices. Conceptuellement, l'opérateur /est d'essayer de le retourner x∗y−1 (ou x * inv(y) dans l'Octave de parler), comme dans l'exemple suivant:
La trickiness qui se passe lorsque y est un vecteur colonne, auquel cas l'inv(y) n'est pas défini, donc pinv(a), la psuedoinverse de y, est utilisé.
Le vecteur y doit être compatible avec x, donc x * pinv(y) est bien définie. Donc c'est ok si y est un vecteur ligne, à condition que x est compatible. Voir la suite de l'Octave de session à des fins d'illustration:
OriginalL'auteur eyaler
Condier exemple suivant,
Si vous voulez de l'élément de sage division, utiliser Un ./B avec la matrice de taille de ces deux éléments, l'égalité des je.e Si A est de taille m∗n B doit être de taille m∗n
Si vous voulez de la matrice par la matrice de la division, l'utilisation A /B avec la matrice de la taille de l'élément A m∗n et B telles que q∗n ou m∗n. L'opérateur /est d'essayer de le retourner x∗y−1 (j'.e x * pinv(a) dans l'octave de format).
qui est la même que
pinv() fonction OCTAVE/MATLAB renvoie de Moore-Penrose de pseudo-inverse de la matrice, alors que l'inv() renvoie l'inverse de la matrice.
Si vous êtes confus au sujet de ce à utiliser, l'utiliser pinv()
Si vous souhaitez plus de précisions sur Quelle est la différence entre pinv et inv?
OriginalL'auteur Akash
Matrice de division de l'Octave expliqué:
Une description formelle de l'Octave de la Matrice de la Division à partir d'ici
http://www.gnu.org/software/octave/doc/interpreter/Arithmetic-Ops.html
Ce que cela signifie, c'est que ces deux doit être la même:
Tout d'abord, comprendre que l'Octave de la matrice de la division n'est pas commutative, tout comme la matrice de la Multiplication n'est pas commutative.
Cela signifie que A /B n'est pas égal à B /A
Un divisé par une matrice avec une seule valeur, qui est l'un:
Un divisé par une matrice avec une seule valeur de trois est 0.33333:
Un divisé par un (1x2) de la matrice:
Avis ci-dessus, comme les instructions dit, nous prenons la norme du vecteur. Donc, vous voyez comment le
[1;1]
a été transformé en[1/2; 1/2]
. Le '2' vient de la longueur du vecteur, le 1 est livré à partir du vecteur. Nous allons faire un autre:Un divisé par un (1x3) de la matrice:
Équivalent:
Ce que si l'un des éléments sont négatifs...
Équivalent:
Alors maintenant, vous avez une idée générale de ce que l'Octave est en train de faire lorsque vous n'avez pas à fournir une matrice carrée. Pour comprendre ce que l'Octave de la matrice section ne quand vous passez une matrice carrée vous devez comprendre ce que la fonction inverse est en train de faire.
J'ai été à la normalisation de vos vecteurs par contre, si vous voulez octave faire vous pouvez ajouter des packages pour le faire, je pense que le paquet suivant permettra de faire ce que j'ai fait avec le vecteur de normalisation:
http://octave.sourceforge.net/geometry/function/normalizeVector.html
Alors maintenant, vous pouvez convertir la division en un équivalent de multiplication. Lisez cet article sur comment la matrice de multiplication de travaux, et vous pouvez revenir en arrière et comprendre ce qui se passe sous le capot d'une matrice de division.
http://www.purplemath.com/modules/mtrxmult2.htm
OriginalL'auteur Eric Leschinski