Poniższy obrazek pokazuje obwód RLC. Obwód RLC to obwód elektryczny składający się z rezystora (R), induktora (L) i kondensatora (C), połączonych szeregowo lub równolegle. (1)
Aby uprościć obliczenia, często pracuje się w domenie częstotliwości (Laplace'a) zamiast w domenie czasu.
Twoim zadaniem jest:
Przyjmować wartości R
, L
a C
jako wejście i powrót napięcia VR
, VL
aVC
Konwersja do domeny Laplace wygląda następująco:
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
gdzie j = sqrt(-1)
i w = 2*pi*50
(Częstotliwość wynosi 50 Hz).
Łączna impedancja, gdy elementy są szeregowo, wynosi Z = R + XL + XC
. Być może pamiętasz U = R*I
z wykładów z fizyki w szkole średniej. To prawie to samo, ale nieco bardziej skomplikowany teraz: VS = Z*I
. Prąd jest obliczany poprzez podzielenie napięcia VS
przez całkowitą impedancję Z
. Aby znaleźć napięcie na jednym elemencie, musisz znać prąd, a następnie pomnożyć go przez impedancję. Dla uproszczenia przyjmuje się, że napięcie wynosi VS = 1+0*j
.
Równania, których możesz potrzebować, to:
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)
Dane wejściowe pochodzą z STDIN lub jako argumenty funkcji. Wynik / wynik muszą składać się z trzech liczb zespolonych, z listy, łańcucha lub dowolnego innego najbardziej praktycznego w twoim języku. Nie jest konieczne dołączanie nazw (np. VR = ...
), O ile wyniki są w takiej samej kolejności jak poniżej. Precyzja musi wynosić co najmniej 3 miejsca po przecinku zarówno dla części rzeczywistej, jak i urojonej. Dane wejściowe i wyjściowe / wyniki mogą być zapisane w notacji naukowej, jeśli jest to domyślne w Twoim języku.
R
i L
są >= 0
, i C > 0
. R, L, C <= inf
(lub najwyższy możliwy numer w Twoim języku).
Prosty przypadek testowy:
R = 1, L = 1, C = 0.00001
VR = 0.0549 + 0.2277i
VL = -71.5372 +17.2353i
VC = 72.4824 -17.4630i
Dla powyższych wyników może to być jeden (z wielu) prawidłowych formatów wyjściowych:
(0.0549 + 0.2277i, -71.5372 +17.2353i, 72.4824 -17.4630i)
Niektóre prawidłowe formaty wyjściowe dla jednej wartości napięcia to:
1.234+i1.234, 1.23456+1.23456i, 1.2345+i*1.2345, 1.234e001+j*1.234e001.
Ta lista nie jest wyłączna, więc można stosować inne warianty, o ile część wyobrażona jest oznaczona przez i
a j
( a) (powszechne w elektrotechnice i
stosowanej dla prądu).
Aby sprawdzić, czy wynik dla innych wartości R, L i C, dodaje się, muszą być spełnione dla wszystkich wyników: VR + VL + VC = 1
.
Najkrótszy kod w bajtach wygrywa!
Nawiasem mówiąc: Tak, to napięcie nad komponentem i prąd przez komponent. Napięcie nigdy przez nic nie przeszło. =)
źródło
Odpowiedzi:
Pyth,
302928 bajtówWypróbuj online.
źródło
Mathematica, 33 bajty
Tak blisko Pyth ...
Jest anonimowa funkcja, która odbywa
R
,L
iC
w trzech argumentów i zwraca listę liczb zespolonych w wyniku (w odpowiedniej kolejnościVR
,VL
,VC
). Przykładowe użycie:źródło
Octave / Matlab,
5351 bajtówWypróbuj online
Dzięki @StewieGriffin za usunięcie dwóch bajtów.
źródło
100j
?! Tyle lat korzystania z Matlaba i nie wiedziałem, że da się to zrobić! :-) (wiedziałem1j
, ale myślałem, że to po prostu). Dzięki!k=-.01j/pi;Z=[R,L/k,k/C];Z/sum(Z)
lubk=-.01j/pi;[R L/k k/C]/(R+L/k+k/C)
. =)APL (Dyalog Unicode) ,
2724 bajtów SBCSPełny program Pyta o
C
,L
,R
w tej kolejności.Wypróbuj online!
0J100
100 i○
π razy to÷
odwrotność tego(
…)
Zastosuj następującą funkcję ukrytą:÷∘⎕
podziel argument przez input (C
)⎕∘÷,
poprzedzone wejście (L
) podzielone przez argument⎕,
prepend input (R
)(
…)
Zastosuj następującą funkcję ukrytą:+/
zsumuj argumenty⊢÷
podziel przez to argumentyźródło
¯
to przedrostek liczby ujemnej APL, aby odróżnić od funkcji (tj. operatora matematycznego) negację-
. W każdym razie nie byłoby fair nie liczyć znaków APL jako pojedynczych bajtów, to tylko kwestia kodowania, a wiele systemów APL używa pojedynczych bajtów do przechowywania kodu APL. Np. Dyalog ma wersje interpretera zarówno Unicode, jak i Classic (jednobajtowe)...,49J¯17.4..
oznaczałoby to, że pierwsza część jest wymyślona, a druga jest prawdziwy w każdym innym języku (lub ogólnie w notacji matematycznej), więc może naruszać zasadę „o ile część wyobrażona jest oznaczona przez i lub aj”. Zdobądź +1 za nauczenie mnie o „wysokim minusie” i miłą odpowiedź, ale nie jestem pewien, czy mogę wybrać ją jako przyjętą odpowiedź, gdy nadejdzie ten dzień.Oktawa, 41 bajtów
1/(100*j*pi)
można skrócić, do-.01j/pi
czego jest znacznie krótszy. Przypisując ją do zmiennejk
inline, zmiennej można użyć dwukrotnie. Przypisanie całego wektora do zmiennejZ
kosztuje 4 bajty, ale pozwala nam dzielićsum(Z)
, czyli o 5 bajtów mniej niż(R+L/k+k/C)
.źródło