人気ブログランキング | 話題のタグを見る

温度調整(2) 自宅でできる液晶観察(13)

ON-OFF調整の動作をエクセルでシミュレーションしたけれど、もちろん、適当なプログラム言語を使っても同じ事ができる。

それを示すため、十進basicを使ってプログラムを書いてみた。何で十進basicかというと、知りあいの勤めていた高校の課題研究で生徒さんが使っていたのがこれだったから。無料で入手できるbasicだし、日本語の簡易マニュアルがあるので、Scilabなんかよりは高校生さんあたりだと手が出しやすいだろうと思う。
ON-OFFのプログラムは

LET StageT=20
LET RoomT=20
LET TargT=100
LET HPower=160
LET HNKeisu=1
LET NetuYoryo=160
OPEN #1:NAME "C:/TempD.txt"
FOR i=1 TO 1000
IF StageT <= TargT THEN
LET StageT=StageT+(HPower-(StageT-RoomT)*HNKeisu)/NetuYoryo
ELSE
LET StageT=StageT-(StageT-RoomT)*HNKeisu/NetuYoryo
END IF
PRINT #1: StageT
NEXT i
CLOSE #1
END

な感じ。
最初のLETの部分は変数の定義。StageTがステージの温度。RoomTが室温で一定。TargTが目標温度でこれも一定。HPowerがヒーターパワー、HNKeisuが放熱係数、NetuYoryoが熱容量である。
次のOPEN文は、結果を書き込むためのファイルを作る命令。以下、PRINT文とCLOSE文はファイルに書き込むのとファイルを閉じる操作である。
というわけでプログラム本体はFOR i=からNEXT i までの間である。やっていることは
IF StageT <= TargT THEN
でステージの温度が目標温度以下であるかを調べて、以下なら
LET StageT=StageT+(HPower-(StageT-RoomT)*HNKeisu)/NetuYoryo
で、新しいステージ温度として、現在のステージ温度に加熱要素と放熱要素を加える。
もし、ステージ温度が目標温度より高いなら
LET StageT=StageT-(StageT-RoomT)*HNKeisu/NetuYoryo
で、新しいステージ温度として、現在のステージ温度から放熱要素文のみを引く。
そして、これを1000回繰り返すというものだる。

エクセルファイルと比べると、少しばかり取っつきにくいかもしれない。また、結果をグラフにするのには、できたファイルをエクセルなどで読ませてグラフ化する必要がある。でも、その一方で、ファイルサイズは遙かに小さいし、また、エクセルだとゲロゲロになるような、面妖な処理も比較的楽に実装できる。

コンピュータは、ソフトも含めて道具である。ので、目的のためにとりあえずは使えて、少ない手間で結果が得られるものを使えば良いのだろうと思う。ただ、そのためには、ヒマなときに、いろんなことを試して、それぞれのソフトの得意範囲などを実感しておかないといけなかったりするのだけれど。

ところで、エクセルでは、繰り返しの計算はしていないように見えるかもしれないけれど、
E3のセルの式を等号を使って書き表すと
E3=E2+$B$5*(F2*$B$15-G2*$B$11)/$B$9
と一つ前の代のセルの値に足す格好になっており、上の
LET StageT=StageT+(HPower-(StageT-RoomT)*HNKeisu)/NetuYoryo
とまったくパラレルになっていることが分かる。もうすこしパラレル度を上げたかったら、配列を使って十進basicのプログラムを書き直して
LET StageT(i)=StageT(i-1)+(HPower-Tdiff(i-1)*HNKeisu)/NetuYoryo
と、明示的に一つ前の世代を使って計算する形になる。プログラムの全体は一番下につけてあるけれど、エクセルの場合は、世代をiという文字で表す代わりに
LET StageT(2)=StageT(1)+(HPower-Tdiff(1)*HNKeisu)/NetuYoryo
LET StageT(3)=StageT(2)+(HPower-Tdiff(2)*HNKeisu)/NetuYoryo
という具合に、具体的な数が入って、繰り返しでなく、下へ下へと続いていっている訳である。エクセルは、上から下へと計算を行っていく。この流れが、プログラムのステップを定めているのである(それ故に、上下を逆にするとまったく動かなくなる)

エクセルというと、表やグラフを作るためのソフトと思っている人もいるようだけれど、それは、完全な誤解である。

配列版ON-OFFの十進basicプログラム
DIM StageT(1001)
DIM TDiff(1001)
LET StageT(1)=20
LET TDiff(1)=0
LET RoomT=20
LET TargT=100
LET HPower=160
LET HNKeisu=1
LET NetuYoryo=160
OPEN #1:NAME "C:/TempMD.txt"
FOR i=2 TO 1001
IF StageT(i-1) <= TargT THEN
LET StageT(i)=StageT(i-1)+(HPower-Tdiff(i-1)*HNKeisu)/NetuYoryo
ELSE
LET StageT(i)=StageT(i-1)-Tdiff(i-1)*HNKeisu/NetuYoryo
END IF
LET Tdiff(i)=StageT(i)-RoomT
PRINT #1: StageT(i)
NEXT i
CLOSE #1
END

※DIMは配列の定義命令である

by zam20f2 | 2010-05-04 07:38 | 科学系 | Comments(0)
<< 温度調整(3) (自宅でできる... 写真撮影 (自宅でできる液晶観... >>