A imagem abaixo mostra um circuito RLC. Um circuito RLC é um circuito elétrico que consiste em um resistor (R), um indutor (L) e um capacitor (C), conectados em série ou em paralelo. (1)
Para simplificar os cálculos, é comum trabalhar no domínio da frequência (Laplace) em vez do domínio do tempo.
Sua tarefa é:
Toma os valores R
, L
e C
como entrada, e retornar as tensões VR
, VL
eVC
A conversão para o domínio Laplace é a seguinte:
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
onde j = sqrt(-1)
e w = 2*pi*50
(A frequência é de 50 Hz).
A impedância combinada, quando os componentes estão em série, é Z = R + XL + XC
. Você deve se lembrar U = R*I
das aulas de física do ensino médio. É quase o mesmo, mas um pouco mais complexo agora: VS = Z*I
. A corrente é calculada dividindo a tensão VS
pela impedância total Z
. Para encontrar a tensão em um único componente, você precisa conhecer a corrente e multiplicá-la pela impedância. Por simplicidade, presume-se que a tensão seja VS = 1+0*j
.
As equações que você pode precisar são:
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)
A entrada é de STDIN ou como argumentos de função. A saída / resultado deve ser três números complexos, em uma lista, sequência ou o que for mais prático no seu idioma. Não é necessário incluir nomes (ex VR = ...
), desde que os resultados estejam na mesma ordem que abaixo. A precisão deve ter pelo menos três casas decimais para a parte real e imaginária. A entrada e saída / resultados podem estar em notação científica, se isso for o padrão no seu idioma.
R
e L
são >= 0
e C > 0
. R, L, C <= inf
(ou o número mais alto possível no seu idioma).
Um caso de teste simples:
R = 1, L = 1, C = 0.00001
VR = 0.0549 + 0.2277i
VL = -71.5372 +17.2353i
VC = 72.4824 -17.4630i
Para os resultados acima, esse pode ser um (de muitos) formatos de saída válidos:
(0.0549 + 0.2277i, -71.5372 +17.2353i, 72.4824 -17.4630i)
Alguns formatos de saída válidos para um valor de tensão são:
1.234+i1.234, 1.23456+1.23456i, 1.2345+i*1.2345, 1.234e001+j*1.234e001.
Esta lista não é exclusiva; portanto, outras variantes podem ser usadas, desde que a parte imaginária seja indicada por um i
ou a j
(comum em engenharia elétrica i
usada para corrente).
Para verificar o resultado para outros valores de R, G e C, o seguinte deve ser verdadeiro para todos os resultados: VR + VL + VC = 1
.
O código mais curto em bytes vence!
A propósito: Sim, é tensão sobre um componente e corrente através de um componente. Uma voltagem nunca passou por nada. =)
fonte
Respostas:
Pitão,
302928 bytesExperimente online.
fonte
Mathematica, 33 bytes
Tão perto de Pyth ...
Esta é uma função não identificada, que leva
R
,L
eC
como as suas três argumentos e retorna uma lista de números complexos como o resultado (na ordem necessáriaVR
,VL
,VC
). Exemplo de uso:fonte
Oitava / Matlab,
5351 bytesExperimente online
Agradecemos a @StewieGriffin por remover dois bytes.
fonte
100j
?! Tantos anos usando o Matlab e eu não sabia que isso poderia ser feito! :-) (eu sabia1j
, mas pensei que era apenas isso). Obrigado!k=-.01j/pi;Z=[R,L/k,k/C];Z/sum(Z)
ouk=-.01j/pi;[R L/k k/C]/(R+L/k+k/C)
. =)APL (Dyalog Unicode) ,
27SBCSde24 bytesPrograma completo. Solicita
C
,L
,R
nessa ordem.Experimente online!
0J100
100 i○
π vezes isso÷
recíproco disso(
…)
Aplique a seguinte função tácita:÷∘⎕
divida o argumento por input (C
)⎕∘÷,
prepend input (L
) dividido pelo argumento⎕,
entrada de prefixo (R
)(
…)
Aplique a seguinte função tácita:+/
somar os argumentos⊢÷
dividir os argumentos por quefonte
¯
é o prefixo do número negativo da APL, para distinguir da função (ou seja, operador matemático) negar-
. De qualquer forma, não seria justo não contar os caracteres APL como bytes únicos, é apenas uma questão de codificação e existem muitos sistemas de APL que usam bytes únicos para armazenar o código APL. Por exemplo, o Dyalog possui as versões Unicode e Classic (byte único) de seu intérprete...,49J¯17.4..
significaria que a primeira parte é imaginária e a segunda é real em qualquer outro idioma (ou em notação matemática em geral), portanto, pode violar a regra "desde que a parte imaginária seja indicada por um i ou aj". Tenha um +1 para me ensinar sobre "menos-alto" e uma boa resposta, mas não tenho certeza se posso escolher como resposta aceita quando chegar o dia.Oitava, 41 bytes
1/(100*j*pi)
pode ser reduzido para o-.01j/pi
que é muito menor. Ao atribuí-lo à variávelk
inline, a variável pode ser usada duas vezes. Atribuir o vetor inteiro à variávelZ
custa 4 bytes, mas nos permite dividir porsum(Z)
, que é 5 bytes menor que(R+L/k+k/C)
.fonte