Gambar di bawah ini menunjukkan sirkuit RLC. Sirkuit RLC adalah sirkuit listrik yang terdiri dari resistor (R), induktor (L), dan kapasitor (C), dihubungkan secara seri atau paralel. (1)
Untuk menyederhanakan perhitungan, biasanya bekerja di domain frekuensi (Laplace) alih-alih domain waktu.
Tugas Anda adalah:
Ambil nilai R
, L
dan C
sebagai input, dan kembalikan voltase VR
, VL
danVC
Konversi ke domain Laplace adalah sebagai berikut:
R = R
XL = j*w*L // OK, XL = w*L, and ZL = j*XL, but don't mind this here.
XC = 1/(j*w*C) // I haven't ruined physics, it's only a minor terminology tweak
dimana j = sqrt(-1)
, dan w = 2*pi*50
(Frekuensi adalah 50 Hz).
Impedansi gabungan, ketika komponen dalam seri adalah Z = R + XL + XC
. Anda mungkin ingat U = R*I
dari kuliah fisika SMA. Ini hampir sama, tapi sedikit lebih kompleks sekarang: VS = Z*I
. Arus dihitung dengan membagi tegangan VS
dengan impedansi total Z
. Untuk menemukan tegangan pada satu komponen, Anda perlu mengetahui arus, kemudian mengalikannya dengan impedansi. Untuk kesederhanaan, tegangan diasumsikan VS = 1+0*j
.
Persamaan yang mungkin Anda butuhkan adalah:
XL = j*w*L
XC = 1/(j*w*C)
Z = R + XL + XC // The combined impedance of the circuit
I = VS / Z // The current I (Voltage divided by impedance)
VR = I * R // Voltage over resistance (Current times resistance)
VL = I * XL // Voltage over inductor (Current times impedance)
VC = I * XC // Voltage over capacitor (Current times impedance)
Masukan dari STDIN atau sebagai argumen fungsi. Output / hasil harus tiga angka kompleks, dalam daftar, string atau apa pun yang paling praktis dalam bahasa Anda. Tidak perlu menyertakan nama (ex VR = ...
), asalkan hasilnya dalam urutan yang sama seperti di bawah ini. Ketelitian harus minimal 3 angka desimal untuk bagian nyata dan imajiner. Input dan output / hasil dapat dalam notasi ilmiah jika itu default dalam bahasa Anda.
R
dan L
yang >= 0
, dan C > 0
. R, L, C <= inf
(atau angka setinggi mungkin dalam bahasa Anda).
Kasus uji sederhana:
R = 1, L = 1, C = 0.00001
VR = 0.0549 + 0.2277i
VL = -71.5372 +17.2353i
VC = 72.4824 -17.4630i
Untuk hasil di atas, ini bisa menjadi satu (dari banyak) format ouput yang valid:
(0.0549 + 0.2277i, -71.5372 +17.2353i, 72.4824 -17.4630i)
Beberapa format ouput yang valid untuk satu nilai tegangan adalah:
1.234+i1.234, 1.23456+1.23456i, 1.2345+i*1.2345, 1.234e001+j*1.234e001.
Daftar ini tidak eksklusif, sehingga varian lain dapat digunakan, selama bagian imajiner ditunjukkan oleh a i
atau j
(umum dalam teknik elektro seperti i
yang digunakan untuk saat ini).
Untuk memverifikasi hasil untuk nilai-nilai lain dari R, L dan C, berikut ini harus benar untuk semua hasil: VR + VL + VC = 1
.
Kode terpendek dalam byte menang!
Ngomong-ngomong: Ya, itu tegangan atas komponen, dan arus melalui komponen. Tegangan tidak pernah melewati apa pun. =)
sumber
Jawaban:
Pyth,
302928 byteCobalah online.
sumber
Mathematica, 33 byte
Begitu dekat dengan Pyth ...
Ini adalah fungsi yang tidak disebutkan namanya, yang mengambil
R
,L
danC
tiga argumen dan mengembalikan daftar bilangan kompleks sebagai hasilnya (dalam urutan yang diperlukanVR
,VL
,VC
). Contoh penggunaan:sumber
Oktaf / Matlab,
5351 byteCobalah online
Terima kasih kepada @StewieGriffin karena menghapus dua byte.
sumber
100j
?! Bertahun-tahun menggunakan Matlab dan saya tidak tahu itu bisa dilakukan! :-) (Saya memang tahu1j
, tapi saya pikir itu hanya itu). Terima kasih!k=-.01j/pi;Z=[R,L/k,k/C];Z/sum(Z)
atauk=-.01j/pi;[R L/k k/C]/(R+L/k+k/C)
. =)APL (Dyalog Unicode) ,
2724 byte SBCSProgram lengkap. Anjuran untuk
C
,L
,R
dalam urutan itu.Cobalah online!
0J100
100 i○
π kali itu÷
kebalikan dari itu(
...)
terapkan fungsi diam-diam berikut:÷∘⎕
bagilah argumen dengan input (C
)⎕∘÷,
input prepend (L
) dibagi dengan argumen⎕,
masukan awal (R
)(
...)
terapkan fungsi diam-diam berikut:+/
jumlah argumen⊢÷
pisahkan argumen dengan itusumber
¯
adalah awalan angka negatif APL, untuk membedakan dari fungsi (yaitu operator matematika) meniadakan-
. Bagaimanapun, itu tidak adil untuk tidak menghitung karakter APL sebagai byte tunggal, itu hanya masalah pengkodean, dan ada banyak sistem APL yang menggunakan byte tunggal untuk menyimpan kode APL. Misalnya Dyalog memiliki versi penerjemah mereka dari Unicode dan Classic (single-byte)...,49J¯17.4..
akan berarti bagian pertama adalah imajiner dan yang kedua nyata dalam bahasa lain (atau dalam notasi matematika secara umum), sehingga mungkin melanggar aturan "selama bagian imajiner ditunjukkan oleh i atau aj". Punya +1 untuk mengajari saya tentang "minus tinggi", dan jawaban yang bagus, tetapi saya tidak yakin saya bisa memilihnya sebagai jawaban yang diterima, ketika hari itu tiba.Oktaf, 41 byte
1/(100*j*pi)
dapat dipersingkat-.01j/pi
yang jauh lebih pendek. Dengan menugaskannya ke variabelk
inline, variabel dapat digunakan dua kali. Menetapkan seluruh vektor keZ
biaya variabel 4 byte, tetapi memungkinkan kita untuk membaginyasum(Z)
, yaitu 5 byte lebih pendek dari(R+L/k+k/C)
.sumber