Python:グラフィックはひとまず成功

小波秀雄著”Pythonではじめるプログラミング”を参照しながら漸く、私が専門にしている自動制御理論で最も単純な一次遅れ系のグラフを描かせる事に成功しました。XCODEでPython3でTryしたのですが、昨日までの実績では、日本語フォントを読み込みテキストに日本語を使う事、オペレータがインプットする変数(パラメータ)をグラフ上にテキストで置くこと、そして、グラフの間隔を自由にとることはできていません。非常に苦戦したのが、時間:-1(sec)<t<0(sec)に初期値の直線を入れる部分です。以下は直流電圧をE=100(V)をR=20(Ω)、L =10(H)のRL回路に印加した瞬間に流れる電流i(t)の過渡応答をOn Responceに、逆に切った瞬間のそれをOff Responceに描かせたものですが、過渡応答の数式はion(t)=(E/R)*{1.0-exp(-R*t/L)}、ioff(t)=(E/R)*exp(-R*t/L)であり、t=0とt=-1では値が異なってしまいます。それは物理的には当たり前で、t=0からの過渡応答の数式であり、それ以前は定常状態なので、この式にt=0以前の過去の時間を入力しても、定常状態の電流値にはならないからです。つまり、t=0以前の時間の電流値はt=0と同じ値であるべきです。従って、プログラム上、-1<t<0の場合は強制的にion(t)=ion(0)=0、ioff(t)=ioff(0)=E/Rとしてやる、必要があるのですが、Visual BasicやC言語では何の事はないこの場合分けが配列に計算値をバッファするarange関数を使って結果をプロットさせるとなかなか難しく、一方で、ループ演算処理のWhile関数や For〜Next関数でプロットさせ様とすると、場合分けはできているのに、グラフへのプロットが上手くいかないという壁にぶつかってしまいました。他に良い方法があるのかもしれませんが、素人が苦肉の策で思いいたのが、-1<t<0と0≦t<Tmax(演算時間)のグラフを別々にarange関数で描かせるという方法です。まだ途中なので詳しくは説明しませんが、Tcをサンプリング周期として以下の様になります。i1が-1<t<0のion(t)、i2がioff(t)なのですが、ここでも壁がありました。sという新たな時間を設定した以上、i1やi2が例え一定値であっても、sを変数とした関数になっていなければならないらしいのです。つまり、数式はi1=0、i2=E/Rの定数の式で良いのですが、それではerrorになる為、-1<s<0をTc刻みで入力した値の結果がいずれもi1=0、i2=E/Rとなる様なsを使った式を定義してやる必要があり、i1=0.0*sとi2=(E/R)+(s-s)しかなかったということです。While関数や For〜Next関数でプロットさせる方法もあるのでしょうが、結局、グラフとしての見栄えの問題だけにつき、これで妥協することしました。このGWは英語とPython一色の連休でしたが、非常に有意義に過ごせたと思います。iPadでPythonができるのはわかっているのですが、matplotlibが使えるならば、iPad Proを買うかもしれません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です