[파이썬] Matplotlib에 한글 표현하기

파이썬에서 그래프를 그릴 때 많이 사용하는 모듈이 Matplotlib일 것이다. 이 모듈을 사용할 때, 한글을 나타내려면 다음과 같이 하면 된다. 특히 맥을 사용할 경우에 유용하다.

import matplotlib.pyplot as plt #그래프 작성용

plt.rcParams["font.family"] = 'AppleGothic' # 맥에서 한글 출력
plt.rcParams['axes.unicode_minus'] = False  # 한글폰트 마이너스 기호 문제

[python] 삼각함수의 역함수 arccos, arcsin

numpy를 최대한 활용할 수 있는 함수를 짠다. 단일 변수나 numpy 배열로도 계산을 할 수 있어야 한다.

Numpy Array의 연산은 Broadcast(element-wise)연산으로 이루어진다. Array간의 연산은 각 요소별 연산이 이뤄지며 연산 함수 또는 연산자를 이용한다. Array와 Scalar간의 연산은 Scalar 값이 Array 각 요소별로 계산한다.

아니나 다를까 비베와 마찬가지로 numpy의 arcsin, arccos 함수에서 문제가 발생했다. 삼각함수에 의한 연산을 하다보면, 인자의 값이 -1보다 작거나, 1보다 큰 경우가 발생한다. 이렇게 되면 당연히 arcsin이나 arccos에서는 오류가 발생한다. 이를 해결하기 위하여 강인한 invsin(), invcos() 함수를 짰다.

def invsin(x):
    """
    robust arcsin function
    이론적 정의역 : -1 <= x <= 1
    실제 정의역 : -2 < x < 2
    치역 :-pi/2 <= y <= pi/2
    """
    arc_sin = np.where(np.abs(np.fix(x))==1, np.sign(x) * np.pi / 2, 
                       np.arctan(x / np.sqrt(-x * x * (np.abs(np.fix(x))!=1) + 1)))

    return arc_sin

def invcos(x):
    """
    robust arccos function
    이론적 정의역 : -1<= x <=1
    실제 정의역 : -2 < x <2
    치역 : 0 <= y <= 2*pi
    """
    arc_cos = np.where(np.abs(np.fix(x))==1, (np.pi * (x<0)),
                    np.arctan(-x / np.sqrt(-x*x*(np.abs(np.fix(x))!=1)+1)) + np.pi/2)
    return arc_cos

[python] 이차방정식 풀기

파이썬으로 이차방정식을 풀어보자.

놀란 점 : 파이썬은 복소수까지 기본적으로 지원한다.

#quadraticeqn.py 
# 이차방정식의 해를 구한다.
def solve_quadratic_eqn(a, b, c):
    d = (b**2) - 4 * a * c
    root_d = d ** 0.5
    x1 = (-b + root_d)/(2*a)
    x2 = (-b - root_d)/(2*a)
    return x1, x2
#end of def

########
a = complex(input("2차항의 계수를 입력하시오-> "))
b = complex(input("1차항의 계수를 입력하시오-> "))
c = complex(input("상수항을 입력하시오-> "))
x1, x2 = solve_quadratic_eqn(a,b,c)
print ("{} 또는 {} 입니다.".format(x1,x2))

쉘 또는 명령어 창에서 실행한 결과는 다음과 같다.


% python3 quadraticeqn.py 
2차항의 계수를 입력하시오-> 1
1차항의 계수를 입력하시오-> 1
상수항을 입력하시오-> 1
(-0.49999999999999994+0.8660254037844386j) 또는 (-0.5-0.8660254037844386j) 입니다.

% python3 quadraticeqn.py
2차항의 계수를 입력하시오-> 1+3j
1차항의 계수를 입력하시오-> 2+1j
상수항을 입력하시오-> 5
(-0.9439335302606269-0.7407288955208566j) 또는 (0.44393353026062693+1.2407288955208566j) 입니다.
# 계수가 복소수의 범위까지 확대되었다.