学籍番号 TK 氏名 平成 年 月 日 第10回のクイズ 工業物理化学 II n n

学籍番号 TK
第10回のクイズ
氏名
平成
年
月 日
工業物理化学 II
講義の開始にあたり、マイ(またはネットワーク)コンピュータ(fsv0、Work_Win)を用いて、配
布ファイルを自分のコンピュータのデスクトップへコピーして下さい。さらに、各自の 3.5inchのフロ
ッピーディスクへもコピーして下さい。コピー後、fsv0、Work_Winのウィンドウ画面は閉じておいて
下さい。
「出席票」に氏名、学生番号とともに記入して下さい。
本日の主題 生物物理化学(1) 生体関連物質の物理化学
生体関連物質をインターネットで調べてみましょう。
キーワード エタノール、 解毒、 酵素 と 遺伝子増殖 PCR 法
http://www.nms.ac.jp/ig/introduction/saiboseibutsu/ourpage/topics/attention.html
お酒に弱い人は要注意」
http://biotech.nikkeibp.co.jp/fs/kiji.jsp?kiji=278 食の機能・安全
「アルツハイマー、
例題 1 酢酸水溶液排水の活性炭吸着実験を行って、吸着等温線を得た。W = 2000gの活性炭が投入さ
れた1段の吸着塔がある。いま、酢酸濃度 0.4mol/dm3の(dm3=ℓ)の排水V =40dm3を流し込み平衡
に達した時、水中の酢酸濃度C[mol/ dm3]および活性炭の酢酸吸着量[mol/g]について、ニュートン法を
用いたExcelのVBプログラムを作成して求めてみましょう。ただし、溶液中の平衡濃度Ci[mol/dm3]と吸
着量ni[mol/g]の関係は,ラングミアー(Langmuir)の等温吸着式で与えられるものとする.ラングミ
∞
∞
アーの等温吸着式における吸着平衡定数Kと飽和吸着量 n としては,K=16.63, n =0.00228 の値を
用いる.誤差を判定する定数EPSとしては,EPS=0.00001 を用いよ.
[解]Cとnを求めるプログラム(本日配布したExcel ファイル「ad_gra_re1.xls」を参照して下さい。
出口濃度Ciを求める基礎式の導出
溶液中の平衡濃度Ciと吸着量niの関係は,ラングミアー(Langmuir)の等温吸着式で与えられるとする
と,次式が成り立つ.
ni =
n ∞ KC i
1 + KC i
(1)
また,出口と入口でのそれぞれの物質濃度Ci,Ci-1とその段での吸着量niとの間には,物質収支より次式
が成り立つ.
n w = V (C0 − C )
(2)
V
(C − C0 )
w
(3)
n ∞ KC i
V
= − (C i − C i −1 )
1 + KC i
wi
(4)
n =−
式(1),(3)より,niを消去してCを求める.
ここで,式(1)と(3)の式の交点のCiを求めるために濃度Ciの関数f(Ci)を次のように定める.
1
f (C i ) =
n ∞ KC i V
+
(C i − C i −1 ) = 0
1 + KC i wi
n ∞ KCi
ni =
1 + KCi
ni = −
(5)
V
(Ci − Ci−1)
wi
このf(Ci)をグラフ化すると以下のように非線形のグラフとなる.したがってニュートン法を用いれば,
f(Ci)=0 の点を求めることができる.
ニュートン法を用いるために,関数f(Ci) を濃度Ciで微分する.
df (C i ) n ∞ K {(1 + KC i ) − KC i } V
=
+
dC i
wi
(1 + KC i ) 2
2
=
n∞ K
V
+
2
wi
(1 + KC i )
式(5),(6)を用いて任意の初期値よりニュートン法を行い,濃度Ciを決定する.
実際に作成した Sub プロシージャを下記に示します。
Sub NewtonAdsorption()
'-----------ニュートン法による吸着量の決定----------Dim K As Single, xnif As Single
Dim C As Single, xn As Single
Dim C0 As Single, C1 As Single
Dim FX As Single, DF As Single
Dim DX As Single, DC As Single
Dim x0 As Single, x1 As Single
Dim W As Single, V As Single
Dim N1 As Integer
'-----------ニュートン法による吸着量の決定----------K = Sheets(1).Cells(19, 3)
xnif = Sheets(1).Cells(19, 4)
'K = 16.63
'xnif = 0.00228
C0 = 0.4
W = 2000
V = 40
x0 = 0.4
EPS = 0.00001
'収束条件値の設定
N1 = 0
100: FX = xnif * K * x0 / (1 + K * x0) + V / W * (x0 - C0) '解こうとする関数 FX
DF = xnif * K / (1 + K * x0) ^ 2 + V / W
DX = FX / DF
'関数 FX の微分式
x1 = x0 - DX
'ニュートン法の基礎式より X1 を計算
DC = Abs((x1 - x0) / x0)
N1 = N1 + 1
'繰り返しの回数 N1 をカウント
'----------計算過程の出力---------Cells(7 + N1, 1) = N1 '繰り返し回数 N1 の出力
Cells(7 + N1, 2) = FX 'FX の出力
Cells(7 + N1, 3) = x1 '計算結果 X1 の出力
Cells(7 + N1, 4) = x0 '計算結果 X0 の出力
Cells(7 + N1, 5) = DX 'DX の出力
'*****************収束条件判定部分*****************
'----------DX が収束条件 EPS より小さければ 200 に移動---------If DC < EPS Then
3
(6)
GoTo 200
Else
x0 = x1 '計算した X1 を X0 に格納
GoTo 100
End If
200:
Fn = xnif * K * x0 / (1 + K * x0)
Cells(3, 2) = x1 '計算結果 X1(濃度 C)の出力
Cells(4, 2) = N1 '繰り返し回数 N1 の出力
Cells(3, 5) = Fn '計算結果(吸着量 n)の出力
End Sub
本日配布した VB の Sub プロシージャを含まない Excel ファイル「ad_gra_re.xls」を参照して(も
とにして)VB の Sub プロシージャを含 Excel ファイル「ad_gra_re1.xls」を作成してみましょう。VB
の Sub プロシージャを書き込むために、次のように準備します。
Excel のコマンドバーの「ツール」をクリックし、下図に示すように「Visual Basic Editor」を選択
します。
「Visual Basic Editor」が起動したら、下図のように「Visual Basic Editor」のウィンドウのコマ
ンドバーから「挿入」をクリックし、
「標準モジュール」を選択します。
標準モジュールのウィンドウが現れた後、下図のように、左上の部分に「Sub NewtonAdsorption()」と
記述して Enter キーを押すと、
Sub プロシージャの名前が変わり、
End Sub のステートメントが現れる。
4
この部分の名前が変わる。
この部分に「Sub NewtonAdsorption()」と記述して
Enter キーを押すと、
Sub プロシージャの名前が変わり、
End Sub のステートメントが現れる。
このプロジェクトエクスプローラに新しい
Module1 が現れる。
また、プロジェクトエクスプローラに新しい Module1 が現れていることも確認しておいて下さい。Sub
CalcTokuten()と End Sub の間に今から必要なステートメント(文)をVBプログラムとして書いて行
きます。
まず、コメント文( または REM)を用いて、どのような機能のプログラムであるのかがわかるよう
に、次に示すように説明文を Sub プロシージャのはじめに書いておきます。より見やすくするために、
コメント文を用いて「 ‘ ****」なども入れておきます。
Sub プロシージャの作成例
Sub NewtonAdsorption()
'-----------ニュートン法による吸着量の決定----------次に、Sub プロシージャ内で用いる変数を考え(この時点で必要な変数すべてを予測する必要はあ
りません。必要な時点で後から加筆できます。
)
、宣言文(Dim)でその変数を宣言します。
Dim K As Single, xnif As Single
Dim C As Single, xn As Single
Dim C0 As Single, C1 As Single
Dim FX As Single, DF As Single
Dim DX As Single, DC As Single
Dim x0 As Single, x1 As Single
Dim W As Single, V As Single
Dim N1 As Integer
'-----------ニュートン法による吸着量の決定----------K = Sheets(1).Cells(19, 3)
xnif = Sheets(1).Cells(19, 4)
'K = 16.63
'xnif = 0.00228
'*************************
一般に、プロシージャを作成するには、最も重要な部分から作成するといいでしょう。他の人が作成し
たプログラムを解析する場合でも、基礎式など重要な部分から見つけることが効果的です。このプロシ
ージャで最も重要な機能は、
「方程式の解を求める」の部分ですから、FX、DF とそれに関連する x0 と
x1 の大きさの差を比較して判定する」の部分です。次に示す If 文の構文を利用して、条件 A①として、
x0 と x1 の大きさの差を絶対値関数 Abs()で計算し、変数 DX と判定値 EPS の大きさ比較を行います。
[構文2]
5
If 条件式A① Then
[文①;ステートメントブロック①]
Else
[文②;ステートメントブロック②]
End If
この構文では、青字(印刷の都合でアンダーラインにて示していますが、実際のプログラムではアン
ダーラインはいりません。
)で示した部分がプログラム用語で、勝手にはかえられません。他の「条件式
A①」
、
「文①」
、
「文②」などは、作者が自由に変更できます。
If ・・・ Then・・・ Else(略称;If文)ステートメント(文)の意味は、
[構文2]について考えると、
「もし 条件式A①が 真 なら、 文①、そうでなく 偽 なら 文② する。
」という意味になりま
す。つまり、条件式A①を満足したときには、If文の次行からElseの前の文までを実行します。また、条
件式A①を満足しないときには、Else文の次行からEnd Ifの前の文までを実行します。
Excel の Visual Basic の コ ー ド 画 面 に お い て 実 行 ボ タ ン を 押 す と 、 コ ン ピ ュ ー タ は 、「 Sub
NewtonAdsorption()」のプロシージャー(コード)の先頭から読み、
「End Sub」まで計算処理を続けま
す.
ではプログラムの流れを詳しく解説していきます.
「Dim x0 As Single, x1 As Single」
変数 x0 および x1 を単精度浮動小数点型である Singleで宣言しています.変数を宣言するときの構
文としては「Dim 変数名 As データ型」となります。今回は「x0」と「x1」の二つの変数を一度に指定して
いるため、それぞれの変数の宣言の間を「,
」で区切って記述されています。
「Dim x0 As Single
Dim
x1 As Single
」
のように二行に渡って記述しても構いません。変数名は任意で付けることができます。データ型には Single
の他に、Integer、Long、Double などが有りますが、変数の中に入る数値によって最適なものを選択しなけれ
ばなりません.
「Dim N1 As Integer」
変数 N1 を整数型である
Integer
で宣言しています。
「N1」は回数をカウントする変数ですので、
整数型で宣言していれば十分です。
「EPS = 0.00001」
変数
EPS に
0.00001
という数値を格納します。これ以降ではプログラム中に記
載される「EPS」という文字は「0.00001」という数字で認識されます。したがって「EPS*
2」ならば「
0.00001*2
」となります。
「N1=0」
変数
N1 に 0 という数値を格納します。今回のプログラムでは変数「N1」は回数をカウントする
変数として用いていますのでカウントの数字の始まりとして「0」を格納しています。
6
「K = Sheets(1).Cells(19, 3)」
変数Kに、ExcelでのSheet1 にあるセル 19 行 3 列目のセルの数値を格納します。Excelの数値を入力す
るための構文としては「変数名=変数名(範囲指定).Cells(行数,列数)」となります。
「100:」
「100」という場所を設定しています。プログラムは記載してある順番に上から下へと実行されていきま
す。したがって、今いる場所より前にある命令を実行したい場合や、いくつかの命令を飛ばして先の命
令を実行させたりしたい場合には、後述する
GoTo 文などを使用します。その行き先の場所として
今回は「100」という名前を設定しました。
100: FX = xnif * K * x0 / (1 + K * x0) + V / W * (x0 - C0) '解こうとする関数 FX
変数
FX に計算結果の数値を格納しています。ここで、変数「X0」には「 0.3 」という数値が格
納されていまず。
DF = xnif * K / (1 + K * x0) ^ 2 + V / W
変数
DF には、FXのx0 での微分式(基礎式で導出)の計算結果の数値を格納しています。
変数
X1 には、ニュートン法の基礎式である「 X 0 − (FX DF ) 」の計算結果の数値を格納していま
す。
「DX = Abs((X1 - X0) / X0)」
変数
DX に「 ( X 1 − X 0 ) X 0 」の計算結果を格納しています。
「N1 = N1 + 1」
変数
N1 に N1+1 の計算結果を格納しています。ここで、変数「N1」には 0 という数値が格
納されているので、実際の計算は「0+1」となります。計算結果は「1」であるので変数「N1」には「1」
という数値が格納されます。
ここで、この命令が実行される前の変数N1 には「0」という数値が格納されていました。しかし、命令
の実行後は「1」という数値が格納されます。プログラムでは一つの変数には一つの数値しか格納できま
せん。したがって、後から格納された数値が優先され、それまで格納していた数値は消去されます。今
回は「N1=N1+1」と記述されているので、それまで格納していた数値に「1」を加えたものを新に格納し
なおします。よって、この命令が実行されるたびに数値が
数値は変数「EPS」の数値より
1 ずつ 増加していきます。変数「DX」の
大きく なります。したがって、「Else」以下の命令文が実行されます。
「X0=X1」では変数「X0」に変数「X1」の数値を格納します。次に「GoTo 100」で「100」という場所に
移動します。そしてまた、上から下へと以下のプログラムが実行されます。
変数「FX」
、
「DF」
、
「X1」
、
「DX」には先ほどとは異なる数値が新しく格納されます。また変数「N1」は「1+1」
で
2 という数値が格納されます。
そして、再びIf ∼EndIf までのプログラムが実行されます。
「Else」以下の命令文が再び実行され、変数
7
X0
に変数
X1 の数値が格納され、「100」という場所に移動し、計算を繰り返すことになります。
その結果、変数「DX」の数値が変数「EPS」の数値より
小さく なった時にはじめて、「200」という場所
に移動することになります。
「200 :」
「200」という場所を設定しています。
演習 1 試行錯誤法により、次の問題を解きましょう。つまり、C=0.35 とC=0.308 の2つの場合に対
して、ラングミアー(Langmuir)の等温吸着式より計算される吸着量と操作線(物質収支)から計算
される吸着量をそれぞれ計算し、妥当な濃度Cを決定し、あわせて平衡後の吸着量も求めます。酢酸水
溶液排水の活性炭吸着実験を行って、吸着等温線を得た。W = 2000gの活性炭が投入された1段の吸
着塔がある。いま、酢酸濃度 0.4mol/dm3の(dm3=ℓ)の排水V =40dm3を流し込み平衡に達した時、
水中の酢酸濃度C[mol/ dm3]および活性炭の酢酸吸着量[mol/g]について、ニュートン法を用いたExcel
のVBプログラムを作成して求めてみましょう。ただし、溶液中の平衡濃度C[mol/dm3]と吸着量ni[mol/g]
の関係は,ラングミアー(Langmuir)の等温吸着式で与えられるものとする.ラングミアーの等温吸
∞
∞
着式における吸着平衡定数Kと飽和吸着量 n としては,K=16.63, n =0.00228 の値を用いる.
演習2 前述の問題を試行錯誤法ではなく、Excelの関数機能を用いて求める方法について検討し、次
の問題を解きましょう。つまり、C=0.4から 0.005 ずつ小さくして、そのそれぞれのCに対して、例題
で求めた関数FXの値をExcelのセル関数で計算し、グラフとして表します。ラングミアー(Langmuir)
の等温吸着式より計算される吸着量と操作線(物質収支)から計算される吸着量の差を計算し、グラフ
と数値で表示することで、妥当な濃度Cを決定し、あわせて平衡後の吸着量も求めます。酢酸水溶液排
水の活性炭吸着実験を行って、吸着等温線を得た。W = 2000gの活性炭が投入された1段の吸着塔が
ある。いま、酢酸濃度 0.4mol/dm3の(dm3=ℓ)の排水V =40dm3を流し込み平衡に達した時、水中の
酢酸濃度C[mol/ dm3]および活性炭の酢酸吸着量[mol/g]について、ニュートン法を用いたExcelのVBプ
ログラムを作成して求めてみましょう。ただし、溶液中の平衡濃度C[mol/dm3]と吸着量ni[mol/g]の関係
は,ラングミアー(Langmuir)の等温吸着式で与えられるものとする.ラングミアーの等温吸着式に
∞
∞
おける吸着平衡定数Kと飽和吸着量 n としては,K=16.63, n =0.00228 の値を用いる.
8