Matriks kofaktor adalah transpose dari Matriks Adjugate . Elemen-elemen dari matriks ini adalah kofaktor dari matriks asli.
Kofaktor (yaitu elemen matriks kofaktor pada baris i dan kolom j) adalah penentu dari submatrix yang dibentuk dengan menghapus baris ke-i dan kolom ke-j dari matriks asli, dikalikan dengan (-1) ^ (i + j).
Misalnya, untuk matriks
Elemen matriks kofaktor pada baris 1 dan kolom 2 adalah:
Anda dapat menemukan info tentang apa yang menentukan matriks dan bagaimana menghitungnya di sini .
Tantangan
Tujuan Anda adalah untuk mengeluarkan matriks kofaktor dari matriks input.
Catatan : Built-in yang mengevaluasi matriks kofaktor, atau matriks tambahan, atau penentu atau hal serupa yang diizinkan .
Memasukkan
Matriks dapat dimasukkan sebagai argumen baris perintah, sebagai parameter fungsi, dalam STDIN
atau dengan cara apa pun yang paling sesuai untuk bahasa yang Anda gunakan.
Matriks akan diformat sebagai daftar daftar, masing-masing sublist sesuai dengan satu baris, yang berisi faktor-faktor yang dipesan dari kiri ke kanan. Baris dipesan dari atas ke bawah dalam daftar.
Misalnya, matriks
a b
c d
akan diwakili oleh [[a,b],[c,d]]
.
Anda dapat mengganti tanda kurung siku dan koma dengan sesuatu yang lain jika cocok dengan bahasa Anda dan masuk akal (misalnya ((a;b);(c;d))
)
Matriks hanya akan berisi bilangan bulat (yang bisa negatif) .
Matriks akan selalu berbentuk bujur sangkar (yaitu jumlah baris dan kolom yang sama).
Anda dapat mengasumsikan bahwa input akan selalu benar (yaitu tidak ada masalah format, tidak lain dari integer, tidak ada matriks kosong).
Keluaran
Matriks kofaktor yang dihasilkan dapat di-output ke STDOUT
, dikembalikan dari fungsi, ditulis ke file, atau hal serupa lainnya yang secara alami sesuai dengan bahasa yang Anda gunakan.
Matriks kofaktor harus diformat dengan cara yang persis sama dengan matriks input yang diberikan, misalnya [[d,-c],[-b,a]]
. Jika Anda membaca sebuah string, maka Anda harus mengembalikan / menampilkan string di mana matriks diformat persis seperti pada input. Jika Anda menggunakan sesuatu seperti misalnya daftar daftar sebagai input, maka Anda harus mengembalikan daftar daftar juga.
Uji kasus
- Memasukkan:
[[1]]
Keluaran: [[1]]
- Memasukkan:
[[1,2],[3,4]]
Keluaran: [[4,-3],[-2,1]]
- Memasukkan:
[[-3,2,-5],[-1,0,-2],[3,-4,1]]
Keluaran: [[-8,-5,4],[18,12,-6],[-4,-1,2]]
- Memasukkan:
[[3,-2,7,5,0],[1,-1,42,12,-10],[7,7,7,7,7],[1,2,3,4,5],[-3,14,-1,5,-9]]
Keluaran:
[[9044,-13580,-9709,23982,-9737],[-1981,1330,3689,-3444,406],[14727,7113,2715,-9792,414],[-28448,-2674,-707,16989,14840],[-2149,2569,-2380,5649,-3689]]
Mencetak gol
Ini adalah kode-golf sehingga jawaban tersingkat dalam byte menang.
sumber
Jawaban:
J, 29 byte
Trik epsilon / invers / determinan yang sama. Dari kanan ke kiri:
1e_9+
menambahkan epsilon,(-/ .**%.)
adalah determinan (-/ .*
) kali terbalik (%.
),|:
transposes,<.0.5+
putaran.sumber
Matlab,
4233 byteMenggunakan fungsi anonim:
Input dan output adalah matriks (array numerik 2D).
eps
ditambahkan jika matriksnya tunggal. Itu "dihapus" menggunakanround
(hasil sebenarnya dijamin menjadi bilangan bulat).Contoh:
Contoh dengan matriks singular:
Atau coba online di Octave.
sumber
[1,0 ; 0,0]
memberikan kesalahan ketika harus menampilkan[0,0 ; 0,1]
mat2str
: "matriks kofaktor yang dihasilkan mungkin ... dikembalikan dari suatu fungsi"mat2str
eps
sekitar 1e-16. Jadi itu membuat matriks non-singular (tapi sangat buruk). Hasilnya tidak persis bilangan bulat; jadifix
(bulat menuju nol) memperbaikinya. Ini berfungsi asalkan kesalahan tidak melebihi.5
. Saya khawatir tidak ada jaminan. Untuk bilangan bulat yang sangat besar mungkin gagal. Saya mengatakan itu adalah trik kotor :-Pmat2str
diperlukan di sini? Bagi saya rasanya karena ini adalah fungsi, input sebenarnya adalah matriks yang tidak diformat. Seperti jika Anda mencobaf=...
maka lakukanf(f(...))
ini tidak akan berhasil, tetapi menghapusmat2str
membuatnya bekerja dengan baik.Mathematica,
2735 bytesumber
[[1,0],[0,0]]
?R,
12194 byteIni adalah fungsi yang sangat panjang yang menerima objek kelas
matrix
dan mengembalikan objek lain tersebut. Untuk menyebutnya, tetapkan ke variabel.Tidak Terkumpul:
sumber
mapply
bukanouter
danVectorize
GAP , 246 Bytes
Anda dapat mengatakan ini adalah pengkodean yang bagus dengan triple-nested for-loop.
Cukup mudah. GAP tidak benar-benar memiliki alat yang sama untuk menangani matriks yang dilakukan oleh bahasa berorientasi matematika lainnya. Satu-satunya hal yang benar-benar digunakan di sini adalah operator dalam determinan.
ungolfed:
sumber
Verbosity v2 , 196 byte
Cobalah online!
NB: Saat ini tidak bekerja pada TIO, menunggu tarikan. Harus bekerja offline
Mengambil input dalam formulir
((a b)(c d))
untuk diwakiliMeskipun memiliki builtin untuk adjugate, verbositas Verbosity masih melumpuhkannya. Cara kerjanya cukup mendasar, cukup transposisi adjugate dari input.
sumber