再びスミスさん
梅が咲いた。あんずが咲いた。桜が咲いた。梨が咲いた。桃が咲いた。チューリップも咲いた。そして今度は、林檎の 花が咲きそう。
それぞれが、1週間間隔ぐらいでやってくるので、花見に忙しい。北国の春って、ほんとにあっと、やって 来るのね。
ああ、上記に追加があった。菜の花も咲いた。蕗のとうも咲いた? たらの芽も出てきた。うども出てきた。 こうして上げていくと、一年で一番良い季節だと思うぞ。
日の出も5時前になったし、日の入りは6時半を過ぎてきた。
林檎の樹にたくさん、鳥さんがやってきて、朝から騒々しい。おかげで、朝早くから起されてしまって、 昼飯後のまどろみの時間が待ち遠しい。うららかな日の下で、昼寝なんて、こんな至宝な時があるだろうか? このひと時の為なら、早朝から起されるのも悪くはないな。
この所、朝起きて、鳥さんに挨拶し、林檎の花のつぼみを観察して、日ごとにふくらんでくるのを楽しみに 見ている。
ちょっと外を回れば、桃色の桃の花、まさに天国。うれしいな。
IPython
pylab関係をいろいろ調べていたら、 IPython に行き当たった。ipythonって何よ?といぶかる人は、 絶賛してる人のペエジをご覧あれ。 こちらも参考になります。
で、Windows用のIpythonには、pyreadlineが同梱されていないので、個別にインストールしてあげる。 http://ipython.scipy.org/moin/PyReadline/Intro から、バイナリーを落としてくれば良い。好きな人は、ipython.elも入れちゃうみたいだけど、まあ、 そこまでしなくてもと、思ったり思わなかったり。 IPython and Emacs installation on Windows XP こんな記事が有るぐらいだから、ちとめんどくさそう。
IPythonを起動した時から、グラフを書くぞって強気な人は、pylab.batとかを作って、それを起動して あげれば良い。
@c:\Python27\python.exe C:\Python27\scripts\ipython.py -pylab %*
ちょいと実例をば
c:\>pylab
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)]
Type "copyright", "credits" or "license" for more information.
IPython 0.10.2 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.
Welcome to pylab, a matplotlib-based Python environment.
For more information, type 'help(pylab)'.
In [1]: x = np.arange(-10., 10., 0.1)
In [2]: plot(sin(x))
Out[2]: [<matplotlib.lines.Line2D object at 0x02E8E930>]
In [3]: np.arange??
Type: builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form: <built-in function arange>
Namespace: Interactive
Docstring [source file open failed]:
arange([start,] stop[, step,], dtype=None)
Return evenly spaced values within a given interval.
Values are generated within the half-open interval ``[start, stop)``
(in other words, the interval including `start` but excluding `stop`).
For integer arguments the function is equivalent to the Python built-in
`range <http://docs.python.org/lib/built-in-funcs.html>`_ function,
but returns a ndarray rather than a list.
:
昔あった、グラフ機能付き関数電卓だな。関数電卓だけじゃなくて、昔のMACにも関数をグラフ表示する ソフトが有ったような。。。 それにしても何気に、IPythonの ?? によるインスペクタは便利だな。
評判が悪かったので...
以前に出した、gnuplotでスミスチャートを書くスクリプト。gnuplot側で行う計算式が長大過ぎて、評判が 悪かったよ。何せ、最充填文字列だったから、目が点になってしまう人が多かったのかも知れない。 だったら、matplotlibを使ってみよう。
from matplotlib import pylab
def smith(re, im):
""" plot smith chart re: array real, im: array imag . """
px = lambda a,b: (a**2 + b**2 - 2500.0) / ((a + 50)**2 + b**2)
py = lambda a,b: (100.0 * b) / ((a + 50)**2 + b**2)
G = [ 0, 10, 25, 50, 100, 200, 500 ]
for s in G: # Constant X
X = [px(s,t) for t in range(0,3000,5)]
YL= [py(s,t) for t in range(0,3000,5)]
YC= [ -1 * x for x in YL]
pylab.plot(X, YL, "b")
pylab.plot(X, YC, "b")
for s in G: # Constant R
X = [px(t,s) for t in range(0,3000,5)]
YL= [py(t,s) for t in range(0,3000,5)]
YC= [ -1 * x for x in YL]
pylab.plot(X, YL, "b")
pylab.plot(X, YC, "b")
X = [px(x,y) for x,y in zip(re, im)] # plot data
Y = [py(x,y) for x,y in zip(re, im)]
pylab.plot(X, Y, "r")
pylab.show()
if __name__ == '__main__':
Z = [20-50j, 45-25j, 55+25j, 100+200j]
re= [z.real for z in Z]
im= [z.imag for z in Z]
smith(re, im)
上記は、スミスチャートを描くモジュールです。Pythonで初めて、lambda式を使ってみた。 親分は、lambda が嫌いみたいだけど、おいらは大好きだよ。
zipを使ってみたかったので、手続きsmithの引数は実部と虚部の二つのリストにしたけど、今までの 流れからすると、インピーダンスで渡した方が良かったかな?
気合が入ったスミスチャート
私が書いたのは、gnuplot版の焼き直しで、簡単なものでしたが、世の中には気合を入れて スミスチャートを書いている人がいます。 Polar Plotと題したのが、それです。 試してみるには、wxモジュールが必要です。実際に走らせてみると、ちゃんと、軸の目盛りが 表示されたり、凡例が出てきたりで、使い物になるって印象でした。
理論的な説明は、こちらが詳しいです。