In dieser Herausforderung erhalten Sie eine quadratische Matrix A
, einen Vektor v
und einen Skalar λ
. Sie müssen feststellen, ob (λ, v)
ein Eigenpaar entspricht A
; das heißt, ob oder nicht Av = λv
.
Skalarprodukt
Das Skalarprodukt zweier Vektoren ist die Summe der elementweisen Multiplikation. Beispielsweise ist das Skalarprodukt der folgenden zwei Vektoren:
(1, 2, 3) * (4, 5, 6) = 1*4 + 2*5 + 3*6 = 32
Beachten Sie, dass das Skalarprodukt nur zwischen zwei Vektoren gleicher Länge definiert wird.
Matrix-Vektor-Multiplikation
Eine Matrix ist ein 2D-Wertegitter. Eine m
x- n
Matrix besteht aus m
Zeilen und n
Spalten. Wir können uns eine m
x- n
Matrix als m
Vektoren der Länge vorstellen n
(wenn wir die Zeilen nehmen).
Die Matrix-Vektor-Multiplikation wird zwischen einer m
x- n
Matrix und einem Größenvektor n
definiert. Wenn wir eine m
x- n
Matrix und einen Größenvektor multiplizieren n
, erhalten wir einen Größenvektor m
. Der i
-te Wert im Ergebnisvektor ist das Skalarprodukt der i
-ten Zeile der Matrix und des Originalvektors.
Beispiel
1 2 3 4 5
Let A = 3 4 5 6 7
5 6 7 8 9
1
3
Let v = 5
7
9
Wenn wir die Matrix und den Vektor multiplizieren Av = x
, erhalten wir Folgendes:
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 * 6 * 1 + 3 + 5 + 7 * 8 * 7 + 9 * 9 = 5 + 18 + 35 + 56 + 81 = 195
Also bekommen wir Av = x = (95, 145, 195)
.
Skalarmultiplikation
Die Multiplikation eines Skalars (einer einzelnen Zahl) und eines Vektors ist einfach eine elementweise Multiplikation. Zum Beispiel 3 * (1, 2, 3) = (3, 6, 9)
. Es ist ziemlich einfach.
Eigenwerte und Eigenvektoren
In Anbetracht der Matrix A
sagen wir, dass dies λ
ein Eigenwert ist, der genau dann entspricht v
und v
ein Eigenvektor ist, der λ
genau dann entspricht, wennAv = λv
. (Wo Av
ist Matrix-Vektor-Multiplikation und λv
ist Skalarmultiplikation).
(λ, v)
ist ein Eigenpaar.
Herausforderungsspezifikationen
Eingang
Die Eingabe besteht aus einer Matrix, einem Vektor und einem Skalar. Diese können in beliebiger Reihenfolge in einem angemessenen Format abgerufen werden.
Ausgabe
Die Ausgabe ist ein wahrer / falscher Wert. genau dann wahr, wenn der Skalar und der Vektor ein Eigenpaar mit der angegebenen Matrix sind.
Regeln
- Es gelten Standardlücken
- Wenn in Ihrer Sprache eine integrierte Funktion zum Überprüfen eines Eigenpaars vorhanden ist, können Sie diese möglicherweise nicht verwenden.
- Sie können davon ausgehen, dass alle Zahlen ganze Zahlen sind
Testfälle
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
Ich werde später einen 4x4 hinzufügen.
quelle
Antworten:
Gelee , 5 Bytes
Dies ist ein dreiköpfiges Programm.
Probieren Sie es online!
Wie es funktioniert
quelle
v
nur vier Bytes zu erwarten.Mathematica, 10 Bytes
Nimmt Eingaben wie
{vector, matrix, scalar}
und gibt einen Booleschen Wert zurück.quelle
MATL, 7 Bytes
Eingänge in dieser Reihenfolge:
l
,v
,A
.Erläuterung:
Überraschend lange Antwort, wenn Sie mich fragen, vor allem, weil ich einen Weg brauchte, um alle Eingaben richtig zu machen. Ich denke nicht, dass weniger als 5 Bytes möglich sind, aber es wäre cool, wenn jemand eine 5 oder 6 Byte Lösung finden würde.
Grundsätzlich berechnet dies
l*v==A*v
.quelle
@(A,v,l)A*v==v*l
, scheint dies ziemlich ausführlich zu sein, und ich habe das Gefühl, dass 6 eine Menge sein sollte, wenn ich die Eingabe etwas schlauer bekomme.CJam , 15 Bytes
Nimmt Eingaben in das Formular auf
vector scalar matrix
.Probieren Sie es online!
Erläuterung
quelle
MATLAB, 16 Bytes
Eher triviale Antwort. Definiert eine anonyme Funktion, die die Eingaben verwendet und die elementweise Gleichheit der resultierenden Vektoren berechnet. Eine einzelne Null in einem logischen Array macht ein Array in MATLAB falsch.
quelle
[true,false]
, danke, dass du mich unterrichtet hast =)[]
unterscheidet) implizitall()
auf dem Eingang aufgerufen wirdif
,while
usw.MATLAB, 38 Bytes
Gibt 1 oder 0 zurück.
MATLAB, 30 Bytes
Kehrt zurück
als ein wahrer Wert. Ein falscher Wert ist ein ähnlicher Vektor mit einem oder allen Werten 0 anstelle von 1.
quelle
isequal
Funktion auf verkürzt werden==
?isequal
würde benötigt, wenn die Ausgabe erforderlich isttrue
oderfalse
eher als ein wahrer oder falscher Wert. Wie die Herausforderung steht,==
ist in der Tat genug.C ++
225203 BytesVielen Dank an @Cort Ammon und @Julian Wolf für das Speichern von 22 Bytes!
Probieren Sie es online!
quelle
using std::vector;
könnte zwei Bytes davon Golf spielen. Es kostet 18 Bytes, kann aber 4std::
s entfernen , wodurch 20 gespart werden.using V=std::vector<float>;
oder ähnlichJulia, 17 Bytes
Probieren Sie es online!
quelle
Python 2.7, 33 Bytes
Eingabe: m = Matrix, s = Skalar, e = Eigenwert. M und s sind numpy Arrays
quelle
import np
print(m,s,e)
Aussage gearbeitet haben würde nicht , weil die Variablenm
,s
unde
wurden noch nicht zugewiesen / definiert. Sie können auch das Leerzeichen nach dem Doppelpunkt entfernen. Sie können auch den 'as n'-Teil entfernen und ihnnumpy
später verwenden. Da Sie es nur einmal verwenden, wird durch die Verwendung des vollständigen Namens tatsächlich ein Byte gespeichert.all
statt seinany
? Und ich denke,s
ist der Vektor, nicht der Skalar, es sei denn, ich vermisse etwasPython 3 ,
96-70BytesKeine Builtins für Matrix-Vektor- oder Skalar-Vektor-Multiplikation!
Probieren Sie es online!
-26 Bytes
zip
dank @LeakyNun!quelle
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 Bytes
Probieren Sie es online!
quelle
R
3025 BytesAnonyme Funktion, ziemlich unkompliziert. Rückgabe
TRUE
oderFALSE
.quelle
ok, 12 bytes
Dies ist eine Funktion, die es übernimmt
[matrix;vector;scalar]
.Dies funktioniert in k nicht aus den gleichen Gründen,
3.0~3
die sich daraus0
ergeben.Das Folgende funktioniert in k mit 14 Bytes :
quelle
Axiom, 27 Bytes
Übungen
quelle
@Boolean
?Python, 26 Bytes
a
undb
sind numpy Arrays,c
ist eine ganze Zahl.Probieren Sie es online!
quelle
c*b
eigentlich nötig?c*b
mehr als 1000 Elemente vorhanden sind, ersetzt NumPy die meisten Elemente durch...
. Demo.Clojure, 60 Bytes
Dies prüft, ob alle Deltas Null sind, und kollabiert somit in die Menge von Null. Aufrufbeispiel:
quelle