Vecteur de norme d'une matrice de vecteurs dans MATLAB
Lors de l'appel de norme
sur une matrice dans MATLAB, il renvoie à ce qui est connu comme une "matrice de la norme" (un scalaire), au lieu d'un tableau de vecteur de normes. Est-il possible d'obtenir la norme de chaque vecteur dans une matrice sans boucle, et profitant de MATLAB vectorisation?
- qu'en somme?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez calculer la norme de chaque ligne ou colonne d'une matrice de vous-même en utilisant l'élément de sage opérateurs arithmétiques et les fonctions définies à opérer sur les donnée de la matrice de dimensions (comme SOMME et MAX). Voici comment on peut calculer certaines colonnes normes pour une matrice
M
:Ces normes peuvent facilement être faits pour fonctionner sur les lignes au lieu des colonnes en changeant la dimension des arguments de
...,1
à...,2
.M
comprend que les nombres réels, vous pouvez remplacer leabs(M)
avecM
dans letwoNorm
comme le.^2
efficacement annule tout les signes négatifs.sqrt(dot(M, M, dim))
.À partir de la version 2017b au-delà, vous pouvez utiliser vecnorm.
De mise en œuvre existantes pour les deux-norme qui peut être amélioré.
abs(M).^2
va être le calcul de tout un tas d'inutiles racines carrées qui vient d'obtenir au carré d'emblée.Beaucoup mieux faire:
Ce gère efficacement réelle et complexe M.
À l'aide de
real()
assure quesum
etsqrt
loi sur les nombres réels (plutôt que des nombres complexes avec 0 partie imaginaire).norm_2 = @(A,dim)sqrt( sum( real(A).*conj(A) , dim) )
permetB=magic([2,3])
etnorm_2( B , 1)
ounorm_2( B , 2)
.Légère plus P j'ai la réponse:
permet
ou comme cela si vous voulez un norm_2.m fichier: