녕녀기의 실험일지

[ Python ] sympy 라이브러리를 이용한 방정식 해 구하기 본문

-- Data --/- Python -

[ Python ] sympy 라이브러리를 이용한 방정식 해 구하기

녕녀기 2023. 7. 28. 13:19

본문으로

안녕하세요. 녀기입니다.

 

빅분기 공부를 하다가

 

중간에 다른 길로 빠지는 경우가 가끔 있습니다.

 

(길을 잃었다~~~ 어딜 가야 할까♬

 

절대 자주가 아닙니다!!ㅠㅠ)

 

다른 길에서 방황하던 중 갑자기 든 생각

 

'방정식을 풀어주는 라이브러리도 있을까?'

 

역시 내가 필요하다고 생각하는 것은 이미 다 개발돼 있죠ㅋㅋㅋㅋㅋ

 

지금부터 소개하겠습니다~


sympy

지수방정식 하나 생각해 봅시다.

 

(0.97)^n = 0.5 를 만족하는 n을 구하고 싶습니다.

 

원래 풀이 방법대로라면

 

log(0.97^n)  = log0.5

 

nlog0.97 = log0.5

n = log0.5 / log0.97

 

와 같은 식으로 구할 수 있습니다.

 

n의 값은

# 방정식 과정을 통한 n 값 구하기

import math

result_n = math.log10(0.5) / math.log10(0.97)

print("방정식을 통한 n 값 = ",round(result_n, 3))

>>> 방정식을 통한 n 값 =  22.757

22.757 정도 나오는 군요.

 

이를 sympy를 통해 구해보겠습니다.

import sympy
from fractions import Fraction

# 횟수를 n이라 하자

n = sympy.symbols("n")

# (0.97^n) = 0.5를 만족하는 n 값은?
# fractions의 Fraction 메서드는 유리수 계산을 정확하게 해줄 때 사용 → 분자와 분모로 나눠 계산해 줌 → string 형태로 써도 가능

f = sympy.Eq(Fraction('0.97')**n, 0.5)

other_result = sympy.solve(f)

print("sympy를 이용해 구한 n 값 = ",round(other_result[0], 3))

>>> sympy를 이용해 구한 n 값 =  22.757

하나씩 살펴보도록 하죠.

 

  • symbols : 변수를 미지수로 표현합니다. 미지수가 두 개일 때는
    m, n = sympy.symbols('m n') 등으로 표현합니다.
  • Eq : 메서드 안에 파라미터 두 개가 같다는 방정식을 만듭니다. 
  • solve : Eq를 만족하는 답을 구하고 리스트 형태로 반환합니다. 미지수가 2개 이상인 연립이라면 딕셔너리 형태로 반환합니다.

미지수를 구하기 위한 과정을 생략하고 바로 답을 구할 수 있습니다!!

 

어디에 써야 할지는 모르겠지만, 써야 한다면 유용하게 써 먹을 수도 있을 것 같습니다.


딴 짓을 하는 과정에 알아내서 그런지 뭔가 더 뿌듯함이 있네요(?)

 

아무튼 이렇게 딴 짓 하다가 알게 된 것도 꾸준히 포스팅하겠습니다.

 

이제는 다시 돌아가야죠....

 

(그 다음에...돌아오자~~씩씩하게~~♬)

 

다음에 뵙도록 하겠습니다.

 

그럼 저는 뿅!

Comments