Grammer

파이썬으로 복소수 표현하기!

JackSmith 2023. 4. 22.

아래 문제를 풀어보면서 복소수의 개념을 짚고 가도록 하겠습니다!

 

"복소수 공간에서 x+yi 복소수는 (x,y)의 위치에 있는 점으로 표현된다. 이 점을 원점기준으로 각도 a(라디안으로 표시)만큼 회전시키는 방법은 cos a + (sin a)j를 곱하면 되는 것으로 알려져 있다."

문제1) 어떤 좌표 (1,2)가 복소수 형태인 1+2j로 주어지면, 그림과 같이 이 좌표를 반시계 방향으로 90도 회전시키는 방법을 파이썬의 복소수 곱으로 구하여 아래와 같이 출력해보라

 

실행결과>

회전하기 전 : (1+2j)

90도 회전한 후: (-2+1j)

 

일단, 파이썬 으로 복소수를 표현하는 방법에 대해서 짚고 가겠습니다.

복소평면에서의 (1,1)의 표현은 다음과 같이 j앞에 반드시 계수(coefficient)가 하나 붙어야 합니다.

(설령 (1,1)이라서 1+j라 표현할 수 있을지라도 code상으로는 1+1j라 표현을 해주어야 합니다.)

print(type(1+j))  #-> error발생, j를 고유의 변수로서 취급함
print(type(1:1j)) #-> complex number로 인지함
print(type(j))    #-> error발생, j를 고유의 변수로서 취급함
print(type(1j))   #-> complex number로 인지함

기본적으로 아래와 같이 설정을 해줄 수 있겠죠?

before = 1+2j
print("회전하기 전 : ", before)

이제 90도를 회전시켜주기 위해 90도 만큼을 복소수로 표현한 후 곱해주도록 하겠습니다.

after = before * (math.cos(0.5*math.pi) + math.sin(0.5*math.pi)*1j)
print("90도 회전한 후 : ", after)

이렇게 하고 실행을 해보겠습니다.

원하는 결과가 나왔지만, 뒤에 쓸데없이 많은 소수점이 붙어서 한번 필터링을 해주도록 하겠습니다.

※파이썬 round함수로 소수점 관리하기
syntax: round( {반올림하고자 하는 값} , {자릿수})

ex)
특수케이스)print(f"round(1.23456, 0)", round(1.23456, 0))  #-> 1(정수출력)
print(f"round(1.23456, 0)", round(1.23456, 0))  #-> 1.0 (실수출력)
print(f"round(1.23456, 1)", round(1.23456, 1))  #-> 1.2
print(f"round(1.23456, 2)", round(1.23456, 2))  #-> 1.23

위 개념을 이용하여 다시 코드를 작성해보겠습니다.

import math

before = 1+2j
print("회전하기 전 :", before)

after = before * (math.cos(0.5*math.pi) + math.sin(0.5*math.pi)*1j)
print("90도 회전한 후 :", after)

after = after.real + round(after.imag) * 1j
print("90도 회전한 후 (filtered) :",after)

실행결과>

 

문제2) 어떤 좌표 (1,2)를 반시계방향으로 30도 회전하여라. 그 결과를 복소수 형태로 출력하여라.

(힌트: cos 30º = sqrt(3)/2, sing 60º = 1/2)

실행결과>

회전하기 전 : (1+2j)

30도 회전한 후: (-0.1339745962155614+2.232050807568877j)

 

 

이번에는 30도를 회전시켜주기 위해 30도 만큼을 복소수로 표현한 후 곱해주도록 하겠습니다.

(단, 이번에는 반대방향임을 고려하여 -30도 표현해주도록 하겠습니다.)

import math

before = 1+2j
print("회전하기 전 :", before)

#after = before * (math.cos(-math.pi/6) + math.sin(-math.pi/6)*1j)
after = before * ((3**0.5)/2 + 0.5 * 1j)
print("-30도 회전한 후 :", after)

after = round(after.real, 3) + round(after.imag,3) * 1j
print("-30도 회전한 후 (filtered) :",after)

실행결과>

 

지금까지 예제를 통해 파이썬으로 복소수를 구현하는 방법에 대해 알아보았습니다!

 

참고 사이트>

https://velog.io/@yunhlim/Python-%EB%B3%B5%EC%86%8C%EC%88%98complex-%ED%91%9C%ED%98%84

 

[Python] 복소수(complex) 표현

1. 사용 시 주의할 점 2. 허수부, 실수부 표현

velog.io

https://ehpub.co.kr/tag/python-%EB%B3%B5%EC%86%8C%EC%88%98-%ED%91%9C%ED%98%84/

 

Python 복소수 표현 – 언제나 휴일

안녕하세요. 언휴예요. 앞에서 Python에서 정수를 10진수, 8진수, 16진수로 표현하는 방법을 알아보았죠. 이번에는 Python에서 실수를 표현하는 방법과 복소수를 표현하는 방법을 알아보기로 해요.

ehpub.co.kr

 

댓글