W tym wyzwaniu otrzymasz macierz kwadratową A
, wektor v
i skalar λ
. Będziesz musiał ustalić, czy (λ, v)
para własna odpowiada A
; to znaczy, czy nie Av = λv
.
Produkt kropkowy
Iloczyn iloczynu dwóch wektorów jest sumą mnożenia elementarnego. Na przykład iloczyn skalarny następujących dwóch wektorów to:
(1, 2, 3) * (4, 5, 6) = 1*4 + 2*5 + 3*6 = 32
Zauważ, że iloczyn skalarny jest zdefiniowany tylko między dwoma wektorami o tej samej długości.
Mnożenie macierzy-wektorów
Matryca to siatka wartości 2D. m
X n
matryca ma m
wierszy i n
kolumn. Możemy sobie wyobrazić macierz m
x n
jako m
wektory długości n
(jeśli weźmiemy rzędy).
Mnożenie macierzy-wektora jest definiowane między macierzą m
x n
a n
wektorem wielkości . Jeśli pomnożymy macierz m
x n
i n
wektor wielkości , otrzymamy m
wektor wielkości . i
Wartość -ty w wektorze wynik jest kropka produktem i
-tym rzędzie matrycy i oryginalnego wektora.
Przykład
1 2 3 4 5
Let A = 3 4 5 6 7
5 6 7 8 9
1
3
Let v = 5
7
9
Jeśli pomnożymy macierz i wektor Av = x
, otrzymamy:
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
Więc rozumiemy Av = x = (95, 145, 195)
.
Mnożenie przez skalar
Mnożenie skalara (pojedynczej liczby) i wektora jest po prostu mnożeniem elementarnym. Na przykład 3 * (1, 2, 3) = (3, 6, 9)
. To dość proste.
Wartości własne i wektory własne
Biorąc pod uwagę macierz A
, mówimy, że λ
jest to wartość własna odpowiadająca v
i v
jest wektorem własnym odpowiadającym λ
wtedy i tylko wtedy Av = λv
. (Gdzie Av
jest mnożenie macierz-wektor i λv
mnożenie skalarne).
(λ, v)
jest parą własną.
Specyfikacja wyzwań
Wkład
Dane wejściowe będą składały się z macierzy, wektora i skalara. Można je wykonać w dowolnej kolejności w dowolnym rozsądnym formacie.
Wydajność
Dane wyjściowe będą miały wartość prawda / fałsz; Prawda jest wtedy i tylko wtedy, gdy skalar i wektor są parą własną z określoną macierzą.
Zasady
- Obowiązują standardowe luki
- Jeśli w Twoim języku istnieje wbudowana funkcja weryfikacji pary własnej, nie możesz jej używać.
- Możesz założyć, że wszystkie liczby są liczbami całkowitymi
Przypadki testowe
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
Dodam 4x4 później.
Nieczytelne przypadki testowe, które są łatwiejsze do testowania
źródło
Odpowiedzi:
Galaretka , 5 bajtów
To jest triadyczny, pełny program.
Wypróbuj online!
Jak to działa
źródło
v
można się spodziewać zaledwie czterech bajtów.Mathematica, 10 bajtów
Pobiera dane wejściowe
{vector, matrix, scalar}
i zwraca wartość logiczną.źródło
MATL, 7 bajtów
Wejścia w kolejności:
l
,v
,A
.Wyjaśnienie:
Zaskakująco długa odpowiedź, jeśli mnie pytasz, głównie dlatego, że potrzebowałem sposobu, aby poprawnie uzyskać wszystkie dane wejściowe. Nie sądzę, że możliwe jest mniej niż 5 bajtów, ale byłoby fajnie, gdyby ktoś znalazł rozwiązanie 5 lub 6 bajtów.
Zasadniczo to oblicza
l*v==A*v
.źródło
@(A,v,l)A*v==v*l
, wydaje się to dość gadatliwe i mam wrażenie, że 6 powinno wystarczyć, jeśli otrzymam dane nieco mądrzejsze.CJam , 15 bajtów
Pobiera dane wejściowe w formularzu
vector scalar matrix
.Wypróbuj online!
Wyjaśnienie
źródło
MATLAB, 16 bajtów
Raczej banalna odpowiedź. Definiuje anonimową funkcję pobierającą dane wejściowe i oblicza elementarną równość powstałych wektorów. Pojedyncze zero w logicznej tablicy powoduje, że tablica zmienia się w MATLAB.
źródło
[true,false]
Dzięki za nauczenie mnie =)[]
różni) warunkowaneall()
jest wywoływana na wejściuif
,while
itpMATLAB, 38 bajtów
Zwraca 1 lub 0.
MATLAB, 30 bajtów
Zwroty
jako prawdziwa wartość. Falsy to podobny wektor z dowolną lub wszystkimi wartościami 0 zamiast 1.
źródło
isequal
można skrócić tę funkcję==
?isequal
byłaby potrzebna, jeśli wymagane wyjścietrue
lubfalse
zamiast truthy lub wartości falsey. W obliczu wyzwania==
rzeczywiście wystarczy.C ++,
225203 bajtówDzięki @Cort Ammon i @Julian Wolf za uratowanie 22 bajtów!
Wypróbuj online!
źródło
using std::vector;
mógłby oderwać od tego dwa bajty. Kosztuje 18 bajtów, ale może usunąć 4std::
s, oszczędzając 20.using V=std::vector<float>;
lub podobnyJulia, 17 bajtów
Wypróbuj online!
źródło
Python 2.7, 33 bajty
dane wejściowe: m = macierz, s = skalar, e = wartość własna. M i s są tablicami liczbowymi
źródło
import np
, aby była poprawnaprint(m,s,e)
wypowiedź nie pracowali, ponieważ zmiennem
,s
ie
nie zostały jeszcze przypisane / zdefiniowane. Możesz także usunąć spację po dwukropku. Możesz także usunąć część `as n` i użyć jejnumpy
później; ponieważ używasz go tylko raz, użycie pełnej nazwy faktycznie oszczędza bajt.all
zamiastany
? I myślę, żes
to wektor, a nie skalar, chyba że czegoś mi brakujePython 3 ,
9670 bajtówBrak wbudowanych funkcji mnożenia wektora macierzy lub wektora skalarnego!
Wypróbuj online!
-26 bajtów dzięki użyciu
zip
@LeakyNun!źródło
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 bajtów
Wypróbuj online!
źródło
R,
3025 bajtówFunkcja anonimowa, dość prosta. Zwraca
TRUE
lubFALSE
.źródło
ok, 12 bajtów
To jest funkcja, bierze się
[matrix;vector;scalar]
.To nie działa w k z tych samych powodów, które
3.0~3
daje0
w wyniku.Następujące działa w k , z 14 bajtami :
źródło
Aksjomat, 27 bajtów
ćwiczenia
źródło
@Boolean
zrobić?Python, 26 bajtów
a
ib
są tablicami liczbowymi,c
jest liczbą całkowitą.Wypróbuj online!
źródło
c*b
naprawdę potrzebne?c*b
ma więcej niż 1000 elementów, NumPy zastąpi większość elementów...
. Próbny.Clojure, 60 bajtów
To sprawdza, czy wszystkie delty są zerowe, a tym samym zapada się w zbiorze zerowym. Przykład wywołania:
źródło