복소수
복소수는 실수부와 허수부로 이루어지며, 허수부는 −1의 제곱근인 i로 써요.
이 페이지에서는 복소수를 쓰는 방법, 복소수 산술, 복소수를 절댓값과 편각으로 나누는 방법,
음수의 제곱근 구하기, 그리고 복소수 값을 받는 수학 함수를
다뤄요.
이차방정식에 실근이 없을 때, 교류 회로나 신호를 다룰 때, 복소해석학 과제를 검토할 때 참고하세요.
복소수 쓰기
2 + 3i 결과 2 + 3icomplex(3, -4) 결과 3 - 4ii^2 결과 -1허수부는 3i나 1.5i처럼 숫자 바로 뒤에 i를 붙이거나, i만 단독으로 쓰세요.
complex(real, imaginary)는 두 부분으로 같은 값을 만들어요. complex(저항, 리액턴스)처럼 각 부분이
이름일 때 편리해요. 두 부분 모두 단위 없는 일반 숫자여야 해요.
i는 메모에서 다른 무언가가 i라는 이름을 쓰지 않을 때만 허수 단위를 뜻해요. i라는
이름이나 사용자 정의 단위를 정의하면 그쪽이 우선해요.
i = 52 + 3i 결과 17complex(2, 3) 결과 2 + 3i여기서는 3i가 3 × 5가 되어 결과가 17이 나왔어요. 이름은 메모의 계산 블록 사이에서 이어지므로,
메모 앞부분 어디에든 i = …가 있으면 같은 결과가 나와요. 복소수를 쓰는 메모에서는 i를 이름으로
쓰지 마세요. complex(2, 3)은 그 이름을 쓰지 않으므로 여전히 작동해요.
산술 연산
(2 + 3i) + (1 - 5i) 결과 3 - 2i(1 + 2i) * (3 - i) 결과 5 + 5i(2 + 3i) * (2 - 3i) 결과 1310 / (3 + 4i) 결과 1.2 - 1.6i(1 + i)^8 결과 16덧셈, 뺄셈, 곱셈, 나눗셈, 정수 거듭제곱은 정확하게 계산돼요. (2 + 3i) * (2 - 3i)처럼 결과의
허수부가 0이면 일반 숫자로 표시돼요. 곱하거나 나눌 때는 각 복소수를 괄호로 감싸야
(2 + 3i) * (2 - 3i)가 2 + (3i * 2) - 3i로 읽히지 않아요.
복소수의 각 부분
z = 3 + 4ireal(z) 결과 3imag(z) 결과 4conj(z) 결과 3 - 4iabs(z) 결과 5arg(1 + i) 결과 0.7853981634arg(1 + i) rad in degrees 결과 45°| 함수 | 결과 |
|---|---|
real(z) |
실수부 |
imag(z) |
허수부(일반 숫자로) |
conj(z) |
켤레복소수: 실수부는 같고 허수부의 부호만 바뀐 값 |
abs(z) |
절댓값: 0으로부터의 거리 |
arg(z) |
편각: 양의 실수축으로부터의 각도(라디안) |
arg는 −π와 π 사이의 라디안 값을 일반 숫자로 돌려줘요. 도 단위로 보려면 마지막 줄처럼 라디안이라고
표시한 다음 변환하세요. 반대로 절댓값과 각도에서 복소수로 되돌리려면 exp를 사용하세요.
2 * exp(i * pi / 3)은 1 + 1.7320508076i예요.
음수의 제곱근
일반 음수의 제곱근은 실수 계산이므로 sqrt(-16)은 대신 무엇을 써야 하는지 알려 주는 오류를
표시해요. Error: imaginary number. For a complex answer, write sqrt(-16 + 0i). 복소수 제곱근을 구하려면 0i를 더하거나
complex(…, 0)을 써서 복소수로 입력하세요.
sqrt(-16 + 0i) 결과 4isqrt(complex(-16, 0)) 결과 4isqrt(3 + 4i) 결과 2 + isqrt(2i) 결과 1 + isqrt는 주제곱근을 돌려줘요. 실수부가 양수인 근이고, 음수라면 허수부가 양수인 근이에요.
다른 제곱근은 그 값에 음의 부호를 붙인 값이에요.
복소수로 입력한 값은 허수부가 0이어도 복소수로 남아요. 이름에 저장하거나 먼저 다른 계산을
이어 가도 돼요. x = -16 + 0i 다음에 sqrt(x)를 쓰면 x가 -16으로 표시되더라도
결과는 4i예요.
그래서 근의 공식을 모든 이차방정식에 쓸 수 있어요.
# x^2 + 2x + 5 = 0의 근a = 1b = 2c = 5판별식 = b^2 - 4*a*c 결과 -16(-b + sqrt(판별식 + 0i)) / (2*a) 결과 -1 + 2i(-b - sqrt(판별식 + 0i)) / (2*a) 결과 -1 - 2i세제곱근도 같은 주근 규칙을 따르므로 음수에서는 예상과 다른 결과가 나올 수 있어요.
cbrt(-8) 결과 -2cbrt(-8 + 0i) 결과 1 + 1.7320508076i둘 다 −8의 세제곱근이에요. 실수로 쓰면 실수 근이 나오고, 복소수로 쓰면 복소수 주근이 나와요.
복소수 함수
exp(i * pi) 결과 -1ln(-1 + 0i) 결과 3.1415926536ii^i 결과 0.2078795764cos(i) 결과 1.5430806348sinh(i) 결과 0.8414709848i2^i 결과 0.7692389014 + 0.6389612763i다음 함수들은 복소수 값을 받아요.
sin,cos,tan과 역함수asin,acos,atansinh,cosh,tanh와 역함수asinh,acosh,atanhexp,ln,log(또는log10),log2,sqrt,cbrti^0.5나2^i처럼 지수가 분수나 복소수인 거듭제곱
이 함수들은 이진 부동소수점으로 계산하므로 결과는 매우 가까운 근삿값이에요. 무시해도 될 만큼
작은 반올림 찌꺼기는 0으로 표시되므로 exp(i * pi)는 교과서에서 기대하는 답인 −1로 보여요.
저장된 값에는 모든 자릿수가 남아 있으므로 이런 결과를 비교할 때는 == 대신
abs(exp(i * pi) + 1) < 1e-9처럼 차이가 아주 작은지 확인하세요.
각 함수는 주분지에서 나온 답 하나만 돌려줘요. 복소수에는 로그가 무한히 많고 근도 여러 개
있지만, 표준적인 값 하나를 얻게 돼요. sqrt와 마찬가지로 실수 입력은 실수로 남아요.
ln(-1)과 log(-100)은 허수 오류와 함께 시도해 볼 복소수 형식을 보여 주고,
ln(-1 + 0i)는 πi를 돌려줘요.
0의 로그는 오류예요.
floor나 round처럼 실수에만 의미가 있는 함수는 복소수 값을 받지
않아요.
복소수 비교하기
2 + 3i == complex(2, 3) 결과 true2 + 3i != 2 - 3i 결과 truecomplex(3, 0) >= 3 결과 trueabs(3 + 4i) > abs(1 + 2i) 결과 true==와 !=는 모든 복소수 값에 쓸 수 있어요. 복소수에는 자연스러운 순서가 없으므로 <, <=, >,
>=는 양쪽의 허수부가 모두 0일 때만 작동해요. i < 2는 오류예요. 크기를 비교하려면 마지막 줄처럼
abs로 절댓값을 비교하세요. 복소수는 정렬할 수
없어요.
전체 규칙은 고급 수학 참조에 있어요.
종합해 보기
교류 회로 문제를 검산해 볼게요. 30Ω 저항과 리액턴스가 40Ω인 인덕터가 직렬로 연결되어 있고, 전원은 10V예요.
# 직렬 회로: 30Ω 저항, 40Ω 리액턴스, 10V 전원저항 = 30리액턴스 = 40z = complex(저항, 리액턴스) 결과 30 + 40iabs(z) 결과 50전류 = 10 / z 결과 0.12 - 0.16iabs(전류) 결과 0.2arg(z) rad in degrees to 1 dp 결과 53.1°임피던스는 30 + 40i이고 크기는 50Ω이므로, 전류는 0.2A이며 전압보다 약 53.1° 늦어요.
엔지니어들은 허수 단위를 흔히 j로 쓰지만, Varlig에서는 항상 i예요. 복소수의 각 부분에는
단위를 붙일 수 없으므로 옴, 볼트, 암페어는 주석에 적었어요.