복소수

복소수

어려움

지침

복소수는 z = a + b * i 형태로 표현돼요. 여기서:

  • a는 실수부(실수)이고,

  • b는 허수부(역시 실수)이며,

  • i는 i^2 = -1을 만족하는 허수 단위예요.

복소수의 연산

켤레복소수

복소수 z = a + b * i의 켤레복소수는 다음과 같아요:

zc = a - b * i

절댓값

z의 절댓값(또는 모듈러스)은 다음과 같이 정의해요:

|z| = sqrt(a^2 + b^2)

절댓값의 제곱은 z와 그 켤레복소수 zc의 곱으로 계산해요:

|z|^2 = z * zc = a^2 + b^2

덧셈

두 복소수 z1 = a + b * i와 z2 = c + d * i의 합은 실수부와 허수부를 각각 더해서 구해요:

z1 + z2 = (a + b * i) + (c + d * i)
        = (a + c) + (b + d) * i

뺄셈

두 복소수의 차는 각각의 실수부와 허수부를 빼서 구해요:

z1 - z2 = (a + b * i) - (c + d * i)
        = (a - c) + (b - d) * i

곱셈

두 복소수의 곱은 다음과 같이 정의해요:

z1 * z2 = (a + b * i) * (c + d * i)
        = (a * c - b * d) + (b * c + a * d) * i

역수

0이 아닌 복소수의 역수는 다음과 같아요:

1 / z = 1 / (a + b * i)
      = a / (a^2 + b^2) - b / (a^2 + b^2) * i

나눗셈

한 복소수를 다른 복소수로 나눈 결과는 다음과 같아요:

z1 / z2 = z1 * (1 / z2)
        = (a + b * i) / (c + d * i)
        = (a * c + b * d) / (c^2 + d^2) + (b * c - a * d) / (c^2 + d^2) * i

거듭제곱

e(자연로그의 밑)를 복소수 지수로 거듭제곱하는 것은 오일러 공식으로 표현할 수 있어요:

e^(a + b * i) = e^a * e^(b * i)
              = e^a * (cos(b) + i * sin(b))

구현 요구 사항

복소수에 대한 내장 지원을 사용하지 않아야 하므로, 다음 연산을 구현해야 해요:

  • 두 복소수의 덧셈
  • 두 복소수의 뺄셈
  • 두 복소수의 곱셈
  • 두 복소수의 나눗셈
  • 복소수의 켤레복소수
  • 복소수의 절댓값
  • e(자연로그의 밑)를 복소수로 거듭제곱

Julia Base의 복소수 구현은 여기에서 볼 수 있어요: https://github.com/JuliaLang/julia/blob/master/base/complex.jl.


보너스 A

실수와 복소수 사이의 연산을 다루는 보너스 연습 문제는 스텁 complex-numbers.jl이나 runtests.jl에서 다음 코드의 주석 처리를 해제하면 풀어볼 수 있어요: # enable_realcomplex_tests = true

보너스 B

실수와 복소수 사이의 보너스 연습 문제는 스텁 complex-numbers.jl이나 runtests.jl에서 다음 코드의 주석 처리를 해제하면 풀어볼 수 있어요: # enable_syntaxsugar_tests = true 그다음 im과 유사하게 jm을 구현해서 1 + 1jm == ComplexNumber(1, 1)이 되도록 해요.


출처

Wikipedia링크가 새 창이나 탭에서 열려요
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Julia Exercism

복소수 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Julia 트랙을 개념 35개연습 문제 128개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.