各コンポーネントの電圧はいくらですか?


18

次の図は、RLC回路を示しています。RLC回路は、抵抗(R)、インダクタ(L)、コンデンサ(C)で構成される電気回路で、直列または並列に接続されています。(1)

ここに画像の説明を入力してください

計算を簡素化するために、時間領域ではなく周波数(ラプラス)領域で作業するのが一般的です。

あなたの仕事は:

値を取りRLそしてC入力として、および電圧を返すVRVLVC

ラプラスドメインへの変換は次のとおりです。

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

ここでj = sqrt(-1)、およびw = 2*pi*50(周波数は50 Hzです)。

コンポーネントが直列になっている場合の結合インピーダンスはZ = R + XL + XCです。U = R*I高校の物理学の講義から覚えているかもしれません。ほとんど同じですが、もう少し複雑になりましたVS = Z*I。電流は、電圧VSを総インピーダンスで除算して計算されますZ。単一のコンポーネントの電圧を見つけるには、電流を把握してからインピーダンスを掛ける必要があります。簡単にするために、電圧はと仮定しますVS = 1+0*j

必要な方程式は次のとおりです。

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)

入力は、STDINから、または関数の引数としてです。出力/結果は、リスト、文字列、または言語で最も実用的な3つの複素数でなければなりません。VR = ...結果が以下と同じ順序である限り、名前(ex )を含める必要はありません。精度は、実数部と虚数部の両方で少なくとも3つの小数点である必要があります。入力および出力/結果は、それがあなたの言語でデフォルトである場合、科学的記法で表されます。

RL>= 0、とC > 0です。R, L, C <= inf(またはあなたの言語で可能な最大数)。

簡単なテストケース:

R = 1, L = 1, C = 0.00001

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

上記の結果の場合、これは1つ(多くの)有効な出力形式になります。

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

1つの電圧値の有効な出力形式は次のとおりです。

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

このリストは排他的ではないため、虚数部がiまたはで示されている限り、他のバリアントを使用できますji電流に使用される電気工学で一般的)。

R、L、およびCの他の値の結果を検証するには、すべての結果について以下が真でなければなりませんVR + VL + VC = 1

バイト単位の最短コードが勝ちです!

はい、それの電圧:ところで以上のコンポーネント、および現在を通じてコンポーネント。電圧がまったくかかったことはありません。=)


2
実際には、リアクタンスは実数なので、XL = omega * Lです。インダクタのインピーダンスはZ = jXLです。(これは問題に影響を与えず、修正にすぎません)
Voitcus

@Voitcus、本当...質問をあまりにも混乱させないために、私はそれを少し単純化した。周波数ドメインに移動するとき、jをXL / XC用語に含めました。しかし、リアクタンスが複雑だとは言いませんでした(jXではなくXと呼びますが)=)しかし、私はあなたに同意します!私も実際にインピーダンスと呼びました。
スティーヴィーグリフィン

関数入力として3つの数値のリストを使用できますか、それとも3つの別個の引数である必要がありますか?
マーティンエンダー

@MartinBüttner、リストはOKです。
スティーヴィーグリフィン

回答:



9

Mathematica、33バイト

Pythにとても近い...

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

これは、かかる無名関数でありRLかつC(必須ために結果として複素数のリストを、その三の引数として戻りVRVLVC)。使用例:

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

オクターブ/ Matlab、53 51バイト

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

オンラインで試す

2バイトを削除してくれた@StewieGriffinに感謝します。


@StewieGriffin 100j?!Matlabを長年使用していたので、それができるとは知りませんでした!:-)(私は知っていましたが1j、それだけだと思いました)。ありがとう!
ルイスメンドー

... aaaand:どうやらあなたよりもあなたのことを知っているようです!なぜなら、あなたはそれが可能であることを知っている/知っていたからです!=)
Stewie Griffin

@StewieGriffin Ooooh。それは再び私に起こりました。悪いメモリ!!:-D(私は実際にその表記法を使用したことはありません)
ルイスメンドー

あなたは、kの逆数で始まる場合は、このように、別のバイトを保存することができます:k=-.01j/pi;Z=[R,L/k,k/C];Z/sum(Z)、またはk=-.01j/pi;[R L/k k/C]/(R+L/k+k/C)。=)
Stewie Griffin

@StewieGriffinいいね!編集
ルイスメンドー

3

APL(Dyalog Unicode)27 24 バイト SBCS

完全なプログラム。以下のためのプロンプトCLRそのためです。

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

オンラインでお試しください!

0J100 100  i

 π回

÷ その逆

()  次の暗黙関数を適用します。

÷∘⎕ 引数を入力で除算します(C

⎕∘÷,L引数で除算された 入力を追加()

⎕, 入力を追加(R

()  次の暗黙関数を適用します。

+/ 引数を合計する

⊢÷ 引数をそれで割る


@StewieGriffin私はあなたが何を意味するのか確かです。「ハイマイナス」 ¯は、関数(数学演算子)negateと区別するためのAPLの負の数値プレフィックス-です。とにかく、APL文字をシングルバイトとしてカウントしないのは公平ではありません。エンコードの問題であり、APLコードを格納するためにシングルバイトを使用する多くのAPLシステムがあります。たとえば、Dyalogには、インタープリターのUnicodeバージョンとクラシック(シングルバイト)バージョンの両方があります。
アダム

1
すべての文字が1バイトであるエンコードを使用している場合、charの数はバイトの数と等しくなければなりません。それが事実であることを確認できますか(私はaplを別のエンコーディングシステムにあまり慣れていません)。また、私は高いマイナス記号に慣れていませんでした。私の悪い...
Stewieグリフィン

コードを「バイト数のカウント」ボックスに貼り付けて31に戻りました。それが正しくない場合、もちろんスコアは28になります:-)ただし、..,49J¯17.4..最初の部分は虚数で、2番目の部分は他の言語(または一般的な数学表記)では実数であるため、「虚数部がiまたはajで示されている限り」ルールに違反する可能性があります。「ハイマイナス」について教えてくれた+1といい答えがありますが、その日が来たら受け入れられる答えとして選ぶことができるかどうかはわかりません。
スティーヴィーグリフィン

1
@StewieGriffin Ninja'd;)
ベータ崩壊


2

オクターブ、41バイト

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

1/(100*j*pi)短くすることができます-.01j/pikインラインで変数に割り当てることにより、変数を2回使用できます。変数への全体のベクトルを割り当てると、Z4つのバイトがかかりますが、除算に私たちを可能にsum(Z)5がより短いバイトで、(R+L/k+k/C)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.