На рисунке ниже показана схема RLC. Схема RLC - это электрическая цепь, состоящая из резистора (R), индуктора (L) и конденсатора (C), соединенных последовательно или параллельно. (1)
Чтобы упростить вычисления, принято работать в частотной (лапласовой) области вместо временной.
Ваша задача:
Возьмите значения R
, L
и в C
качестве входных данных, и возвращать напряжения VR
, VL
иVC
Преобразование в область Лапласа происходит следующим образом:
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 Гц).
Совокупное сопротивление, когда компоненты последовательно 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, либо в качестве аргументов функции. Вывод / результат должен состоять из трех комплексных чисел в виде списка, строки или чего-либо более практичного на вашем языке. Не обязательно включать имена (ex VR = ...
), если результаты в том же порядке, что и ниже. Точность должна составлять не менее 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 и С, следующее должно быть истинным для всех результатов: VR + VL + VC = 1
.
Самый короткий код в байтах выигрывает!
Кстати: Да, это напряжение через компонент, и ток через компонент. Напряжение никогда ничего не проходило. знак равно
источник
Ответы:
Pyth,
302928 байтПопробуйте онлайн.
источник
Mathematica, 33 байта
Так близко к Пифу ...
Это безымянная функция, которая принимает
R
,L
аC
также его три аргумента и возвращает список комплексных чисел как результат (в требуемом порядкеVR
,VL
,VC
). Пример использования:источник
Октава / Матлаб,
5351 байтПопробуйте онлайн
Спасибо @StewieGriffin за удаление двух байтов.
источник
100j
?! Так много лет с использованием Matlab, и я не знал, что это можно сделать! :-) (я знал1j
, но думал, что это именно так). Благодарность!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)
. =)APL (Dyalog Unicode) ,
2724 байта SBCSПолная программа. Запрашивает
C
,L
,R
в таком порядке.Попробуйте онлайн!
0J100
100 я○
π раз÷
взаимность этого(
…)
Применить следующую молчаливую функцию:÷∘⎕
разделить аргумент на input (C
)⎕∘÷,
prepend input (L
) делится на аргумент⎕,
предварительный ввод (R
)(
…)
Применить следующую молчаливую функцию:+/
суммировать аргументы⊢÷
разделите аргументы этимисточник
¯
- это префикс отрицательного числа APL, чтобы отличить его от функции (т. е. математического оператора) отрицания-
. В любом случае, было бы несправедливо не считать символы APL одиночными байтами, это просто вопрос кодирования, и есть много систем APL, которые используют отдельные байты для хранения кода APL. Например, Dyalog имеет как Unicode, так и Classic (однобайтовые) версии своего интерпретатора...,49J¯17.4..
будет означать, что первая часть мнимая, а вторая реально на любом другом языке (или в математической нотации в целом), поэтому оно может нарушать правило «до тех пор, пока мнимая часть обозначена i или aj». Имейте +1 за то, что научили меня «высокий минус», и хороший ответ, но я не уверен, что смогу выбрать его в качестве принятого ответа, когда придет тот день.Октава, 41 байт
1/(100*j*pi)
может быть сокращен до-.01j/pi
которого намного короче. Присваивая его переменнойk
inline, переменную можно использовать дважды. Присвоение всего вектора переменнойZ
стоит 4 байта, но позволяет нам делить наsum(Z)
, что на 5 байтов меньше, чем(R+L/k+k/C)
.источник