Was ist die Spannung über jeder Komponente?


18

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)

Bildbeschreibung hier eingeben

Um die Berechnungen zu vereinfachen, wird häufig im Frequenzbereich (Laplace) anstatt im Zeitbereich gearbeitet.

Ihre Aufgabe ist:

Nehmen Sie die Werte R, Lund Cals Eingabe und geben die Spannungen VR, VLundVC

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*IVorlesungen 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 VSdurch 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.

Rund Lsind >= 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 ioder ein j(in der Elektrotechnik gebräuchlich, wie ies 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. =)


2
Eigentlich sind Reaktanzen reelle Zahlen, also XL = omega * L. Die Impedanz der Induktivität beträgt Z = jXL. (Dies hat keinen Einfluss auf das Problem, es ist nur eine Korrektur)
Voitcus

@Voitcus, stimmt ... Ich habe es ein wenig vereinfacht, um die Frage nicht zu verwirrend zu machen. Ich habe das j in die XL / XC-Begriffe aufgenommen, wenn ich in den Frequenzbereich ging. Ich habe nie gesagt, dass die Reaktanz komplex ist (obwohl ich sie X und nicht jX nannte) =) Aber ich stimme dir zu! Ich habe es eigentlich auch Impedanz genannt.
Stewie Griffin

Kann ich eine Liste mit 3 Zahlen als Funktionseingabe verwenden oder müssen es 3 separate Argumente sein?
Martin Ender

@ MartinBüttner, Liste ist OK.
Stewie Griffin

Antworten:



9

Mathematica, 33 Bytes

So nah an Pyth ...

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

Dies ist eine unbenannte Funktion, die nimmt R, Lund Cals seine drei Argumente und gibt eine Liste von komplexen Zahlen als das Ergebnis (in der erforderlichen Reihenfolge VR, VL, VC). Anwendungsbeispiel:

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

Oktave / Matlab, 53 51 Bytes

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

Probieren Sie es online aus

Vielen Dank an @StewieGriffin für das Entfernen von zwei Bytes.


@StewieGriffin 100j?! So viele Jahre mit Matlab und ich wusste nicht, dass das möglich ist! :-) (Ich wusste 1j, aber ich dachte, dass es nur das war). Vielen Dank!
Luis Mendo

... aaaand: Anscheinend weiß ich mehr über dich als du! Weil du wusstest, dass es möglich ist ! =)
Stewie Griffin

@ StewieGriffin Ooooh. Es ist mir wieder passiert. Schlechtes Gedächtnis !!: - D (Ich benutze diese Notation nie wirklich)
Luis Mendo

Sie können ein weiteres Byte speichern, wenn Sie mit der Umkehrung von k beginnen, wie folgt:, k=-.01j/pi;Z=[R,L/k,k/C];Z/sum(Z)oder k=-.01j/pi;[R L/k k/C]/(R+L/k+k/C). =)
Stewie Griffin

@StewieGriffin Gute Idee! Bearbeitet
Luis Mendo

3

APL (Dyalog Unicode) , 27 24 Bytes SBCS

Volles Programm. Prompts für C, L, Rin dieser Reihenfolge.

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

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 dadurch


@StewieGriffin Ich bin mir sicher, was du meinst. Das "hohe Minus" ¯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.
Adám

1
Ich stimme zu, wenn Sie eine Codierung verwendet haben, bei der jedes Zeichen ein einzelnes Byte ist, sollte die Anzahl der Zeichen der Anzahl der Bytes entsprechen. Können Sie überprüfen, ob dies der Fall ist (ich kenne mich mit einem anderen Codierungssystem nicht allzu gut aus)? Auch das hohe Minuszeichen kannte ich nicht. Mein schlechtes ...
Stewie Griffin

Ich habe den Code gerade in ein Feld "count number of bytes" eingefügt und erhalte den Wert 31 zurück. Wenn er nicht korrekt ist, erhalten Sie natürlich einen Wert von 28 :-) Allerdings ..,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.
Stewie Griffin

1
@ StewieGriffin Ninja'd;)
Beta Decay


2

Oktave, 41 Bytes

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

1/(100*j*pi)kann verkürzt werden, -.01j/piwas viel kürzer ist. Indem Sie es der Variablen kinline zuweisen , kann die Variable zweimal verwendet werden. Das Zuweisen des gesamten Vektors zu der Variablen Zkostet 4 Byte, ermöglicht jedoch das Teilen durch sum(Z), was 5 Byte kürzer ist als (R+L/k+k/C).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.