2016年8月24日水曜日

pythonのすゝめ

最大限楽をしたい.
誰もが思い描く人生だと思います.

本稿では,これまで出来る限り楽をして生きてきた僕が,
楽をしてプログラムを書く一つの方法を提案します.

その方法は...

Pythonを使おう!

pythonを使うメリットとしては,比較的学習コストが低く,簡単にコーディングができるという点が挙げられます.

一言で言えば,
気が向いたらpython使ってみたらどうでしょうか.
という記事であります.

pythonの基本事項を列挙します.
・ファイルの拡張子は「.py」
・変数定義,型宣言はいらない.
・さらに文末のセミコロン「;」もいらない.
・コンパイルなしで実行できる.
・c言語での{}はインデントで表現する.
・ちなみにコメントアウトは「#」

既に投稿されている記事(ターミナルを電卓化)で,pythonをターミナル上で電卓として使用する方法がありました.
今回はこれをちょっと拡張して,
AWGNチャネルでのBPSK変調BER特性(理論値)
を出力してみます.


########################
# bpsk.py
########################

import math

f1 = open('bpsk_ber.txt', 'w')

for i in range(0, 11):

    EbN0 = pow(10, (i/10.0))
    BER = (1.0 / 2.0) * math.erfc( math.sqrt(EbN0) )
    
    print i, BER
    print >> f1, i, BER

f1.close()


さて,これであとは実行するだけです.
ターミナル上で
python bpsk.py
と入力しましょう.
これだけで結果が一発で表示されます.
早すぎる,超便利.

以下,詳しく説明していきます.


(1) import math

C言語 --> #include <math.h>

全く同義ですが,mathにある関数を用いる際は,
"math.func()"のように"math."を関数名の前に書く必要があります.
サンプルプログラムでは,
"math.erfc()"
を使っていますよね.

(2) for i in range(0, 11):

C言語 --> for(i = 0; i < 11; i++)

これも同義です.
しかし,forの範囲がインデントによって管理されることに注意です.
今回のプログラムでは,
    EbN0 = pow(10, (i/10.0))
    BER = (1.0 / 2.0) * math.erfc( math.sqrt(EbN0) )
    
    print i, BER
    print >> f1, i, BER
がforの中身です.

(3) prinf i, BER

C言語 --> printf("%lf %lf\n", i, BER);

もうこんなの見たらC言語書いてられません.
めちゃくちゃシンプルです.

(4) printf >> f1, i, BER

C言語 --> fprintf(f1, "%lf %lf\n", i, BER);

これも楽ちん.


!最後にpythonを使うにあたって注意!
大規模なシミュレーションには向きません.
実行速度は遥かにC言語の方が速いので,普段の研究ではなかなか使えないかと.
筆者は理論値を出すときや,数値計算で使ってます.

何事もトレードオフですね.

0 件のコメント :

コメントを投稿