파이썬으로 벡터장을 그려야 하는 경우가 있다. 심심하면 지도를 놓고 위에 풍향과 풍속을 그려볼 수도 있다. (기상청에서 데이터 받아서 그려보셔도 됩니다...정 심심하시면요...)


메뉴얼과 구글링을 통해서 더 깊이있는 방법들을 배울 수 있지만 가장 간단한 코딩은 아래와 같다.


import matplotlib.pyplot as plt

import numpy as np


x = np.empty((10,10), float)

y = np.empty((10,10), float)


u = np.empty((10,10), float)

v = np.empty((10,10), float)


for i in range(10):

    for j in range(10):

        x[i][j] =  i / 10.0

        y[i][j] =  j / 10.0

        u[i][j] =  i / 10 * 2 

        v[i][j] =  j / 10 * 2


print(x, y, u, v)


plt.quiver(x,y,u,v, angles='xy', pivot='middle')

plt.ylim(0,1.1)

plt.xlim(0,1.1)

plt.grid('on')

plt.show()


코드의 대부분은 그냥 정의하는거고....
벡터장을 그려주는 함수는 plt(matplotlib.pyplot)의 quiver라는 함수이다. 여기서 x, y는 벡터의 위치를 나타내며 u,v는 벡터의 성분을 말한다. angle은 벡터의 각도를 어디서부터 측정할꺼냐 그런 내용인데(아닐 수도 있음) 'xy'로 해야 우리가 상상하는 결과가 나온다. pivot은 벡터를 회전시킬 때 꼬리를 잡을지 머리를 잡을지 그것도 아니면 중간을 잡을지에 대한 옵션이다. 더 다양한 옵션은 공식 홈페이지를 참고하시고....

사실 mash를 이용해 u, v를 만들어도 된다. 여기서는 생략...

결과는 다음과 같다.



메스메티카에서는 쉽게 할 수 있는데 WolframAlpha에서 Streamplot이나 vectorplot처럼 함수를 부르면 벡터장을 그려주지 않는다. 어쩌다 발견한건데 더 좋은방법이 있는지는 모르겠음.


1. http://www.wolframalpha.com 에 들어가서 vector plot 이라고만 검색한다.


2. 그럼 예제가 하나 나오는데 그 위에 보면 옵션박스들이 있다!

Vector field에 원하는 함수를 넣고 나머지에는 그릴 구간을 정해준다.


그리고 Enter를 치면 다시 그림을 그려준다!


이걸로 그려볼 수 있게 되었음ㅋ

'Study > Mathematics' 카테고리의 다른 글

levi-civita  (0) 2010.03.11

+ Recent posts