[파이썬] 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) 입니다.
# 계수가 복소수의 범위까지 확대되었다.

Write DXF Line

글쓰기 테스트3

아래 글은 Edge에서 작업한 내용임

○ 노후 건축물의 구조 안전성 기반 그린 리모델링 선별기준 개발을 통한 미래 발생 가능 재난(지진, 에너지 대란 등)에 대한 선제적 대응 효과 → 잠재적 재난에 의한 인명 및 재산 피해 최소화

글쓰기 테스트 2

아래 내용은 크롬에서 복사하여 붙인 내용임

○ 노후 건축물의 구조 안전성 기반 그린 리모델링 선별기준 개발을 통한 미래 발생 가능 재난(지진, 에너지 대란 등)에 대한 선제적 대응 효과 → 잠재적 재난에 의한 인명 및 재산 피해 최소화

글쓰기 테스트

아래 내용은 firefox에서 복사하여 붙인 내용임.

○ 자연재해(지진) 등을 고려한 그린 리모델링 대상 기존 건축물 표준모델 개발

○ 건물에너지 해석을 위한 최신 표준기상데이터 개발

○ 건물에너지 성능 시뮬레이션에서 활용 가능한 태양광발전시스템 평가방법론 구축

○ BIM 기반 구조/에너지 성능평가 기술 분석 및 활용방안 마련

[RPi]MCP3008 vs MCP3208

라즈베리파이의 GPIO에는 아날로그 신호를 처리하는 것이 없다. 그래서 아날로그 신호를 내보내는 대부분의 센서를 처리하기 위해서는 ADC(analog-to-digital converter)가 필요하다. ADC 중에는 MCP3008와 MCP3208 등이 있다. 라즈베리파이와 ADC 간의 통신은 SPI를 이용한다.

MCP3008, MCP3004, MCP3208, MCP3204

다음 웹페이지에는 MCP3008, MCP3004, MCP3208, MCP3204 에 대한 데이터시트에 가까운 정보를 제공하고 있다.

Raspberry PI – Adding analogue inputs using MCP3008, MCP3004, MCP3208, MCP3204

그리고 여기는 spidev 라이브러리를 이용하였다. ADC에서 읽은 값이 해상도가 10비트이면 0~1023, 12비트이면 0~4095라는 것을 알 수 있다.

spidev 라이브러리를 이용하여 https://kalten.tistory.com/46 처럼, 통신 여부를 검토하였더니 잘 작동하지 않아서 RPi.GPIO 라이브러리를 이용하였다.

MCP3008에서 센서의 신호처리(SPI통신)

다음은 신호처리를 위해 작성한 파이썬 코드이다. RPi.GPIO 라이브러리를 이용하였다.

MCP3208에서 센서의 신호처리

SPI at Rasberry Pi GPIO Pinout

SPI통신을 위한 라즈베리 파이의 GPIO 핀 배치는 다음과 같다.

SPI – Serial Peripheral Interface at Raspberry Pi

참고문헌

https://github.com/RaresPlescan/daisypi/blob/master/sense/mcp3208/adc_3.py