Python/2.7 information

수학 관련 모듈 sympy, scipy

qkqhxla1 2015. 9. 7. 20:42

sympy와 scipy는 수학 식 관련해서 쓰기에 좋을 것 같다.

sympy : http://docs.sympy.org/dev/modules/solvers/solvers.html

scipy : http://www.scipy.org/


두개의 방정식이 있을때 그것의 해를 파이썬으로 어떻게 구하느냐. 가 목적이어서 찾았는데 스택오버플로우에 이런 좋은 예시가 있었다. 

http://stackoverflow.com/questions/8739227/how-to-solve-a-pair-of-nonlinear-equations-using-python


혹시 모르니 예제도 복사해놓음.


scipy예제.

x+y^2 = 4

e^x+ xy = 3

from scipy.optimize import fsolve
import math

def equations(p):
    x, y = p
    return (x+y**2-4, math.exp(x) + x*y - 3)

x, y =  fsolve(equations, (1, 1))

print equations((x, y))


sympy예제.

미지수가 두개인 일차방정식

# -*- encoding: cp949 -*-
from sympy import Matrix, solve_linear_system
from sympy.abc import x, y
#Solve the following system:

#   x + 4 y ==  2
#-2 x +   y == 14
system = Matrix(( (1, 4, 2), (-2, 1, 14)))
print solve_linear_system(system, x, y)

대충 여러번 삽질해보고 에러메시지를 보면.... scipy의 fsolve는 http://qkqhxla1.tistory.com/159 요기서 했던 것과 마찬가지로 역행렬 방법을 이용해서 식의 값을 구하는것 같다.(종종 싱귤러행렬 에러가 뜨는걸로봐서..) sympy는 scipy의 예제에서는 싱귤러 행렬 에러가 났던것이, sympy의 예제에서는 에러가 안 나는걸로 보아 역행렬 방법이 아니라 다른 방법을 이용하는것 같다. 


대충 결과들을 도출해보면 해를 근사값으로 구할 경우에는(1.234234~처럼) scipy의 역행렬을 이용한 방법을 해야 할것 같고, 단순히 미지수가 여러개인 1차방정식이면 아래의 sympy의 예제를 이용하면 될것같다. 역시 수학 관련된 모듈은 잘 안써봐서 잘 이해했는지는 모르겠다. 수정할점이나 추가할점은 나중에 추가 예정.


numpy도 있는데 이건 행렬에 특화된 모듈같다.

'Python > 2.7 information' 카테고리의 다른 글

지도 모듈 (구글맵, folium 등등.)  (0) 2015.12.24
Hello world 난독화하기.(번역)  (1) 2015.11.28
poster module (upload image or file)  (0) 2015.08.24
pyexiv2 module (read and modify exif)  (0) 2015.08.23
selenium  (0) 2015.08.09