pengantar
Dua fungsi trigonometri yang paling umum, sine
dan cosine
(atau sin
dan cos
untuk pendek), dapat diperpanjang menjadi fungsi matriks bernilai. Salah satu cara untuk menghitung analog bernilai matriks adalah sebagai berikut:
Pertimbangkan dua identitas trigonometri penting ini:
Dengan menggunakan identitas ini, kita dapat memperoleh persamaan berikut untuk sin
dan cos
:
The matriks eksponensial ada untuk semua matriks persegi dan diberikan oleh:
di mana A 0 adalah matriks identitas I dengan dimensi yang sama seperti A . Menggunakan matriks eksponensial, dua fungsi trigonometri ini (dan dengan demikian semua fungsi trigonometri lainnya) dapat dievaluasi sebagai fungsi matriks.
Tantangan
Diberikan matriks kuadrat A , menampilkan nilai-nilai sin(A)
dan cos(A)
.
Aturan
- Input dan output mungkin dalam format apa pun yang nyaman dan wajar (array 2D, format matriks bahasa Anda, dll.).
- Anda dapat menulis satu program, dua program independen, satu fungsi, atau dua fungsi. Jika Anda memilih untuk menulis dua fungsi, kode dapat dibagikan di antara mereka (seperti impor dan fungsi pembantu).
- Nilai-nilai matriks input akan selalu berupa bilangan bulat.
- Solusi Anda mungkin memiliki masalah akurasi sebagai akibat dari ketidaktepatan floating-point. Jika bahasa Anda memiliki nilai presisi tak terbatas magis, maka solusi Anda harus bekerja dengan sempurna (mengabaikan fakta bahwa itu akan membutuhkan waktu dan / atau memori tak terbatas). Namun, karena nilai presisi tak terbatas magis itu tidak ada, ketidakakuratan yang disebabkan oleh presisi terbatas dapat diterima. Aturan ini berlaku untuk menghindari komplikasi yang timbul karena membutuhkan sejumlah presisi dalam output.
- Builtin yang menghitung fungsi trigonometri untuk argumen matriks (termasuk fungsi trigonometri hiperbolik) tidak diperbolehkan. Matriks bawaan lainnya (seperti multiplikasi, eksponensial, diagonalisasi, dekomposisi, dan matriks eksponensial) diperbolehkan.
Uji Kasus
Format: A -> sin(A), cos(A)
[[0]] -> [[0]], [[1]]
[[0, 2], [3, 5]] -> [[-0.761177343863758, 0.160587281888277], [0.240880922832416, -0.359709139143065]], [[0.600283445979886, 0.119962280223493], [0.179943420335240, 0.900189146538619]]
[[1, 0, 1], [0, 0, 0], [0, 1, 0]] -> [[0.841470984807897, -0.158529015192103, 0.841470984807897], [0, 0, 0], [0, 1, 0]], [[0.540302305868140, -0.459697694131860, -0.459697694131860], [0, 1, 0], [0, 0, 1]]
[[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]] -> [[0.841470984807897, 0, 0, 0, 0], [0, 0.841470984807897, 0, 0, 0], [0, 0, 0.841470984807897, 0, 0], [0, 0, 0, 0.841470984807897, 0], [0, 0, 0, 0, 0.841470984807897]], [[0.540302305868140, 0, 0, 0, 0], [0, 0.540302305868140, 0, 0, 0], [0, 0, 0.540302305868140, 0, 0], [0, 0, 0, 0.540302305868140, 0], [0, 0, 0, 0, 0.540302305868140]]
[[-3, 2, -6], [3, 0, 4], [4, -2, 7]] -> [[-0.374786510963954, 0.135652884035570, -1.35191037980742], [1.14843105375406, 0.773644542790111, 1.21625749577185], [1.21625749577185, -0.135652884035570, 2.19338136461532]], [[4.13614256031450, -1.91289828483056, 5.50873853927692], [-2.63939111203107, 1.49675144828342, -3.59584025444636], [-3.59584025444636, 1.91289828483056, -4.96843623340878]]
Bacaan lebih lanjut
Pertanyaan yang luar biasa ini di Math.SE mencakup beberapa derivasi alternatif dari analog yang bernilai matriks dari fungsi trigonometri.
sin([[1, 0, 1], [0, 0, 0], [0, 1, 0]]) = {{0.841, -0.158, 0.841}, {0, 0, 0}, {0, 1, 0}}
dengan Mathematica, dapatkah Anda memeriksanya?(ignoring the fact that it would require infinite time and/or memory)
Jawaban:
Julia,
3319 byteIni adalah fungsi yang menerima array 2 dimensi mengapung dan mengembalikan tuple array seperti yang saling berhubungan ke cosinus dan sinus. Perhatikan bahwa ini adalah kebalikan dari urutan yang diberikan dalam kasus uji, di mana sinus terdaftar terlebih dahulu.
Untuk matriks A bernilai nyata , kami punya
dan
Yaitu, sinus dan kosinus A berhubungan dengan bagian imajiner dan nyata dari matriks eksponensial e iA . Lihat Fungsi Matriks (Higham, 2008).
Cobalah online! (termasuk semua kasus uji)
Disimpan 14 byte berkat Dennis!
sumber
Mathematica, 27 byte
Berdasarkan pada solusi @ Rainer P.
Mengambil matriks kuadrat
A
sebagai argumen dan menampilkan daftar yang berisi{sin(A), cos(A)}
.Input diformat dengan
N
untuk mendapatkan nilai numerik alih-alih rumus panjang yang tepat danColumn
untuk menampilkan hasilsin(A)
dancos(A)
sebagai matriks terpisah, bukan daftar bersarang.Menghitung nilai secara terpisah membutuhkan 38 byte
sumber
Jelly ,
2322 byteCobalah online!
Latar Belakang
Pendekatan ini secara langsung menghitung deret Taylor untuk sinus dan cosinus , yaitu,
Ini meningkatkan jumlah syarat awal dari kedua seri hingga hasilnya tidak lagi berubah, jadi akurasinya hanya dibatasi oleh ketepatan jenis floating point.
Bagaimana itu bekerja
sumber
Matlab,
138 121 5250 byteKarena exponentiation matriks diperbolehkan, (apa yang saya tidak perhatikan terlebih dahulu, d'oh) saya tidak perlu mendefinisikan fungsi pembantu saya lagi, dan semuanya bisa diselesaikan dengan sepele:
Input harus berupa matriks misalnya
[1,2;4,5]
atau sebagai alternatif[[1,2];[3,4]]
Suatu hal yang tidak terduga (di belakang tidak begitu tak terduga) adalah bahwa matriks cosinus dan sinus masih memuaskan
sumber
A^0
sama denganeye(size(A))
?expm
?Matlab, 37 byte
sumber
C ++, 305 byte
Input adalah daftar angka yang merupakan kuadrat sempurna pada stdin. Output adalah array 2d yang cukup dicetak pada stdout
sumber
Julia 0,4, 28 byte
Input adalah matriks float, output adalah berbagai matriks. Cobalah online!
sumber
Sage, 44 byte
Cobalah online .
Fungsi anonim ini mengembalikan daftar 2 matriks yang sesuai dengan
sin(A)
dancos(A)
, masing-masing.exp(I*A)
menghitung eksponensial matriks untukI*A
(A
dengan semua elemen dikalikan dengan unit imajiner), danmatrix.apply_map(f)
mengembalikan matriks yangf
telah diterapkan ke semua elemennya. Dengan menerapkanimag
danreal
(fungsi untuk mendapatkan bagian imajiner dan nyata dari nilai skalar) ke matriks, kita mendapatkan nilai-nilaisin(A)
dancos(A)
, berkat identitas Euler yang terkenal (dirujuk dalam teks tantangan).sumber