2011年3月11日金曜日

バネの減衰振動

洪水 ver1

簡単な洪水を表す簡単な例。
洪水発生時刻をif文で判定しているので、今後while文等に変更する必要があると思われる。

Scifuncブロック中に以下が書いてある。


//----------------------------------------
y1=0

i=1

S=[3, 10, 11, 12, 19, 20, 30, 45, 66, 80]
V=[2, 8, 9, 8, 9, 11, 12, 9, 11, 8]

for i=1 : 10;
if Time >S(i) then y1=V(i);
if Time > S(i)+0.9 then y1=0;

end;
end;

end;
//----------------------------------------

(1)毎時間、現在の時間が洪水発生時刻かどうか、全ての配列データ
  (数百あると思われる)と比較しながら計算を進めるのはよくない
  と考えられる。
  if文をWhile文で置き換えることが考えられるが、複数の判定をしながら
  計算を進めることにならないかどうか。

(2) 次の洪水発生時刻を超えたかどうか、それだけを判定しながら計算を進
  めるのであれば、より時間が少なくてすむと思われた。
  この場合、下のようなフローチャートが考えられた。

----------------------------------------------------
   現在が、次(i番目)洪水発生を超えたか?
    →NO ・・・ いつもどおり (状態1)
    →YES ・・・ フラグ(旗)が立つ (状態2に変わる)
      現在が、洪水終了を超えたか?
      →NO ・・・ (状態2のまま)
      →YES ・・・ フラグ(旗)が降りる(状態1に戻る)
              i=i+1

----------------------------------------------------

これを行うために下記のようなプログラム(Scifunc中の記述)を考えたが、現時点ではうまく動いていない。

//----------------------------------------

Time=u1
y1=0

i=1

S=[3, 10, 11, 12, 19, 20, 30, 45, 66, 80]
V=[2, 8, 9, 8, 9, 11, 12, 9, 11, 8]

if Time >S(i) then y1=V(i);
if Time > S(i)+0.9 then y1=0; i=i+1;

end;
end;
//----------------------------------------

2011年3月9日水曜日

タンクモデル(5段直列)



左がScicosプログラム、右が計算結果です。

計算結果は、黒が一番上のタンク、緑が上から2番目赤が3番目黄色が4番目青が5番目のタンクの水の量の増減を、それぞれ表します。

タンクは5つとも同じ(面積と体積が同じ)としています(Scicos中で異なった定数等を与えればタンク毎に違った値を設定できます。)

【∫】マークがそれぞれのタンクを表します。初期値(各タンクの最初の水量)は一番上のタンクが1000、残りは0です。

各タンクからは水深H(地下水では水頭、ここでは各タンクの断面の形が同じなので水量)に比例して水が流出するとし、比例係数は0.01 /日 としています。三角マーク(△)に0.01という数字が入っています。

自分のタンクから水が出てゆく事で水が減り(-)、上のタンクから水が入って来ることで水が増え(+)ます。この2つが同時に起こり、【∑】で合算されます。

あるタンクから出て行く水の値と、下のタンクに入ってゆく水の値が同じです。出て行く水の量はそのタンクに反映され、同じ量が下のタンクに入るように、矢印が結ばれています。

タンクは5段直列ですが、より多くの数、種類のタンクや、直列と並列の混在なども、Scicos中では容易にできます。

生物7種の計算(流入水を追加)

2011年3月8日火曜日

2011年3月6日日曜日

生物7種の計算例



(2011/03/09)
 図ではA1(緑藻)、A2(大型珪藻)としていますが、プログラム等ではA1(大型珪藻)、A2(緑藻)でとしています。