2007年10月3日水曜日

巨人優勝!!!

僕の中で、すっかり忘れていた事があります。

全くの野球ファンでもないんですけど、巨人優勝です!!

おおお〜〜!!

http://www.hokkaido-np.co.jp/news/economic/52918.html

によると、巨人優勝セール実施中らしいですね〜!

しかし、テレビ地上波にて、優勝の試合を放映したテレビ局がなかったようですね。
どーりで、静かなわけか…。逆転サヨナラで優勝なんて劇的なのにね。

例の相撲部屋も刑事事件起訴間近だし(たぶん)。
辞めた人の証言がかなり生々しかったようですね、あそこのは。
全般としてスポーツ関連で明るいニュースがなかったんで、優勝でさわげばよいのにな
と思ってたり。

うーん、陰惨なニュースばかり年中聞いていると嫌になりますからね〜。

pythonでMatplotlib使おう!

では、今度は
f(x,y)=exp(-X*X-Y*Y)*(2*X)*(4*Y*Y-2)
をプロットしてみましょう。

----python---script---


import math
from pylab import *
def gaussfunc(x,y,a,b):
return exp(-a*(x)*(x)-b*(y)*(y))

dx, dy = 0.05, 0.05
x = arange(-3.0, 3.0, dx)
y = arange(-3.0, 3.0, dy)
X,Y = meshgrid(x, y)
Z = gaussfunc(X, Y,1.0,0.5)*(2*X)*(4*Y*Y-2)
im = imshow(Z,origin='lower' ,alpha=.9)
colorbar(im)

cset = contour(Z, arange(-2.0,2.0,0.2), origin='lower' )

clabel(cset,
inline=1,
fmt='%1.1f',
fontsize=10)

hot()
show()



----python script----


ちょっと不思議な絵になりましたね?


一応物理的な解釈をこの絵に持ち込むことも可能です。
量子力学での調和振動子の波動関数の解は基本的に(エルミート多項式)*ガウス関数とかけます。任意の多項式はエルミート多項式に分解出来る事を使うと、上の濃淡プロットは波動関数をプロットしていて、波動関数はn=3までの状態の重ね合わせで描けているというように。
エルミート多項式に関しては
http://homepage2.nifty.com/eman/quantum/oscillator.html
に詳しく書いてあります。
では、どういう重ね合わせなのかというと、
H0(x)=1
H1(x)=2x
H2(x)=4x^2-2
f0(x)=exp(-x^2)
f1(x)=2xexp(-x^2)
f2(x)=(4x^2-2)exp(-x^2)
とかけるので、
(2x)(4y^2-2)=H1(x)*H2(y)
よって、波動関数f(x,y)=f1(x)*f2(y)となります。
これは何を意味しているかというと、0や1や2は節の数を表しています。
x方向に1個の節で、y方向には2個の節をもった波動関数を描いて
振動している事が分かります。

2007年10月2日火曜日

またまたpythonで!

pythonで実はデータをプロットする事が出来ます。
Matlibplotというツールをインストールするとグラフを書くことが出来ます。

y=exp(-(x-0.5)^2)をプロットしてみましょう。
http://matplotlib.sourceforge.net/

----python---script---

import math
def gaussfunc(x,a,b):
return math.exp(-a*(x-b)*(x-b))
from pylab import *
x = arange(-2.0, 2.0, 0.01)
y=[]
for e in x:
y.append(gaussfunc(e,1.0,0.5))

plot(x, y, linewidth=1.0)
show()

----python script----

上のスクリプトを実行すると、したのようなグラフが出てきます。Gauss関数を変えられるようにしています。




次に三次元関数z=exp(-1.0*x^2-0.1*y^2)*(xy+x+y)をプロットしてみると…

----python---script---


import math
from pylab import *
def gaussfunc(x,y,a,b):
return exp(-a*(x)*(x)-b*(y)*(y))

dx, dy = 0.05, 0.05
x = arange(-3.0, 3.0, dx)
y = arange(-3.0, 3.0, dy)
X,Y = meshgrid(x, y)
Z = gaussfunc(X, Y,1.0,0.5)*(Y*X+X+Y)
im = imshow(Z,origin='lower' ,alpha=.9)

cset = contour(Z, arange(-2.0,2.0,0.1), origin='lower' )

clabel(cset,
inline=1,
fmt='%1.1f',
fontsize=10)
hot()
colorbar()
show()



----python script----

このグラフはしたのようなグラフになります。ちょっと奇妙ですね(^^;)


自動的に等高線が引けるので、二次元マップを書くときには便利です。
二次元平面を細かいグリッドで切ることで、二次元の配列と考える事が出来ます。
そのグリッド上でのZの値を求めるために、XとYすら二次元配列と考える仕様になっていて、
XやYには二次元配列の要素で各xとyの値が代入されます。それをZに関数を通して
ほおりこむことで各グリッドでの値の計算しています。

Zの値を求めるときにはmathモジュールではなくて、pylabについているモジュールを
使う必要があるようです。

実体として、Zは二次元配列その物となります。二次元データがあれば、
上のimshowを使って絵をかけるし、等高線も自動的に引くことが可能です。