再びスミスさん
梅が咲いた。あんずが咲いた。桜が咲いた。梨が咲いた。桃が咲いた。チューリップも咲いた。そして今度は、林檎の 花が咲きそう。
それぞれが、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モジュールが必要です。実際に走らせてみると、ちゃんと、軸の目盛りが 表示されたり、凡例が出てきたりで、使い物になるって印象でした。
理論的な説明は、こちらが詳しいです。