각 구성 요소의 전압은 얼마입니까?


18

아래 그림은 RLC 회로를 보여줍니다. RLC 회로는 직렬로 또는 병렬로 연결된 저항 (R), 인덕터 (L) 및 커패시터 (C)로 구성된 전기 회로입니다. (1)

여기에 이미지 설명을 입력하십시오

계산을 단순화하기 위해 시간 도메인 대신 주파수 (Laplace) 도메인에서 작업하는 것이 일반적입니다.

당신의 임무는 :

값을 가지고 R, L그리고 C입력으로하고, 전압을 반환 VR, VLVC

Laplace 도메인으로의 변환은 다음과 같습니다.

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(주파수는 50Hz입니다).

구성 요소가 직렬 일 때 결합 임피던스는 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 또는 함수 인수입니다. 출력 / 결과는 목록, 문자열 또는 사용자 언어에서 가장 실용적인 것의 세 가지 복소수 여야합니다. VR = ...결과가 아래 순서와 동일한 경우 이름 (ex ) 을 포함 할 필요는 없습니다 . 실수 부와 허수 부의 정밀도는 소수점 3 자리 이상이어야합니다. 입력 및 출력 / 결과는 기본 언어 인 경우 과학적 표기법으로 표시 될 수 있습니다.

R하고 L있다 >= 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

위의 결과에서 이것은 하나의 유효한 출력 형식 중 하나 일 수 있습니다.

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

하나의 전압 값에 대한 일부 유효한 출력 형식은 다음과 같습니다.

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

이 목록은 배타적이지 않으므로 허수 부가 i또는로 표시되는 한 다른 변형을 사용할 수 있습니다 j( i전류에 사용되는 전기 공학에서 일반적 임 ).

R, L 및 C의 다른 값에 대한 결과를 확인하려면 모든 결과에 대해 다음이 참이어야합니다 VR + VL + VC = 1..

바이트 단위로 가장 짧은 코드가 승리합니다!

그런데 : 네, 전압의 이상 구성 요소 및 전류 를 통해 구성 요소. 전압은 아무것도 통과하지 못했습니다. =)


2
실제로 리액턴스는 실수 이므로 XL = omega * L입니다. 인덕터의 임피던스는 Z = jXL입니다. (이것은 문제에 영향을 미치지 않으며 단지
수정일뿐입니다

@Voitcus, true ... 질문을 너무 혼란스럽게 만들지 않기 위해 조금 단순화했습니다. 주파수 영역으로 갈 때 XL / XC 용어에 j를 포함 시켰습니다. 나는 비록 리액턴스가 복잡하다고 말한 적이 없다 (jX가 아니라 X라고하지만) =) 그러나 나는 당신에 동의한다! 나는 실제로 그것을 임피던스라고 불렀습니다.
Stewie Griffin

함수 입력으로 3 개의 숫자 목록을 사용할 수 있습니까, 아니면 3 개의 개별 인수 여야합니까?
마틴 엔더

@ MartinBüttner, 목록은 괜찮습니다.
Stewie Griffin

답변:



9

수학, 33 바이트

그래서 Pyth에 가까운 ...

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

이것은 명명 취하는 함수이다 R, LC(필요한 순서로 결과 복소수의 목록을 그 세 개의 인수로 리턴하고 VR, VL, VC). 사용법 예 :

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

옥타브 / 매트랩, 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있었지만 그것이 바로 그 것이라고 생각했다). 감사!
Luis Mendo

... aaaand : 분명히 당신보다 당신에 대해 더 많이 알고 있습니다! 왜냐하면, 가능하다는 것을 알고 / 알았 기 때문입니다 ! =)
Stewie Griffin

@StewieGriffin Ooooh. 다시 나에게 일어났다. 나쁜 기억! : - D (난 정말 그 표기법을 사용하지 않습니다)
루이스 Mendo

당신은 당신이 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 좋은 생각이야! 편집
Luis Mendo

3

APL (Dyalog Unicode) , 27 24 바이트 SBCS

전체 프로그램. 대한 프롬프트 C, L, R순서입니다.

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

온라인으로 사용해보십시오!

0J100 100  나는

 π 배

÷ 그것의 역수

() 다음 암묵적 기능을 적용하십시오.

÷∘⎕ 인수를 입력 ( C)으로 나누기

⎕∘÷, 접두사 입력 ( L)을 인수로 나눈 값

⎕, 접두사 입력 ( R)

() 다음 암묵적 기능을 적용하십시오.

+/ 인수를 합하다

⊢÷ 논쟁을 그것으로 나누다


@StewieGriffin 무슨 뜻인지 잘 알고 있습니다. "high minus" ¯는 함수 (예 : math operator) negate와 구별하기 위해 APL의 음수 접두사 -입니다. 어쨌든 APL 문자를 단일 바이트로 계산하지 않는 것은 불공평하고 인코딩의 문제 일 뿐이며 단일 바이트를 사용하여 APL 코드를 저장하는 많은 APL 시스템이 있습니다. 예를 들어 Dyalog에는 유니 코드 및 클래식 (싱글 바이트) 버전의 인터프리터가 있습니다.
Adám

1
모든 문자가 단일 바이트 인 인코딩을 사용한 경우 문자 수는 바이트 수와 일치해야합니다. 그것이 사실인지 확인할 수 있습니까? (다른 인코딩 시스템에는 익숙하지 않습니다). 또한, 나는 마이너스 부호에 익숙하지 않았습니다. 내 나쁜 ...
Stewie 그리핀

방금 코드를 "바이트 수"상자에 붙여 넣고 31을 되찾았습니다. 정확하지 않은 경우 물론 점수는 28입니다 :-) ..,49J¯17.4..첫 번째 부분은 상상력이 있고 두 번째 부분은 상상력입니다. 다른 언어에서는 (또는 일반적으로 수학 표기법으로) "가상 부분이 i 또는 aj로 표시되는 한"규칙을 위반할 수 있습니다. "높은 빼기"에 대한 +1과 멋진 답변에 대해 +1을 부탁하지만, 그 날이 올 때 그것을 받아 들여진 답변으로 선택할 수 있을지 모르겠습니다.
Stewie Griffin

1
@StewieGriffin Ninja'd;)
Beta Decay


2

옥타브, 41 바이트

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

1/(100*j*pi)짧아 질 수 있습니다 -.01j/pi. 변수를 k인라인 변수에 할당 하면 변수를 두 번 사용할 수 있습니다. 변수에 전체 벡터를 할당하는 Z데는 4 바이트가 필요하지만 sum(Z)보다 작은 5 바이트 인 으로 나눌 수 있습니다 (R+L/k+k/C).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.