Skip to content

수와 연산 · 집합 · 복소수

2주차에서 다룬 수 체계의 기초를 정리한다. 진법과 지수·로그, 합·곱 연산자, 집합론의 기본 연산, 수열과 급수, 그리고 복소수를 순서대로 살펴본다.

진법

  • n진법base n은 수를 셀 때 자릿수가 올라가는 단위의 기준을 n으로 하는 셈법이다. 우리가 흔히 쓰는 것은 10진법이고, 컴퓨터 과학에서는 주로 2진법을 쓴다.
  • 임의의 자연수 an2에 대해 다음과 같이 표현할 수 있으며, 이 표현은 존재성existence과 유일성uniqueness을 가진다.
a=aknk+ak1nk1++a1n+a0,0a0,a1,,ak<n, ak0
  • 이를 a=akak1a1a0(n)로 표기하며, 10진법은 아래첨자를 생략한다.
  • 진법 변환은 변환하려는 수를 목표 진법 수로 나누어 가며 생기는 나머지를 역순으로 나열해 수행한다. 예를 들어 10진수 3457진법으로 바꾸는 과정은 다음과 같다.
345÷7=49  249÷7=7  07÷7=1  01÷7=0  1345(10)=1002(7)
  • 유리수·무리수·복소수 진법도 정의할 수 있다.
python
def to_base(a, n):
    if a == 0:
        return "0"
    digits = []
    while a > 0:
        digits.append(a % n)   # 나머지를 모으고
        a //= n
    return "".join(str(d) for d in reversed(digits))  # 역순으로 나열

for a, n in [(345, 7), (13, 2), (100, 5)]:
    print(f"{a}(10) = {to_base(a, n)}({n})")

# 역변환으로 검증: 7진수 1002 -> 10진수
s = "1002"
val = sum(int(d) * 7**i for i, d in enumerate(reversed(s)))
print("1002(7) =", val, "(10)")

지수와 로그

  • 임의의 수 AN번 거듭해 곱한 것을 AN으로 표기한다. 지수exponent는 다음 성질을 가진다.
XAXB=XA+B,XAXB=XAB,(XA)B=XABXN+XN=2XNX2N,2N+2N=2N+1
  • 로그log는 지수의 역연산으로 다음과 같이 정의된다.
XA=B  logXB=A
  • 컴퓨터 과학에서는 밑을 2로, 자연과학·공학에서는 e2.718(자연로그 ln)을, 경제학·일상에서는 10(상용로그)을 약속한다.
  • 정의로부터 다음 성질이 유도된다.
logAB=logCBlogCA (A,B,C>0, A1),logAB=logA+logB,logAB=logAlogBlog(AB)=BlogA,logX<X (X>0),log1=0, log2=1, log1024=10 (밑 2)

합 연산과 곱 연산

  • 합 연산자 와 곱 연산자 는 다음과 같이 정의된다.
k=ijak=ai+ai+1++aj,k=ijak=aiai+1aj
  • 두 연산자는 각각 다음 성질을 가진다.
k=1n(ak±bk)=k=1nak±k=1nbk,k=1ncak=ck=1nak,k=1nc=cnk=1n(akbk)=(k=1nak)(k=1nbk),(k=1nak)m=k=1nakm,k=1nc=cn
python
import numpy as np

# 로그 밑 변환 공식으로 log_2 B 계산: log_2 B = ln B / ln 2
for B in [1, 2, 1024]:
    print(f"log2({B}) = {np.log(B)/np.log(2):.4f}")

# 합 연산자로 라이프니츠 급수를 계산해 pi/4 근사
n = np.arange(0, 100000)
s = np.sum((-1.0)**n / (2*n + 1))     # 1 - 1/3 + 1/5 - 1/7 + ...
print(f"\n4 x (부분합) = {4*s:.6f},  np.pi = {np.pi:.6f}")

집합

  • 집합set A에 원소element a가 속하면 aA, 아니면 aA로 쓴다. 모임collection·족family은 집합의 동의어이다.
  • {x:}는 조건 을 만족하는 모든 x의 집합이며, 원소가 없는 집합을 공집합empty set 이라 한다.
  • A의 모든 원소가 B의 원소이면 AB의 부분집합subset이라 하고 AB로 표기한다.
AB  (xAxB, x)
  • A의 모든 부분집합을 모은 집합을 멱집합power set P(A)라 한다. 원소가 m개이면 |P(A)|=2m이다.
A={0,1,2}  P(A)={,{0},{1},{2},{0,1},{0,2},{1,2},{0,1,2}}
  • 합집합union·교집합intersection·차집합set difference은 다음과 같다.
AB={x:xAxB},AB={x:xAxB},BA={x:xBxA}
  • AB=이면 두 집합은 서로소disjoint set이며, AX일 때 XAA의 여집합complement이라 한다.

분배 법칙과 드 모르간의 법칙

분배 법칙distributive law:

A(BC)=(AB)(AC),A(BC)=(AB)(AC)

드 모르간의 법칙De Morgan's laws (A,BX):

X(AB)=(XA)(XB),X(AB)=(XA)(XB)
  • 색인 집합index set I에 대해 색인indexed된 모임 {Ai:iI}의 합집합·교집합은 다음과 같이 일반화된다.
iIAi={x:iI s.t. xAi},iIAi={x:iI, xAi}
  • 수 체계는 자연수natural number N(페아노 공리계Peano's axioms로 정의)에서 시작해 확장된다.
N0=N{0},Z={x:n±x=0, nN0},Q={x:x=mn, m,nZ, n0}
  • 무리수irrational number I는 정수비로 나타낼 수 없는 수이고, 실수real number R=QI이며, 허수단위 i1에 대해 복소수complex number C={a+bi:a,bR}이다.
  • 볼록 집합convex set Atx+(1t)yA (x,yA, t[0,1])을 만족하는 집합으로, 두 점을 잇는 선분이 항상 집합에 포함된다. 최적화·기계학습machine learning에서 서포트 벡터 머신support vector machine의 결정 경계 문제 등 볼록 최적화의 기반이 된다.
python
from itertools import combinations

A = {0, 1, 2}
B = {1, 2, 3}
print("A ∪ B =", A | B)
print("A ∩ B =", A & B)
print("B \\ A =", B - A)

# 멱집합 구성
elems = sorted(A)
power = [set(c) for r in range(len(elems)+1) for c in combinations(elems, r)]
print(f"\n|P(A)| = {len(power)} (= 2^{len(elems)})")
print("P(A) =", [sorted(s) for s in power])

수열과 급수

  • 수열sequence은 자연수 집합을 정의역으로 하는 함수로 {xn}n=1처럼 표기한다. 대표적인 수열은 다음과 같다.
등차수열 an=a+(n1)d,등비수열 an=arn1,조화수열 an=a1+a(n1)d
  • 피보나치 수열Fibonacci sequence은 점화식과 일반항으로 다음과 같이 주어진다.
F1=1, F2=1, Fn+2=Fn+1+Fn,Fn=15[(1+52)n(152)n]

Thm. 피보나치 수열의 이웃한 두 항은 항상 서로소이다

gcd(a,a+b)=gcd(a,b)이므로

gcd(Fk+1,Fk+2)=gcd(Fk+1,Fk+1+Fk)=gcd(Fk+1,Fk)

n=1에서 gcd(F1,F2)=1이고, gcd(Fk,Fk+1)=1을 가정하면 위 식에 의해 gcd(Fk+1,Fk+2)=1. 따라서 수학적 귀납법으로 gcd(Fn,Fn+1)=1, nN.

  • 수열 {an}의 부분합 Sn=k=1nak의 극한limit을 급수series라 한다.
limnSn=limnk=1nak
  • 극한값이 실수로 수렴converge하면 급수가 수렴한다고 하고, 그렇지 않으면 발산diverge한다고 한다. 급수는 "부분합의 극한"이지 "무한 번 더하는 것"이 아니며, 리만 재배열 정리Riemann rearrangement theorem가 그 차이를 보여준다.
  • 테일러 급수Taylor series는 함수 f(x)를 점 a 주변에서 다항식의 합으로 전개한다. a=0인 경우를 매클로린 급수Maclaurin series라 한다.
f(x)f(a)+f(a)(xa)+f(a)2!(xa)2+f(a)3!(xa)3+
  • 전개 차수가 높을수록 원래 함수에 가까워진다. 예를 들어 sinx의 매클로린 전개는 다음과 같다.
sinx=xx33!+x55!x77!+=n=0(1)nx2n+1(2n+1)!

복소수

  • 복소수 z=a+bi (a,bR, i1)에서 (z)=a를 실수부, (z)=b를 허수부라 한다. 켤레복소수complex conjugate와 절댓값absolute value은 다음과 같다.
z¯(z)i(z)=abi,|z|zz¯=a2+b2
  • 복소수의 덧셈과 곱셈은 다음과 같이 정의되며, 둘 다 결합법칙associative property·교환법칙commutative property을 만족하고 항등원·역원이 존재한다(곱셈의 역원 z1=z¯/|z|2).
(a+bi)+(c+di)=(a+c)+(b+d)i,(a+bi)(c+di)=(acbd)+(ad+bc)i
  • 복소수는 행렬 표현matrix representation으로도 나타낼 수 있다. 특히 단위허수 i의 행렬 표현은 회전 행렬rotation matrix과 같다.
z=a+bi  (abba),i  (0110)=(cosπ2sinπ2sinπ2cosπ2)
  • 이를 일반화하면 in은 각도 nπ2의 회전에 대응하며, i0=1, i1=i, i2=1, i3=i, i4=1로 주기 4를 갖는다.
  • 극형식polar form은 편각 θ를 이용해 z=|z|(cosθ+isinθ)로 쓴다. 제1사분면에서는 θ=arctan(b/a)이며(일반적으로는 arctan2를 사용), 여기서 오일러 공식Euler's formula을 얻는다.
eixcosx+isinx,(cf. eiπ+1=0)
python
import numpy as np
from math import gcd

# 피보나치 수열과 이웃 항의 서로소성
F = [1, 1]
for _ in range(10):
    F.append(F[-1] + F[-2])
print("피보나치 F =", F)
print("이웃 항 gcd =", [gcd(F[i], F[i+1]) for i in range(len(F)-1)])

# 복소수 i^n 의 주기성과 오일러 공식
print("\ni^n 의 주기성:")
for n in range(5):
    print(f"  i^{n} = {np.round(1j**n, 2)}")
print("오일러 공식 e^(iπ)+1 =", np.round(np.exp(1j*np.pi) + 1, 4))
PDF