Das Bild unten zeigt eine RLC-Schaltung. Eine RLC-Schaltung ist eine elektrische Schaltung, die aus einem Widerstand (R), einer Induktivität (L) und einem Kondensator (C) besteht, die in Reihe oder parallel geschaltet sind. (1)
Um die Berechnungen zu vereinfachen, wird häufig im Frequenzbereich (Laplace) anstatt im Zeitbereich gearbeitet.
Ihre Aufgabe ist:
Nehmen Sie die Werte R
, L
und C
als Eingabe und geben die Spannungen VR
, VL
undVC
Die Konvertierung in die Laplace-Domäne sieht wie folgt aus:
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
wo j = sqrt(-1)
, und w = 2*pi*50
(Die Frequenz beträgt 50 Hz).
Die kombinierte Impedanz ist, wenn die Komponenten in Reihe geschaltet sind Z = R + XL + XC
. Sie erinnern sich vielleicht an U = R*I
Vorlesungen in Physik an der High School. Es ist fast die gleiche, aber ein bisschen komplexe jetzt: VS = Z*I
. Der Strom wird berechnet, indem die Spannung VS
durch die Gesamtimpedanz dividiert wird Z
. Um die Spannung an einer einzelnen Komponente zu ermitteln, müssen Sie den Strom kennen und dann mit der Impedanz multiplizieren. Der Einfachheit halber wird die Spannung als angenommen VS = 1+0*j
.
Möglicherweise benötigte Gleichungen sind:
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)
Die Eingabe erfolgt entweder über STDIN oder als Funktionsargumente. Die Ausgabe / das Ergebnis muss aus drei komplexen Zahlen bestehen, in einer Liste, einer Zeichenfolge oder was auch immer in Ihrer Sprache am praktischsten ist. Es ist nicht erforderlich, Namen (ex VR = ...
) einzuschließen , solange die Ergebnisse in der unten angegebenen Reihenfolge vorliegen. Die Genauigkeit muss für den Real- und den Imaginärteil mindestens 3 Dezimalstellen betragen. Die Eingabe und Ausgabe / Ergebnisse können in wissenschaftlicher Notation erfolgen, wenn dies in Ihrer Sprache voreingestellt ist.
R
und L
sind >= 0
, und C > 0
. R, L, C <= inf
(oder die höchstmögliche Zahl in Ihrer Sprache).
Ein einfacher Testfall:
R = 1, L = 1, C = 0.00001
VR = 0.0549 + 0.2277i
VL = -71.5372 +17.2353i
VC = 72.4824 -17.4630i
Für die obigen Ergebnisse kann dies eines von vielen gültigen Ausgabeformaten sein:
(0.0549 + 0.2277i, -71.5372 +17.2353i, 72.4824 -17.4630i)
Einige gültige Ausgabeformate für einen Spannungswert sind:
1.234+i1.234, 1.23456+1.23456i, 1.2345+i*1.2345, 1.234e001+j*1.234e001.
Diese Liste ist nicht exklusiv, so dass auch andere Varianten verwendet werden können, sofern der Imaginärteil durch ein i
oder ein j
(in der Elektrotechnik gebräuchlich, wie i
es für Strom verwendet wird) gekennzeichnet ist.
Um zu überprüfen , das Ergebnis für andere Werte von R, L und C muss die folgenden Bedingungen erfüllt sein für alle Ergebnisse: VR + VL + VC = 1
.
Der kürzeste Code in Bytes gewinnt!
Übrigens: Ja, es ist Spannung über einer Komponente und Strom durch eine Komponente. Eine Spannung hat noch nie etwas durchgemacht. =)
quelle
Antworten:
Pyth,
302928 BytesProbieren Sie es online aus.
quelle
Mathematica, 33 Bytes
So nah an Pyth ...
Dies ist eine unbenannte Funktion, die nimmt
R
,L
undC
als seine drei Argumente und gibt eine Liste von komplexen Zahlen als das Ergebnis (in der erforderlichen ReihenfolgeVR
,VL
,VC
). Anwendungsbeispiel:quelle
Oktave / Matlab,
5351 BytesProbieren Sie es online aus
Vielen Dank an @StewieGriffin für das Entfernen von zwei Bytes.
quelle
100j
?! So viele Jahre mit Matlab und ich wusste nicht, dass das möglich ist! :-) (Ich wusste1j
, aber ich dachte, dass es nur das war). Vielen Dank!k=-.01j/pi;Z=[R,L/k,k/C];Z/sum(Z)
oderk=-.01j/pi;[R L/k k/C]/(R+L/k+k/C)
. =)APL (Dyalog Unicode) ,
2724 Bytes SBCSVolles Programm. Prompts für
C
,L
,R
in dieser Reihenfolge.Probieren Sie es online!
0J100
100 i○
π mal so÷
Kehrwert davon(
…)
Wenden folgende stillschweigende Funktion an:÷∘⎕
dividiere das Argument durch input (C
)⎕∘÷,
voranstellen input (L
) durch das Argument geteilt⎕,
Eingabe voranstellen (R
)(
…)
Wenden folgende stillschweigende Funktion an:+/
fasse die Argumente zusammen⊢÷
Teilen Sie die Argumente dadurchquelle
¯
ist das negative Zahlenpräfix der APL, um von der Funktion (dh dem mathematischen Operator) negieren zu können-
. Wie auch immer, es wäre nicht fair, APL-Zeichen nicht als einzelne Bytes zu zählen, es ist nur eine Frage der Codierung, und es gibt viele APL-Systeme, die einzelne Bytes zum Speichern von APL-Code verwenden. Zum Beispiel hat Dyalog sowohl Unicode- als auch Classic-Versionen (Single-Byte) ihres Interpreters...,49J¯17.4..
würde dies bedeuten, dass der erste Teil imaginär ist und der zweite Teil Ist real in einer anderen Sprache (oder in mathematischer Notation im Allgemeinen), so könnte dies die Regel verletzen, "solange der Imaginärteil durch ein i oder aj angezeigt wird". Haben Sie eine +1, um mir "High Minus" beizubringen, und eine nette Antwort, aber ich bin nicht sicher, ob ich sie als akzeptierte Antwort auswählen kann, wenn dieser Tag kommt.Oktave, 41 Bytes
1/(100*j*pi)
kann verkürzt werden,-.01j/pi
was viel kürzer ist. Indem Sie es der Variablenk
inline zuweisen , kann die Variable zweimal verwendet werden. Das Zuweisen des gesamten Vektors zu der VariablenZ
kostet 4 Byte, ermöglicht jedoch das Teilen durchsum(Z)
, was 5 Byte kürzer ist als(R+L/k+k/C)
.quelle