Her bileşen üzerindeki voltaj nedir?


18

Aşağıdaki resim bir RLC devresini göstermektedir. RLC devresi, seri veya paralel bağlanmış bir direnç (R), bir indüktör (L) ve bir kapasitörden (C) oluşan bir elektrik devresidir. (1)

resim açıklamasını buraya girin

Hesaplamaları basitleştirmek için, zaman alanı yerine frekans (Laplace) alanında çalışmak yaygındır.

Göreviniz:

Değerlerini al R, Lve Cgirdi olarak ve gerilimleri dönmek VR, VLveVC

Laplace alanına dönüşüm şu şekildedir:

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

nerede j = sqrt(-1)ve w = 2*pi*50(Frekans 50 Hz'dir).

Bileşenler seri olduğunda kombine empedans Z = R + XL + XC. U = R*ILise fizik derslerinden hatırlayabilirsiniz . Neredeyse aynı, ama daha biraz karmaşık şimdi: VS = Z*I. Akım, voltajın VStoplam empedansa bölünmesiyle hesaplanır Z. Tek bir bileşen üzerindeki voltajı bulmak için akımı bilmeniz, ardından empedansla çarpmanız gerekir. Basitlik için voltajın olduğu varsayılır VS = 1+0*j.

İhtiyacınız olabilecek denklemler:

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)

Giriş, STDIN'den veya işlev bağımsız değişkenleri olarak alınır. Çıktı / sonuç, bir listede, dizede veya dilinizde en pratik olan her şeyde üç karmaşık sayı olmalıdır. VR = ...Sonuçlar aşağıdakiyle aynı sırada olduğu sürece adları (ex ) eklemek gerekli değildir . Kesinlik, hem gerçek hem de hayali kısım için en az 3 ondalık nokta olmalıdır. Eğer dilinizde varsayılan ise giriş ve çıkış / sonuçlar bilimsel gösterimde olabilir.

Rve Lvardır >= 0, ve C > 0. R, L, C <= inf(veya dilinizde mümkün olan en yüksek sayı).

Basit bir test örneği:

R = 1, L = 1, C = 0.00001

VR = 0.0549 + 0.2277i
VL = -71.5372 +17.2353i
VC = 72.4824 -17.4630i

Yukarıdaki sonuçlar için bu geçerli bir çıkış biçiminden biri olabilir:

(0.0549 + 0.2277i, -71.5372 +17.2353i, 72.4824 -17.4630i)

Bir voltaj değeri için bazı geçerli çıkış formatları şunlardır:

1.234+i1.234,   1.23456+1.23456i,   1.2345+i*1.2345,   1.234e001+j*1.234e001.

Bu liste münhasır değildir, bu nedenle hayali kısım bir iveya a j(elektrik mühendisliğinde iakım için kullanıldığı gibi yaygın olarak) belirtildiği sürece diğer varyantlar kullanılabilir .

R, L, C ve diğer değerleri için sonuçları doğrulamak için, aşağıdaki tüm sonuçlar için geçerli olması gerekir: VR + VL + VC = 1.

Bayttaki en kısa kod kazanır!

Bu arada: Evet, bir bileşen üzerindeki voltaj ve bir bileşen boyunca akım var . Bir voltaj hiçbir şeyden geçmedi. =)


2
Aslında, tepkimeler gerçek sayılardır, bu yüzden XL = omega * L'dir. İndüktörün empedansı Z = jXL'dir. (Bu sorunu etkilemez, bu sadece bir düzeltmedir)
Voitcus

@Voitcus, doğru ... Soruyu kafa karıştırıcı hale getirmemek için biraz basitleştirdim. Frekans alanına giderken j'yi XL / XC terimlerine dahil ettim. Yine de reaktansın karmaşık olduğunu söylemedim (bunu X olarak adlandırdım, ancak jX değil) =) Ama sana katılıyorum! Aslında buna empedans da deniyordu.
Stewie Griffin

İşlev girişi olarak 3 sayının bir listesini alabilir miyim, yoksa 3 ayrı bağımsız değişken olması gerekir mi?
Martin Ender

@ MartinBüttner, liste tamam.
Stewie Griffin

Yanıtlar:



9

Mathematica, 33 bayt

Pyth'e çok yakın ...

l/Tr[l={#,#2(x=100Pi*I),1/x/#3}]&

Bu alan bir isimsiz bir fonksiyondur R, Lve C(gerekli amacıyla sonucu olarak kompleks numaralarının bir listesini, üç bağımsız değişken olarak ve döner VR, VL, VC). Örnek kullanım:

l/Tr[l={#,#2(x=100Pi*I),1/x/#3}]&[1, 1, 0.00001]
(* {0.0548617 + 0.22771 I, -71.5372 + 17.2353 I, 72.4824 - 17.463 I} *)

3

Oktav / Matlab, 53 51 bayt

function f(R,L,C)
k=-.01j/pi;Z=[R L/k k/C];Z/sum(Z)

Çevrimiçi deneyin

@StewieGriffin'e iki bayt ayırdığı için teşekkürler.


@StewieGriffin 100j?! Matlab'ı kullanarak yıllarca ve bunun yapılabileceğini bilmiyordum! :-) (Biliyordum 1j, ama sadece bu olduğunu düşündüm). Teşekkürler!
Luis Mendo

... aaaand: Görünüşe göre senin hakkında senden daha çok şey biliyorum! Çünkü bunun mümkün olduğunu biliyordunuz / biliyordunuz ! =)
Stewie Griffin

@StewieGriffin Ooooh. Bana yine oldu. Kötü hafıza !!: - D (Asla bu notasyonu kullanmam)
Luis Mendo

K'nin tersi ile başlarsanız, başka bir bayt kaydedebilirsiniz, örneğin: k=-.01j/pi;Z=[R,L/k,k/C];Z/sum(Z)veya k=-.01j/pi;[R L/k k/C]/(R+L/k+k/C). =)
Stewie Griffin

@StewieGriffin İyi fikir! Düzenlendi
Luis Mendo

3

APL (Dyalog Unicode) , 27 24 bayt SBCS

Tam program. İçin istemleri C, L, Rbu sırayla.

(⊢÷+/)(⎕,⎕∘÷,÷∘⎕)÷○0J100

Çevrimiçi deneyin!

0J100 100  i

 π kez

÷ bunun karşılığı

() Aşağıdaki tacit fonksiyonunu uygulayın:

÷∘⎕ bağımsız değişkeni input ( C) ile böl

⎕∘÷, prepend input ( L) argümana bölünür

⎕, giriş ekle (R )

(...) Aşağıdaki tacit fonksiyonunu uygulayın:

+/ argümanları topla

⊢÷ argümanları buna böl


@StewieGriffin Ne demek istediğinizden eminim. "yüksek eksi" ¯işlevi (yani matematik operatörü) olumsuzlamadan ayırt etmek için APL'nin negatif sayı önekidir -. Her neyse, APL karakterlerini tek bayt olarak saymamak adil olmaz, sadece bir kodlama meselesidir ve APL kodunu saklamak için tek bayt kullanan birçok APL sistemi vardır. Örneğin Dyalog, tercümanlarının hem Unicode hem de Klasik (tek bayt) sürümlerine sahiptir.
Adám

1
Katılıyorum, eğer her karakterin tek bir bayt olduğu kodlamayı kullandıysanız, karakter sayısı bayt sayısına eşit olmalıdır. Durumun böyle olduğunu doğrulayabilir misiniz (apl farklı bir kodlama sistemine çok aşina değilim) Ayrıca, yüksek eksi işareti aşina değildi. Benim kötü ...
Stewie Griffin

Kodu "bayt sayısı" kutusuna yapıştırdım ve 31 döndüm. Eğer doğru değilse, o zaman elbette 28 puan ..,49J¯17.4..olacak :-) Her ne kadar, ilk bölüm hayali ve ikinci anlamına gelir başka bir dilde (veya genel olarak matematiksel gösterimde) gerçek olduğundan, "hayali kısım bir i veya aj ile belirtildiği sürece" kuralını ihlal edebilir. Bana "yüksek eksi" yi öğretmek için bir +1 ve iyi bir cevap var, ama o gün geldiğinde kabul edilen cevap olarak seçebileceğimden emin değilim.
Stewie Griffin

1
@StewieGriffin Ninja'd;)
Beta


2

Oktav, 41 bayt

@(R,L,C)(Z=[R L/(k=-.01j/pi) k/C])/sum(Z)

1/(100*j*pi)kısaltılabilir -.01j/piki bu da çok daha kısadır. Değişkeni ksatır içine atayarak , değişken iki kez kullanılabilir. Tüm vektörü değişkene atamak Z4 bayta mal olur, ancak bölmemize izin verir sum(Z), bu da 5 bayttan daha kısadır (R+L/k+k/C).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.