Fの推定と二分法

漁獲量と自然死亡率が分かっている場合にFを計算したい場面はVPAなどを回す際に良く出てくる。
今回こちらでやっているモデルの仕事でも、この問題が出てきている。
通常
C=F/(F+M)N(1-exp(-F-M))
をFについて解けば出るのだが、この式は解析的には解くことができない*1
そこで、何らかの方法でNumericalに解く必要が出てくるわけで、よく使われる方法としてはシンプレックス法ニュートン法なんかがある。

でも、このくらい簡単な式であれば、二分法で十分解ける。
二分法自体は非常に簡単なのだけど、軽くポイントを纏めておく。

まず、式を
C-F/(F+M)N(1-exp(-F-M))=0
の形にして、これをFについて解く。
必要な設定は評価するFの最小値Fminと最大値Fmax(この間に解となるFが一つある必要がある)そしてConvergence Criteria*2のFacc。ここまでが準備段階となる。

まず
dev(F)=C-F/(F+M)N(1-exp(-F-M))
として、

①dev(Fmin)、dev(Fmax)を求める。
②dev(Fmin)<0ならsp=Fmax-FminでFtag=Fminに違った場合はsp=Fmin-FmaxでFtag=Fmaxとする。
③sp=sp/2
④Ftest=Ftag+sp
⑤dev(Ftest)<0ならFtag=Ftest違えばFtagはそのまま。
⑥sp

*1:今回opilioが使ったモデルではこのFもMもNも体長依存なので、もう少しだけ式は複雑。基本は一緒。

*2:収束基準?日本語知らず。