Dans ce défi, vous recevrez une matrice carrée A
, un vecteur v
et un scalaire λ
. Vous devrez déterminer si(λ, v)
une paire propre correspond à A
; c'est-à-dire, que ce soit ou non Av = λv
.
Produit scalaire
Le produit scalaire de deux vecteurs est la somme de la multiplication par élément. Par exemple, le produit scalaire des deux vecteurs suivants est:
(1, 2, 3) * (4, 5, 6) = 1*4 + 2*5 + 3*6 = 32
Notez que le produit scalaire n'est défini qu'entre deux vecteurs de même longueur.
Multiplication matrice-vecteur
Une matrice est une grille de valeurs 2D. Une matrice m
x n
a des m
lignes et des n
colonnes. Nous pouvons imaginer une matrice m
x n
comme m
vecteurs de longueur n
(si nous prenons les lignes).
La multiplication matrice-vecteur est définie entre une matrice m
x n
et un n
vecteur taille . Si nous multiplions une matrice m
x n
et un n
vecteur taille , nous obtenons un m
vecteur taille . lei
valeur -th dans le vecteur de résultat est le produit scalaire dui
-th ligne de la matrice et du vecteur d'origine.
Exemple
1 2 3 4 5
Let A = 3 4 5 6 7
5 6 7 8 9
1
3
Let v = 5
7
9
Si on multiplie la matrice et le vecteur Av = x
, nous obtenons ce qui suit:
x 1 = A T 1 * v /* AT1 means the first row of A; A1 would be the first column */
= (1,2,3,4,5) * (1,3,5,7,9) = 1 * 1 + 2 * 3 + 3 * 5 + 4 * 7 + 5 * 9 = 1 + 6 + 15 + 28 + 45 = 95
x 2 = A T 2 * v = (3,4,5,6,7) * (1,3,5,7,9) = 3 * 1 + 4 * 3 + 5 * 5 + 6 * 7 + 7 * 9 = 3 + 12 + 25 + 42 + 63 = 145
x 3 = A T 3 * v = (5,6,7,8,9) * (1,3,5,7,9) = 5 * 1 + 6 * 3 + 7 * 5 + 8 * 7 + 9 * 9 = 5 + 18 + 35 + 56 + 81 = 195
Donc, nous obtenons Av = x = (95, 145, 195)
.
Multiplication scalaire
La multiplication d'un scalaire (un nombre unique) et d'un vecteur est simplement une multiplication par élément. Par exemple,3 * (1, 2, 3) = (3, 6, 9)
,. C'est assez simple.
Valeurs propres et vecteurs propres
Étant donné la matrice A
, nous disons que λ
c'est une valeur propre correspondant à v
et v
est un vecteur propre correspondant à λ
si et seulement si Av = λv
. (Où Av
est la multiplication matrice-vecteur etλv
multiplication scalaire).
(λ, v)
est une paire propre.
Spécifications du défi
Contribution
L'entrée consistera en une matrice, un vecteur et un scalaire. Ceux-ci peuvent être pris dans n'importe quel ordre dans n'importe quel format raisonnable.
Production
La sortie sera une valeur véridique / fausse; véridique si et seulement si le scalaire et le vecteur sont une paire propre avec la matrice spécifiée.
Règles
- Des échappatoires standard s'appliquent
- Si une fonction intégrée de vérification d'une paire propre existe dans votre langue, vous ne pouvez pas l'utiliser.
- Vous pouvez supposer que tous les nombres sont des entiers
Cas de test
MATRIX VECTOR EIGENVALUE
2 -3 -1 3
1 -2 -1 1 1 -> TRUE
1 -3 0 0
2 -3 -1 1
1 -2 -1 1 -2 -> TRUE
1 -3 0 1
1 6 3 1
0 -2 0 0 4 -> TRUE
3 6 1 1
1 0 -1 2
-1 1 1 1 7 -> FALSE
1 0 0 0
-4 3 1
2 1 2 2 -> TRUE
2 1 2 -> TRUE
J'ajouterai un 4x4 plus tard.
la source
Réponses:
Gelée , 5 octets
Il s'agit d'un programme triadique complet.
Essayez-le en ligne!
Comment ça marche
la source
v
on pourrait attendre aussi peu que quatre octets.Mathematica, 10 octets
Prend l'entrée comme
{vector, matrix, scalar}
et retourne un booléen.la source
MATL, 7 octets
Entrées dans l' ordre:
l
,v
,A
.Explication:
Réponse étonnamment longue, si vous me le demandez, principalement parce que j'avais besoin d'un moyen pour obtenir toutes les entrées correctement. Je ne pense pas que moins de 5 octets soit possible, mais ce serait cool si quelqu'un trouvait une solution à 5 ou 6 octets.
Fondamentalement, cela calcule
l*v==A*v
.la source
@(A,v,l)A*v==v*l
, cela semble assez verbeux, et j'ai le sentiment que 6 devrait être suffisant si j'obtiens une entrée un peu plus intelligente.CJam , 15 octets
Prend la saisie dans le formulaire
vector scalar matrix
.Essayez-le en ligne!
Explication
la source
MATLAB, 16 octets
Réponse plutôt banale. Définit une fonction anonyme prenant les entrées et calcule l'égalité élément par élément des vecteurs résultants. Un simple zéro dans un tableau logique fait un tableau falsey dans MATLAB.
la source
[true,false]
, par exemple , merci de m'avoir enseigné =)[]
implicite presque mais pas tout à fait (une matrice vide est différente)all()
est appelé à l'entrée deif
,while
etc.MATLAB, 38 octets
Renvoie 1 ou 0.
MATLAB, 30 octets
Résultats
comme une valeur véridique. Une valeur falsifiée est un vecteur similaire avec une ou toutes les valeurs 0 au lieu de 1.
la source
isequal
fonction peut-elle être raccourcie==
?isequal
serait nécessaire si la sortie requisetrue
oufalse
plutôt qu'une valeur véridique ou falsey. À l'heure actuelle, le défi==
est suffisant.C ++,
225203 octetsMerci à @Cort Ammon et @Julian Wolf pour avoir économisé 22 octets!
Essayez-le en ligne!
la source
using std::vector;
pourrait jouer au golf à deux octets de cela. Il en coûte 18 octets, mais peut supprimer 4std::
s, ce qui permet d'économiser 20.using V=std::vector<float>;
ou similaireJulia, 17 octets
Essayez-le en ligne!
la source
Python 2.7, 33 octets
entrée: m = matrice, s = scalaire, e = valeur propre. M et s sont des tableaux numpy
la source
import np
pour qu'il soit valideprint(m,s,e)
déclaration n'aurait pas fonctionné parce que les variablesm
,s
ete
ne sont pas encore affectés / défini. En outre, vous pouvez supprimer l'espace après les deux points. En outre, vous pouvez supprimer la partie `as n` et simplement l'utilisernumpy
plus tard; puisque vous ne l'utilisez qu'une seule fois, l'utilisation du nom complet enregistre en fait un octet.all
lieu deany
? Et je pense ques
c'est le vecteur, pas le scalaire, à moins qu'il me manque quelque chosePython 3 ,
9670 octetsAucune intégration pour la multiplication matrice-vecteur ou scalaire-vecteur!
Essayez-le en ligne!
-26 octets en utilisant
zip
grâce à @LeakyNun!la source
f=lambda A,L,v:all(L*y==sum(i*j for i,j in zip(x,v))for x,y in zip(A,v))
05AB1E , 11 octets
Essayez-le en ligne!
la source
R,
3025 octetsFonction anonyme, assez simple. Renvoie
TRUE
ouFALSE
.la source
oK, 12 octets
C'est une fonction, ça prend
[matrix;vector;scalar]
.Cela ne fonctionne pas en k pour les mêmes raisons que cela
3.0~3
donne0
en conséquence.Fonctionne en k , avec 14 octets :
la source
Axiome, 27 octets
des exercices
la source
@Boolean
il?Python, 26 octets
a
etb
sont des tableaux numpy,c
est un entier.Essayez-le en ligne!
la source
c*b
vraiment nécessaires?c*b
a plus de 1000 éléments, NumPy remplacera la plupart des éléments par...
. Démo.Clojure, 60 octets
Cela vérifie que tous les deltas sont nuls, se repliant ainsi dans l'ensemble de zéro. Exemple d'appel:
la source