pengantar
Hari ini kita akan menangani kutukan siswa aljabar linear tahun pertama: ketegasan matriks! Tampaknya ini belum memiliki tantangan, jadi mari kita mulai:
Memasukkan
- A Matriks simetris dalam format apa pun yang nyaman (Anda tentu saja juga dapat mengambil bagian atas atau bawah dari matriks)
- Secara opsional: ukuran matriks
Apa yang harus dilakukan?
Tantangannya sederhana: Diberikan matriks bernilai nyata Matriks memutuskan apakah itu pasti positif dengan mengeluarkan nilai kebenaran jika demikian dan nilai palsu jika tidak.
Anda dapat mengasumsikan built-in Anda benar-benar berfungsi secara tepat dan karenanya tidak harus memperhitungkan masalah numerik yang dapat mengarah pada perilaku yang salah jika strategi / kode "terbukti" harus menghasilkan hasil yang benar.
Yang menang?
Ini adalah kode-golf , jadi kode terpendek dalam byte (per-bahasa) menang!
Apa itu Matriks definitif positif?
Rupanya ada 6 formulasi yang setara ketika sebuah matriks simetris adalah positif-pasti. Saya akan mereproduksi tiga yang lebih mudah dan merujuk Anda ke Wikipedia untuk yang lebih kompleks.
- Jika maka adalah pasti-positif. Ini dapat dirumuskan ulang sebagai: Jika untuk setiap vektor bukan nol (standar) produk titik dan adalah positif maka adalah pasti-positif.v v A v A
- Biarkan menjadi nilai eigen dari , jika sekarang (itu saja nilai eigen adalah positif) maka adalah positif-pasti. Jika Anda tidak tahu apa nilai eigennya, saya sarankan Anda menggunakan mesin pencari favorit Anda untuk mengetahuinya, karena penjelasan (dan strategi perhitungan yang diperlukan) terlalu lama untuk dimuat dalam pos ini.A ∀ i ∈ { 1 , … , n } : λ i > 0 A
- Jika Cholesky-penguraian dari ada, yaitu terdapat matriks yang lebih rendah-segitiga sehingga maka adalah positif-pasti. Perhatikan bahwa ini setara dengan "false" yang dikembalikan lebih awal jika pada suatu saat perhitungan root selama algoritma gagal karena argumen negatif.
Contohnya
Untuk hasil yang benar
Untuk output falsey
(setidaknya satu nilai eigen adalah 0 / positif semi-pasti)
(nilai eigen memiliki tanda yang berbeda / tidak terbatas)
(semua nilai eigen lebih kecil dari 0 / negatif pasti)
(semua nilai eigen lebih kecil dari 0 / negatif pasti)
(semua nilai eigen lebih kecil dari 0 / negatif pasti)
(tiga positif, satu nilai eigen negatif / tidak terbatas)
Jawaban:
C, 108 byte
Terima kasih -1 byte untuk Logern
-3 byte berkat ceilingcat
Cobalah online!
Melakukan eliminasi Gaussian dan memeriksa apakah semua elemen diagonal positif (kriteria Sylvester). Argumen
n
adalah ukuran dari matriks minus satu.sumber
i=0
for loop, membuat panggilan rekursiff(M,n-1,0)
dan panggilan awal dengan 0 sebagai arg ketiga.MATLAB / Oktaf ,
191712 byteCobalah online!
Function eig menyediakan nilai eigen dalam urutan naik, jadi jika nilai eigen pertama lebih besar dari nol, yang lainnya juga.
sumber
f=
di awal - fungsi anonim umumnya diterima sebagai jawaban.8.9219e-17
bukan 0.Jelly ,
1110 byteMenggunakan kriteria Sylvester .
Cobalah online!
Bagaimana itu bekerja
sumber
R , 29 byte
Cobalah online!
Alternatif menggunakan cholesky:
R ,
3433 byteCobalah online!
-1 byte terima kasih kepada @Giuseppe
sumber
Haskell , 56 byte
Cobalah online!
Pada dasarnya sebuah port jawaban nwellnhof . Melakukan eliminasi gaussian dan memeriksa apakah elemen-elemen pada diagonal utama positif.
Gagal output falsey pertama karena kesalahan pembulatan, tetapi secara teoritis akan bekerja dengan presisi tak terbatas.Berkat saran Curtis Bechtel , sekarang semua hasilnya benar.sumber
inputs :: [[[Rational]]]
untuk mendapatkan jawaban yang benarBahasa Wolfram (Mathematica) , 20 byte
Cobalah online!
sumber
MATL , 4 byte
Cobalah online!
[3 -2 2; -2 4 0; 2 0 2]
0
sumber
[1 2 3j]
juga falseyMathematica,
2928 byteDefinisi 2.
sumber
Julia 1.0 , 28 byte
Cobalah online!
Julia 0,6 , 8 byte
Cobalah online!
sumber
MATL , 6 byte
Dimungkinkan untuk melakukannya menggunakan byte yang lebih sedikit, @Mr. Xcoder berhasil menemukan jawaban MATL 5 byte !
Penjelasan
Cobalah online!
sumber
Maple , 33 byte
(yaitu 2 sen saya)
sumber
JavaScript (ES6),
99 9588 byteCobalah online!
sumber