Skip to content

수와 연산 · 집합 · 복소수 ​

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

진법 ​

  • n진법base n은 수를 셀 때 자릿수가 올라가는 단위의 기준을 n으로 하는 셈법이다. 우리가 흔히 쓰는 것은 10진법이고, 컴퓨터 과학에서는 주로 2진법을 쓴다.
  • 임의의 자연수 a와 n≥2에 대해 다음과 같이 표현할 수 있으며, 이 표현은 존재성existence과 유일성uniqueness을 가진다.
a=aknk+ak−1nk−1+⋯+a1n+a0,0≤a0,a1,⋯,ak<n, ak≠0
  • 이를 a=akak−1⋯a1a0―(n)로 표기하며, 10진법은 아래첨자를 생략한다.
  • 진법 변환은 변환하려는 수를 목표 진법 수로 나누어 가며 생기는 나머지를 역순으로 나열해 수행한다. 예를 들어 10진수 345를 7진법으로 바꾸는 과정은 다음과 같다.
345÷7=49 ⋯ 249÷7=7 ⋯ 07÷7=1 ⋯ 01÷7=0 ⋯ 1⟹345(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)")

지수와 로그 ​

  • 임의의 수 A를 N번 거듭해 곱한 것을 AN으로 표기한다. 지수exponent는 다음 성질을 가진다.
XAXB=XA+B,XAXB=XA−B,(XA)B=XABXN+XN=2XN≠X2N,2N+2N=2N+1
  • 로그log는 지수의 역연산으로 다음과 같이 정의된다.
XA=B ⇔ logX⁡B=A
  • 컴퓨터 과학에서는 밑을 2로, 자연과학·공학에서는 e≈2.718(자연로그 ln)을, 경제학·일상에서는 10(상용로그)을 약속한다.
  • 정의로부터 다음 성질이 유도된다.
logA⁡B=logC⁡BlogC⁡A (A,B,C>0, A≠1),log⁡AB=log⁡A+log⁡B,log⁡AB=log⁡A−log⁡Blog⁡(AB)=Blog⁡A,log⁡X<X (∀X>0),log⁡1=0, log⁡2=1, log⁡1024=10 (밑 2)

합 연산과 곱 연산 ​

  • 합 연산자 ∑와 곱 연산자 ∏는 다음과 같이 정의된다.
∑k=ijak=ai+ai+1+⋯+aj,∏k=ijak=aiai+1⋯aj
  • 두 연산자는 각각 다음 성질을 가진다.
∑k=1n(ak±bk)=∑k=1nak±∑k=1nbk,∑k=1ncak=c∑k=1nak,∑k=1nc=cn∏k=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가 속하면 a∈A, 아니면 a∉A로 쓴다. 모임collection·족family은 집합의 동의어이다.
  • {x:⋯}는 조건 ⋯을 만족하는 모든 x의 집합이며, 원소가 없는 집합을 공집합empty set ∅이라 한다.
  • A의 모든 원소가 B의 원소이면 A를 B의 부분집합subset이라 하고 A⊂B로 표기한다.
A⊂B ⇔ (x∈A⇒x∈B, ∀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은 다음과 같다.
A∪B={x:x∈A∨x∈B},A∩B={x:x∈A∧x∈B},B∖A={x:x∈B∧x∉A}
  • A∩B=∅이면 두 집합은 서로소disjoint set이며, A⊂X일 때 X∖A를 A의 여집합complement이라 한다.

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

분배 법칙distributive law:

A∪(B∩C)=(A∪B)∩(A∪C),A∩(B∪C)=(A∩B)∪(A∩C)

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

X∖(A∪B)=(X∖A)∩(X∖B),X∖(A∩B)=(X∖A)∪(X∖B)
  • 색인 집합index set I에 대해 색인indexed된 모임 {Ai:i∈I}의 합집합·교집합은 다음과 같이 일반화된다.
⋃i∈IAi={x:∃i∈I s.t. x∈Ai},⋂i∈IAi={x:∀i∈I, x∈Ai}
  • 수 체계는 자연수natural number N(페아노 공리계Peano's axioms로 정의)에서 시작해 확장된다.
N0=N∪{0},Z={x:n±x=0, ∀n∈N0},Q={x:x=mn, m,n∈Z, n≠0}
  • 무리수irrational number I는 정수비로 나타낼 수 없는 수이고, 실수real number R=Q∪I이며, 허수단위 i≡−1에 대해 복소수complex number C={a+bi:a,b∈R}이다.
  • 볼록 집합convex set A는 tx+(1−t)y∈A (∀x,y∈A, 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+(n−1)d,등비수열 an=arn−1,조화수열 an=a1+a(n−1)d
  • 피보나치 수열Fibonacci sequence은 점화식과 일반항으로 다음과 같이 주어진다.
F1=1, F2=1, Fn+2=Fn+1+Fn,Fn=15[(1+52)n−(1−52)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, ∀n∈N. ◼

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

복소수 ​

  • 복소수 z=a+bi (a,b∈R, i≡−1)에서 ℜ(z)=a를 실수부, ℑ(z)=b를 허수부라 한다. 켤레복소수complex conjugate와 절댓값absolute value은 다음과 같다.
z¯≡ℜ(z)−iℑ(z)=a−bi,|z|≡zz¯=a2+b2
  • 복소수의 덧셈과 곱셈은 다음과 같이 정의되며, 둘 다 결합법칙associative property·교환법칙commutative property을 만족하고 항등원·역원이 존재한다(곱셈의 역원 z−1=z¯/|z|2).
(a+bi)+(c+di)=(a+c)+(b+d)i,(a+bi)(c+di)=(ac−bd)+(ad+bc)i
  • 복소수는 행렬 표현matrix representation으로도 나타낼 수 있다. 특히 단위허수 i의 행렬 표현은 회전 행렬rotation matrix과 같다.
z=a+bi ⟷ (a−bba),i ⟷ (0−110)=(cos⁡π2−sin⁡π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)이며(일반적으로는 arctan⁡2를 사용), 여기서 오일러 공식Euler's formula을 얻는다.
eix≡cos⁡x+isin⁡x,(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