어떤 함수의 역함수를 수치적으로 만드는 다양한 방법 도입편
4739 단어 파이썬수학scikit-learnscipy
시도해 보는 방법은 다음 5가지입니다.
- 다항식 회귀 (scikit-learn)
- 지원 벡터 머신 (scikit-learn)
- Newton-Raphson법(SciPy)
- Akima 스플라인 (SciPy)
- 라이브러리에 의존하지 않는 구현
문제 확인
인볼루트 함수란?
인볼루트 함수는 기어의 치아 모양을 결정할 때 사용하는 함수이며, 그 정의 자체는 매우 간단합니다.
$f(\alpha) = tan\\alpha -\alpha$
기어를 계산하는 과정에서 이 함수의 역함수를 계산해야 합니다.
역함수란?
$inv\alpha = f(\alpha)$ 가 알려지면 $inv\alpha$ 에서 반대로 $\alpha$ 를 구해야 한다는 것입니다.
수학 기호를 사용하면 $\alpha = f^{-1}(inv\alpha)$ 로 간단히 표현할 수 있습니다만, 실제로 그 계산을 하는 것은 그다지 쉽지 않습니다.
(주의: $inv\alpha$ 는 $involute(\alpha)$ 의 의미로 사용하고 있습니다. inv는 inverse의 약어가 아닙니다.)
인볼루트 함수를 플롯해 봅니다.
작업은 Jupyter Notebook에서 실시합니다.
먼저 필요한 라이브러리를 가져옵니다.
벡터 데이터를 처리하기 위해 NumPy, 플롯을 위해 Bokeh를 가져옵니다.
Notebook
import numpy as np
from bokeh.plotting import output_notebook, figure, show
output_notebook()
인볼루트 함수를 정의합니다.
Notebook
def involute_ufunc(α):
return np.tan(α) - α
여기에서는 플롯 작업을 단순화하기 위해 NumPy를 사용합니다.
NumPy에는 배열(numpy.ndarray)의 모든 요소에 일괄적으로 함수를 적용할 수 있는 브로드캐스트라는 기능이 있습니다. math.tan 함수는 브로드캐스트를 지원하지 않으므로 브로드캐스트를 지원하는 numpy.tan 함수를 사용합니다.
involute_ufunc 함수는 $\alpha$ 인수로 배열을 받고 배열의 모든 요소에 인볼루트 함수를 적용하여 배열을 반환합니다.
Notebook
x = np.linspace(- np.pi / 4, np.pi / 4, 1000)
fig = figure(width=400, height=400)
fig.line(np.degrees(x) , involute_ufunc(x))
fig.xaxis.axis_label = '圧力角α (deg)'
fig.yaxis.axis_label = 'invα'
show(fig)
인볼루트 역함수는 이것의 세로축과 가로축을 바꾼 것입니다.
소스 코드
설명에 사용한 Notebook은 Gist에 업로드하고 있습니다.
인볼루트 함수 플롯 .ipynb
기사 링크
어떤 함수의 역함수를 수치적으로 만드는 다양한 방법 그 1 다항식 회귀편 - Qiita
Reference
이 문제에 관하여(어떤 함수의 역함수를 수치적으로 만드는 다양한 방법 도입편), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/alchemist/items/5c32f2c38f2db3ea74bd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)