|
> No.1855[元記事へ]
エステーさんへのお返事です。
> 食塩水の混合
>
> 1000ccの攪拌機付き容器に濃度3%の食塩水が満杯(1000cc)
> 入っています。いま、ここへ濃度7%の食塩水を徐々に注入
> していき、ちょうど1000cc注入したところで注入を止める。
> このとき、食塩水の濃度は何%になっているか。
>
> 注入した食塩水は瞬時に混合されて均質になり、注入された量に
> 等しい量は容器からあふれ出て、容器内は常に1000ccに保たれて
> いるものとする。
物理的、化学的な複雑な現象を避けるために、
数理モデル
・比重は1[g/mL]とする
・1[cc]=1[mL](=1[g])とする
・飽和を考えない
とする。
このような条件(大まかな考え方)があると思います。
> LET s=(d/100)*1000 ! 容器内の食塩の量
> LET t=(7/100)*h ! 注入する食塩水中の食塩の量
> LET d=(s+t)/(1000+h)*100 ! 容器内の食塩水の濃度
>
> 結果
> h=0.05 cc のとき 5.5270468 %
・『ΔXよりは、dX/dtの式を使う』
上記の現象を、
(a) 濃度b[g/L]の食塩水PΔt[L]を加えて、よくかき混ぜる。
(b) 次に食塩水をPΔt[L]捨てる。
このことをΔtごとに繰り返す。
と考える。
時刻tにおける食塩水の濃度をX(t)[g/L]として、
(a)を行った段階では、
食塩量はX(t)V+(b/100)PΔt、水量はPΔtだけ増えるので、
食塩濃度は、X(t)から(X(t)V+(b/100)PΔt)/(V+PΔt)に変化する。
(b)を行った段階では、
食塩量は減るが濃度は変わらない。
よって、X(t+Δt)≒(X(t)V+(b/100)PΔt)/(V+PΔt)
これより、X(t)が満たす微分方程式をつくる。
X(0),X(Δt),X(2Δt),X(3Δt),…から、Δt→0として連続関数X(t)を得る。
X'(t)
=lim[Δt→0]{(X(t+Δt)-X(t))/Δt}
=lim[Δt→0]{X(t)( V/(V+PΔt) - 1 )/Δt + (b/100)P/(V+PΔt)}
=lim[Δt→0]{-X(t)P/(V+PΔt) + (b/100)P/(V+PΔt)}
=(-P/V)X(t) + (b/100)P/V
=(-X(t) + b/100)P/V
初期条件は、X(0)=a/100となる。
> ところで。私もプログラムをつくってみました。
t秒後の食塩の量をx[g]とする。
時間がtからt+Δtまで変化する間の食塩の増加は、Δx≒((B/100)*PΔt-(x/V)PΔtである。
両辺をΔtで割りΔt→0の極限を取って、微分方程式dx/dt=((B/100)V-x)P/Vを得る。
また、初期条件x(0)=(A/100)*V[g]である。
┌──
│┌─
││
∬ P[g],B[%]を注入する
│~~~~~~│
│ │
┌─┘ V[g],X[%] │容器(最初にV[g],A[%] )
│┌┐ │
││└──────┘
∬ P[g],X[%]を流出させる
LET A=3 !3%
LET B=7 !7%
LET V=1000 !1000g
LET P=1 !g/秒
LET M=10000 !0~10000gまで注入する
LET h=1 !Δt
LET ITER=M/P/h !繰り返し回数
SET WINDOW -2,INT(ITER/100), -1,(INT(B/10)+1)*10
DRAW grid(INT(ITER/100)/10,1) !目盛 [ITER/100]/10 秒ごと、1%ごと
!オイラー法(Euler)
DEF f(t,x)=(B/100*V-x)*P/V !常微分方程式x'(t)=f(x(t))
LET t=0 !t=0
LET x=A/100*V !x[0]
FOR i=0 TO ITER
PRINT t; P*t; x/V*100; (A-B)*EXP((-P/V)*t)+B !時刻[秒]、注入量[g]、濃度[%]
PLOT LINES: t/100,x/V*100; !折れ線で近似する
LET x=x+h*f(t,x) !x[i]=x[i-1]+h*f'(t[i-1],x[i-1])
LET t=t+h
NEXT i
PLOT LINES
END
|
|