TroubleShooting

RuntimeWarning: invalid value encountered in arcsin axes[1][1].plot(x, np.arcsin(x)) 해결방법

JackSmith 2023. 10. 10.

삼각함수인 sin() / cos() / tan() 에 대해 다음과 역삼각함수로 표현하는 파이썬 코드를 짜보았다.

 

코드>

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-np.pi, np.pi, 200)
fig, axes = plt.subplots(3,2, figsize=(8,12)) #2행 2열

axes[0][0].plot(x, np.sin(x))
axes[0][0].set_title('Sine_func()')

axes[0][1].plot(x, np.arcsin(x))
axes[0][1].set_title('ArcSine_func()')

axes[1][0].plot(x, np.cos(x))
axes[1][0].set_title('Cosine_func()')

axes[1][1].plot(x, np.arccos(x))
axes[1][1].set_title('ArcCosine_func()')

axes[2][0].plot(x, np.tan(x))
axes[2][0].set_title('Tangent_func()')

axes[2][1].plot(x, np.arctan(x))
axes[2][1].set_title('ArcTangent_func()')

plt.show()

결과>

 

이때 인터프리터가 안된거는 아니지만 다음과 같은 에러가 함께 출력이 되었다.

자세히 보면,

 

RuntimeWarning: invalid value encountered in arcsin  axes[1][1].plot(x, np.arcsin(x))
RuntimeWarning: invalid value encountered in arccos axes[1][1].plot(x, np.arccos(x))

 

즉 두 함수에 대해서 문제가 생긴건데, 설정한 값에 대해서 유효하지 않다는 뜻이다.

이때 설정한 값중에 의심을 해보았을때, 정의역을  (- Π에서 Π까지)로 두어서 문제가 된것이다.

'아크사인'과 '아크코사인'은 정의 자체가 정의역을 -1에서 +1사이로 두기 때문이다.

따라서 별도의 정의역을 설정해줄 필요가 있다.

 

따라서 다음과 같이 별도의 적의역을 설정해주었다.

x2 = np.linspace(-1, 1, 200)
axes[0][1].plot(x2, np.arcsin(x2))
axes[0][1].set_title('ArcSine_func()')
x2 = np.linspace(-1, 1, 200)
axes[1][1].plot(x2, np.arccos(x2))
axes[1][1].set_title('ArcCosine_func()')

이때 전체코드와 그 출력결과는 다음과 같다.

 

코드>

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-np.pi, np.pi, 200)
x2 = np.linspace(-1, 1, 200)
fig, axes = plt.subplots(3,2, figsize=(8,12)) #2행 2열

axes[0][0].plot(x, np.sin(x))
axes[0][0].set_title('Sine_func()')

axes[0][1].plot(x2, np.arcsin(x2))
axes[0][1].set_title('ArcSine_func()')

axes[1][0].plot(x, np.cos(x))
axes[1][0].set_title('Cosine_func()')

axes[1][1].plot(x2, np.arccos(x2))
axes[1][1].set_title('ArcCosine_func()')

axes[2][0].plot(x, np.tan(x))
axes[2][0].set_title('Tangent_func()')

axes[2][1].plot(x, np.arctan(x))
axes[2][1].set_title('ArcTangent_func()')

plt.show()

 

결과>

 

 

참고: https://sseong40.tistory.com/26

댓글