Điện áp trên mỗi thành phần là gì?


18

Hình dưới đây cho thấy một mạch RLC. Mạch RLC là một mạch điện bao gồm điện trở (R), cuộn cảm (L) và tụ điện (C), được mắc nối tiếp hoặc song song. (1)

nhập mô tả hình ảnh ở đây

Để đơn giản hóa các tính toán, thông thường phải làm việc trong miền tần số (Laplace) thay vì miền thời gian.

Nhiệm vụ của bạn là:

Lấy các giá trị R, LClàm đầu vào, và trả về các điện áp VR, VLVC

Việc chuyển đổi sang tên miền Laplace như sau:

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

trong đó j = sqrt(-1)w = 2*pi*50(Tần số là 50 Hz).

Trở kháng kết hợp, khi các thành phần trong chuỗi là Z = R + XL + XC. Bạn có thể nhớ U = R*Itừ các bài giảng vật lý trường trung học. Nó gần giống nhau, nhưng bây giờ phức tạp hơn một chút : VS = Z*I. Dòng điện được tính bằng cách chia điện áp VScho tổng trở Z. Để tìm điện áp trên một thành phần duy nhất, bạn cần biết dòng điện, sau đó nhân nó với trở kháng. Để đơn giản, điện áp được giả định là VS = 1+0*j.

Các phương trình bạn có thể cần là:

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)

Đầu vào là từ STDIN hoặc là đối số chức năng. Đầu ra / kết quả phải là ba số phức, trong một danh sách, chuỗi hoặc bất cứ thứ gì thực tế nhất trong ngôn ngữ của bạn. Không cần thiết phải bao gồm tên (ví dụ VR = ...), miễn là kết quả theo thứ tự như dưới đây. Độ chính xác phải có ít nhất 3 điểm thập phân cho cả phần thực và phần ảo. Đầu vào và đầu ra / kết quả có thể theo ký hiệu khoa học nếu đó là mặc định trong ngôn ngữ của bạn.

RL>= 0, và C > 0. R, L, C <= inf(hoặc số cao nhất có thể trong ngôn ngữ của bạn).

Một trường hợp thử nghiệm đơn giản:

R = 1, L = 1, C = 0.00001

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

Đối với các kết quả ở trên, đây có thể là một (nhiều) định dạng ouput hợp lệ:

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

Một số định dạng ouput hợp lệ cho một giá trị điện áp là:

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

Danh sách này không độc quyền, vì vậy các biến thể khác có thể được sử dụng, miễn là phần ảo được chỉ định bởi một ihoặc một j(phổ biến trong kỹ thuật điện như iđược sử dụng cho hiện tại).

Để xác minh kết quả cho các giá trị khác của R, L và C, điều sau đây phải đúng với tất cả các kết quả : VR + VL + VC = 1.

Mã ngắn nhất trong byte giành chiến thắng!

Nhân tiện: Có, đó là điện áp trên một thành phần và dòng điện qua một thành phần. Một điện áp chưa bao giờ đi qua bất cứ điều gì. =)


2
Trên thực tế, phản ứng là số thực , vì vậy XL = omega * L. Trở kháng của cuộn cảm là Z = jXL. (Điều này không ảnh hưởng đến vấn đề, đây chỉ là một sự điều chỉnh)
Voitcus

@Voitcus, đúng ... Tôi đã đơn giản hóa nó một chút, để không làm cho câu hỏi quá khó hiểu. Tôi đã bao gồm j trong các điều khoản XL / XC, khi đi đến miền tần số. Tôi chưa bao giờ nói rằng phản ứng rất phức tạp (mặc dù tôi gọi nó là X chứ không phải jX) =) Nhưng tôi đồng ý với bạn! Tôi thực sự gọi nó là trở kháng quá.
Stewie Griffin

Tôi có thể lấy danh sách 3 số làm đầu vào hàm không, hoặc có phải là 3 đối số riêng biệt không?
Martin Ender

@ MartinBüttner, danh sách là OK.
Stewie Griffin

Câu trả lời:



9

Toán học, 33 byte

Rất gần với Pyth ...

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

Đây là một chức năng vô danh, trong đó có R, LCnhư ba đối số của nó và trả về một danh sách các số phức tạp như kết quả (theo thứ tự cần thiết VR, VL, VC). Ví dụ sử dụng:

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

Octave / Matlab, 53 51 byte

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

Dùng thử trực tuyến

Cảm ơn @StewieGriffin đã xóa hai byte.


@StewieGriffin 100j?! Rất nhiều năm sử dụng Matlab và tôi không biết điều đó có thể được thực hiện! :-) (Tôi đã biết 1j, nhưng tôi nghĩ đó chỉ là như vậy). Cảm ơn!
Luis Mendo

... Aaaand: Rõ ràng tôi biết nhiều về bạn hơn bạn! Bởi vì, bạn đã / đã biết rằng điều đó là có thể ! =)
Stewie Griffin

@StewieGriffin Ooooh. Nó lại xảy ra với tôi. Trí nhớ tồi !!: - D (Tôi không bao giờ thực sự sử dụng ký hiệu đó)
Luis Mendo

Bạn có thể lưu một byte khác nếu bạn bắt đầu với nghịch đảo của k, như thế này : k=-.01j/pi;Z=[R,L/k,k/C];Z/sum(Z), hoặc k=-.01j/pi;[R L/k k/C]/(R+L/k+k/C). =)
Stewie Griffin

@StewieGriffin Ý kiến ​​hay! Đã chỉnh sửa
Luis Mendo

3

APL (Dyalog Unicode) , 27 24 byte SBCS

Chương trình đầy đủ. Nhắc nhở cho C, L, Rtheo thứ tự đó.

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

Hãy thử trực tuyến!

0J100 100  tôi

 số lần đó

÷ đối ứng với điều đó

(... ) áp dụng các chức năng ngầm như sau:

÷∘⎕ chia đối số cho input ( C)

⎕∘÷, nhập trước ( L) chia cho đối số

⎕, nhập trước ( R)

(... ) áp dụng các chức năng ngầm như sau:

+/ tổng hợp các đối số

⊢÷ chia các đối số bằng cách đó


@StewieGriffin Tôi lưu ý chắc chắn ý của bạn. "điểm trừ cao" ¯là tiền tố số âm của APL, để phân biệt với hàm (tức là toán tử toán học) phủ định -. Dù sao, sẽ không công bằng khi không tính các ký tự APL là các byte đơn, đó chỉ là vấn đề mã hóa và có nhiều hệ thống APL sử dụng các byte đơn để lưu trữ mã APL. Ví dụ, Dyalog có cả phiên bản Unicode và Cổ điển (byte đơn) của trình thông dịch.
Adám

1
Tôi đồng ý, nếu bạn đã sử dụng mã hóa trong đó mỗi ký tự là một byte đơn, thì số lượng ký tự sẽ bằng số byte. Bạn có thể xác minh rằng đó là trường hợp (tôi không quá quen thuộc với hệ thống mã hóa khác). Ngoài ra, tôi không quen thuộc với dấu trừ cao. Xấu của tôi ...
Stewie Griffin

Tôi vừa dán mã vào hộp "đếm số byte" và lấy lại 31. Nếu không đúng, tất nhiên bạn sẽ có điểm 28 :-) Mặc dù, ..,49J¯17.4..có nghĩa là phần đầu tiên là tưởng tượng và phần thứ hai là có thật trong bất kỳ ngôn ngữ nào khác (hoặc trong ký hiệu toán học nói chung), vì vậy nó có thể vi phạm quy tắc "miễn là phần ảo được biểu thị bằng i hoặc aj". Có +1 để dạy tôi về "điểm trừ cao" và một câu trả lời hay, nhưng tôi không chắc mình có thể chọn nó làm câu trả lời được chấp nhận, khi ngày đó đến.
Stewie Griffin

1
@StewieGriffin Ninja'd;)
Beta Decay


2

Octave, 41 byte

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

1/(100*j*pi)có thể rút ngắn -.01j/pimà ngắn hơn rất nhiều. Bằng cách gán nó cho biến knội tuyến, biến có thể được sử dụng hai lần. Việc gán toàn bộ vectơ cho biến có Zgiá 4 byte, nhưng cho phép chúng ta chia cho sum(Z), ngắn hơn 5 byte (R+L/k+k/C).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.