글쓴이 보관물: snowall

snowall에 대하여

onecup, research department

파이썬의 어려움

난데없이 1주일만에 파이썬 공부해서 GUI 프로그래밍을 해야 하니 참으로 어려운 일이다. C나 VB와 비교할 때, type이 실행시에 지정되니 편한 사람도 있겠지만 이것때문에 계속해서 헷갈리고 있다.

파이썬의 클래스는 말만 클래스지 완전한 클래스가 아니다. 심지어, 클래스 내부에서 참조할 때에도 항상 self를 붙여야 하고, 클래스 내부의 메소드를 정의할 때 항상 self를 인자로 넘겨받아야만 한다. 다시말해서, 메소드를 호출 할 때, 클래스 내부에서 사용하는데도 불구하고 self.methodName(a, b)라는 형식으로 self를 참조해야만 한다.



[각주:

1

]



VB는 써도 되지만, 안써도! 된다.

그리고.

myBmp = wx.Bitmap.LoadFile(filename, filetype)

이런식으로 불러올 수 없다. 당연하다면 당연한건데, 쓰다보면 불편하다. 선언도 없는데…

myBmp = wx.EmptyBitmap(1,1)

myBmp.LoadFile(filename, filetype)

이런식으로 가짜로 선언(?)한 후에 사용해야 한다.

  1. self는 VB에서의 me, C++에서의 this처럼 자기가 소속된 클래스를 가리키는 이름이다.

    [본문으로]

에너지 절약


h


ttp://www.newsis.com/ar_detail/view.html?pID=10400&cID=10401&ar_id=NISX20110610_0008426533

등유 가격보다 전기요금이 더 싸면, 당연히 “비용 절감” 관점에서는 전기를 더 사용하게 되어 있다. 즉, 현재 상황에서 “온실가스 배출량 줄이기”와 “비용 줄이기”는 모순의 관계에 있다.

비용절감을 외치지 말든가, 등유가격을 더 낮추든가, 전기요금을 올리든가.

웬만하면 서민을 위해서 등유 가격을 낮추자. 정부가 원하는 것은 “전기요금 현실화”라는 이름으로 전기요금을 올리는 것이겠지만. 비용절감을 포기할 생각은 없나?

라플라스 방정식을 컴퓨터로 풀기

라플라스 방정식은 아주 유명한 2차 편미분 방정식 중의 하나이다. 라플라시안 연산자는 n차원 공간에서 잘 정의된 어떤 함수 f를, x로 두번, y로 두번, … 등등 같은 방향으로만 2번 미분하여 그 편도함수들을 모두 더한 함수로 보내는 연산자이다.

라플라시안 연산자를 L이라고 하자. 그럼 L[f] = 0 을 만족하는 함수 f를 찾는 것이 라플라스 방정식을 푸는 방법이다. 만약 1차원 라플라스 방정식이라면, 이 문제는 2번 미분해서 0이 되는 함수이므로 직선의 방정식을 찾으면 되고, 직선을 유일하게 결정하기 위해서 이 직선이 지나는 점 2개를 결정하면 된다는 사실을 알 수 있다.

2차원 라플라스 방정식이라면, 이제 문제가 심각해 진다. 가장자리가 점이 아니라 곡선이 된다. 심지어 n차원 라플라스 방정식이라면 n-1차원의 초곡면이 가장자리를 이루게 된다. 이것을 어떻게 풀 것인가?

일단, 적어도 하나의 해가 있다고 가정하자. 그냥 있다고 치자. 그럼, 만약 어떤 라플라스 방정식에 대해서 2개의 해를 찾을 수 있을까? 가령 f와 g가 둘 다 라플라스 방정식의 해라고 하자. 그럼 L[f]=0이고 L[g]=0이다. 라플라시안 연산자는 선형 연산자이므로 당연히 L[f-g]=0이 성립한다. 그런데 f-g=h라고 가정해보자. f와 g는 완전히 임의의 함수이므로 경계를 포함한 모든 점에서 h=0일 수밖에 없다. 따라서 f=g이다. 우리가 해를 여러가지 방법으로 찾아도, 주어진 경계조건을 만족하는 해는 하나밖에 없다는 걸 알 수 있다. 다시 말해서, 수단과 방법을 가리지 않고 하나를 찾으면 그게 바로 정답이라는 것이 확실하다. 이에 대한 엄밀한 증명은 생략한다.

그렇다면, 이것을 어떻게 컴퓨터로 풀 것인가?

이에 대해서 Relaxation method라는 것이 있다. 라플라스 방정식을 통째로 가우스 적분 하게 되면, 그 내부에서의 함수값이 그 주변에서의 함수값들의 평균값과 같아지는 성질을 이용한 것이다. 즉, 모든 점에서 라플라스 방정식이 만족될 때 까지 계속해서 평균을 내면서 진행하는 것이다.

가령, 격자를 9칸으로 잘라서

123

456

789

라고 해 보자. 그럼, 5번에 해당하는 값 f[5] 는 모르니까 처음에 0이라고 하자. f[2]=1, f[4]=5, f[6]=3, f[8]3이라고 해 보자. 그럼, 만약 저 9칸의 공간에 주어진 함수 f가 라플라스 방정식을 만족한다면, f[5]=3이어야만 한다. 그리고 그렇게 찾아낸 f[x]는 반드시 그 라플라스 방정식의 해이다. 수단과 방법을 가리지 않고 어떻게든 찾아내기만 하면 되니까. 이 방법을 더 큰 공간으로 확장해서 풀게 되면 문제를 잘 풀 수 있게 된다. 이 방법을 반복적으로 적용해서, 경계조건으로 주어진(=정해진) 값들은 계속 고정시켜 놓고서, 나머지 부분의 값들을 계속해서 평균을 내면서 바꿔가다보면, 경계조건의 값이 사방으로 퍼져 나간다. 하지만 충분히 여러번 반복하다보면, 거의 값이 바뀌지 않는 정도로 수렴하게 되는데, 이때가 바로 “답”이 된 상태이다. 이제 함수값들을 잘 읽어다가 “정답”이라고 생각하면 된다. 모든 점에서 “근처값들의 평균과 그 안에 있는 함수값이 같은” 상태가 되었기 때문에, 이 상태는 라플라스 방정식을 만족하는 상태이다.

그리고 앞에서 말했듯이, 아무튼 답을 찾기만 하면 그 답이 정답이 맞다.


http://tutorial.math.lamar.edu/Classes/DE/LaplacesEqn.aspx



http://rugth30.phys.rug.nl/potentiaal_eng/relaxatiemethode_hoe.htm

답을 찾기 위해 수단과 방법을 가리지 않는 것이 바로 수학의 정신이랄까.

간만에 유입경로 분석


http://snowall.tistory.com/1077

2년전에 했던 유입 경로 분석을 다시 해보자.

2008년 11

2011년 6

위에는 2008년 11월, 아래는 2011년 6월까지의 그래프이다.

참고로, 위에는 선형 스케일이고 아래는 로그 스케일이라는 점에 유의하자.

일단, 다음,네이버, 구글이 1~3등인건 변함이 없다. 네이버가 구글보다 앞서는건 같은데, 네이버가 1등, 구글이 2등으로 올라서고 다음이 3등으로 내려왔다. 우리나라에서 인기있는 포털 순위 그대로인 것 같은 느낌이다.

야후는 4등 그대로다.

전반적으로, 다음, 네이버, 구글에서 들어오는 숫자는 4배 정도 증가했고, 그 외에는 거의 비슷한 수준을 유지하고 있다.

티스토리는 대체로 3천건 정도로 꾸준하다. 이올린은 뭐 망했으니 당연히 없어지는 거고. ExtraD님의 블로그에 댓글 열심히 달 때는 리퍼러에 나올 정도로 많이 왔었는데 요새는 별로 없다보니 유입경로에서 사라졌다.

kldp 활동을 좀 많이 했더니 유입자수가 많이 늘었다. 흥미로운건, 수시아님의 블로그(docean.egloos.com) 유입자가 꽤 된다는 건데, 이건 수시아님의 “찌질열전” 중 이재율에 관한 글로부터 유입되는 것으로 분석된다. (

http://docean.egloos.com/4669937

이 글이다)

문득…

다음주까지 실험 결과를 분석하기 위해서 어떤 프로그램을 만들어야 하는데, 이번에도 기획, 개발, 테스트, 디버그를 나 혼자 한다. 다행(?)히도 사용은 다른 사람들이 할 예정이다. 왜 이게 다행이라는 생각이 드는건가.

프로그램의 핵심 알고리즘과 핵심 코드는 만들어 놨는데, 이제 이걸 사용해서 UI를 예쁘게 만들고 사용하기 편하게 원하는 기능을 집어넣는게 문제다.

내가 프로그램 만드는 것도 할줄 알고, 좋아하고, 만들고 싶은건 맞는데, 코딩하다보면 문득 – 내가 왜 하고있지? – 하는 생각이 든다. 사실 그래서 “코드를 쓰면 작동하는” VB.net을 좋아하긴 했지만. VB.net은 개발툴이 유료니까. 이제 그걸 Python으로 바꾸려고 하는데, 정말 쉽지가 않다. 그리고 마감은 바로 다음주. 두둥!

물론 개발에 올인할 수 있는 여건이 안된다. 이것 말고도 “나밖에 할 수 없는” 일들 몇가지의 마감이 바로 다음주. 두둥!

그렇다고 내가 미친듯이 열심히 하는건 아니지만. 이번주부터는 일단 열심히 해야겠다.

MFC, VB.net, wxPython

윈도우즈용 GUI프로그램을 만드는 난이도는 MFC가 가장 어렵고, VB.net이 가장 쉽다. wxPython은 그 사이에 있다.

(주관적 평가임.)

VB.net은 그림 그리고 클릭해서 그 부분이 처리할 코드를 쓰면 된다.

wxPython은 그림을 코딩하고 그 부분이 처리할 코드를 쓰면 된다.

MFC는 그림을 코딩하고 그 부분이 처리할 코드를 쓰면 되는데, C/C++로 써야 한다.

VB.net이 과학기술계산용으로 강력한 라이브러리를 갖고 있었으면 좋았겠지만, GSL이나 numpy같은 것들이 VB용으로 나오질 않았다. (.net Fx 위에서 돌아가는 것 자체가 이미 계산용으로서는 성능이 나오지 않는다는 거지만.)

그래서 요새는 wxPython을 쓰는 중. 리눅스에서도 그냥 돌아가니까 더 맘에 든다.

MFC랑 VB.net은 그냥 돌아가지 않으므로 곤란하다. (리눅스에서 내가 지금 만드는 프로그램을 돌릴 일은 없겠지만)

사소한 개념 오류


http://twitter.com/#!/sci_bot/status/77291175178018816

과학봇 트윗을 구경하다가

“공을 휘어던질 수 있는 것은 베르누이 정리 때문입니다”

라는 트윗을 보았다.

틀렸다.

정확히 말하려면, “공을 휘어지도록 던질 수 있는 것은 공기와 공의 상호작용 때문이며, 이 상호작용을 베르누이 정리를 사용하여 잘 설명할 수 있다.” 라고 표현해야 한다.

이와 비슷한 오류를 핵무기와 원자력 에너지의 발달사에서 가끔 볼 수 있는데, “아인슈타인의 물질-에너지 정리에 의해 우리는 엄청난 원자력 에너지를 사용할 수 있다”는 표현이 가끔 등장한다. 이것도 틀렸는데, 정확히 말하면, 우리는 원래 원자력 에너지를 사용할 수 있었고, 그것을 아인슈타인의 공식이 잘 설명하는 것 뿐이다.

이론은 어디까지나 세상을 설명하는 방법 중의 하나이지, 그 이론 때문에 세상이 작동하는 것이 아니다. 초끈 이론도 그렇고 뉴턴 역학도 마찬가지다.