Wprowadzenie
Dzisiaj zajmiemy się zmorą studentów pierwszego roku algebry liniowej: definitywnością macierzy! Najwyraźniej nie stanowi to jeszcze wyzwania, więc zaczynamy:
Wejście
- A symetryczna Matryca w dowolnym dogodnym formacie (możesz oczywiście wziąć tylko górną lub dolną część matrycy)
- Opcjonalnie: rozmiar matrycy
Co robić?
Wyzwanie jest proste: biorąc pod uwagę macierz o wartości rzeczywistej Macierz decyduje, czy jest ona pozytywnie określona, podając prawdziwą wartość, jeśli tak, i wartość falsey, jeśli nie.
Możesz założyć, że Twoje wbudowane naprawdę działają dokładnie, a zatem nie musisz brać pod uwagę problemów numerycznych, które mogłyby prowadzić do niewłaściwego zachowania, jeśli strategia / kod „możliwe do udowodnienia” przyniosą poprawny wynik.
Kto wygrywa?
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach (na język)!
Czym w każdym razie jest Matryca dodatnia?
Istnieje najwyraźniej 6 równoważnych sformułowań, w których matryca symetryczna jest dodatnia. Powtórzę trzy łatwiejsze i odsyłam do Wikipedii w przypadku bardziej złożonych.
- Jeśli to jest dodatnie. Można to ponownie sformułować w następujący sposób: Jeżeli dla każdego niezerowego wektora iloczyn (standardowy) kropek i jest dodatni, to jest dodatnio określony.
- Niech być wartości własne z , jeśli teraz (to jest wszystkich wartości własne są dodatnie), a następnie jest pozytywnie określone. Jeśli nie wiesz, jakie są wartości własne, sugeruję skorzystanie z ulubionej wyszukiwarki, aby się dowiedzieć, ponieważ wyjaśnienie (i potrzebne strategie obliczeniowe) jest zbyt długie, aby mogło zostać zawarte w tym poście.A ∀ i ∈ { 1 , … , n } : λ i > 0 A
- Jeżeli Cholesky'ego-rozkładu z istnieje, to istnieje dolną trójkątne matrycy takie, że następnie jest dodatnio określony. Zauważ, że jest to równoważne wczesnemu zwróceniu wartości „fałsz”, jeśli w dowolnym momencie obliczenie katalogu głównego podczas algorytmu nie powiedzie się z powodu argumentu ujemnego.
Przykłady
Dla prawdziwej wydajności
Dla wyjścia falsey
(co najmniej jedna wartość własna wynosi 0 / dodatnia półokreślona)
(wartości własne mają różne znaki / nieokreślony)
(wszystkie wartości własne mniejsze niż 0 / definitywnie ujemne)
(wszystkie wartości własne mniejsze niż 0 / definitywnie ujemne)
(wszystkie wartości własne mniejsze niż 0 / definitywnie ujemne)
(trzy dodatnie, jedna ujemna wartość własna / nieokreślona)
Odpowiedzi:
C, 108 bajtów
-1 bajt dzięki Logern
-3 bajty dzięki ceilingcat
Wypróbuj online!
Przeprowadza eliminację Gaussa i sprawdza, czy wszystkie elementy ukośne są dodatnie (kryterium Sylwestra). Argument
n
jest rozmiarem macierzy minus jeden.źródło
i=0
do pętli for, wykonasz wywołanie rekurencyjnef(M,n-1,0)
i początkowe z 0 jako trzeci argument.MATLAB / Octave ,
191712 bajtówWypróbuj online!
Funkcja eig zapewnia wartości własne w porządku rosnącym, więc jeśli pierwsza wartość własna jest większa od zera, pozostałe też są.
źródło
f=
na początku - anonimowe funkcje są ogólnie akceptowane jako odpowiedzi.8.9219e-17
zamiast 0.Galaretka ,
1110 bajtówWykorzystuje kryterium Sylvester .
Wypróbuj online!
Jak to działa
źródło
R , 29 bajtów
Wypróbuj online!
Alternatywne użycie cholesky:
R ,
3433 bajtówWypróbuj online!
-1 bajt dzięki @Giuseppe
źródło
Haskell , 56 bajtów
Wypróbuj online!
Zasadniczo port odpowiedzi nwellnhofa . Dokonuje eliminacji gaussowskiej i sprawdza, czy elementy na głównej przekątnej są dodatnie.
Nie udaje się uzyskać pierwszego wyniku falsey z powodu błędów zaokrąglania, ale teoretycznie działałoby to z nieskończoną precyzją.Dzięki sugestii Curtisa Bechtela wszystkie wyniki są teraz prawidłowe.źródło
inputs :: [[[Rational]]]
aby uzyskać poprawne odpowiedziWolfram Language (Mathematica) , 20 bajtów
Wypróbuj online!
źródło
MATL , 4 bajty
Wypróbuj online!
[3 -2 2; -2 4 0; 2 0 2]
0
źródło
[1 2 3j]
falseyMathematica,
2928 bajtówDefinicja 2.
źródło
Julia 1.0 , 28 bajtów
Wypróbuj online!
Julia 0.6 , 8 bajtów
Wypróbuj online!
źródło
MATL , 6 bajtów
Można to zrobić przy użyciu jeszcze mniej bajtów @Mr. Xcoderowi udało się znaleźć 5-bajtową odpowiedź MATL !
Wyjaśnienie
Wypróbuj online!
źródło
Klon , 33 bajty
(tj. moje 2 centy)
źródło
JavaScript (ES6),
99 9588 bajtówWypróbuj online!
źródło