再びスミスさん

梅が咲いた。あんずが咲いた。桜が咲いた。梨が咲いた。桃が咲いた。チューリップも咲いた。そして今度は、林檎の 花が咲きそう。

それぞれが、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モジュールが必要です。実際に走らせてみると、ちゃんと、軸の目盛りが 表示されたり、凡例が出てきたりで、使い物になるって印象でした。

理論的な説明は、こちらが詳しいです。