練習問題3の回答¶
練習問題3-1¶
ファイルrun.xlsxのシートrunの、列calculation2, output2, sc_st2, sc_la2, sh_st2, sh_la2の値を空白にすれば良いです。
こうすることで、2回目のランが行われなくなります。
(また、モデルファイルev.modelも削除して構いません)
練習問題3-2¶
モデルについては、以下のように、term.modelに変数dynamic_lapse, qwx_baseを追加して下さい。(qwx_baseはBase計算クラスの算式をオーバーライドしています)
double[] dynamic_lapse = if(investment_yield(t) > 0.03) { 2.0 }
else { 1.0 }
double[] qwx_base = if (t == 0 || t > n) { 0.0 }
else {Utl.clip(qwx_crude(t) * (1.0+lapse_shock_ex) * dynamic_lapse(t), 0.0, 1.0)}
ラン定義については、ファイルrun.xlsxのシートrunの、定期保険(Term)のランを行う行について、
- 列sc_laを10にします。
- 列outputにev_stochを追加します。(EVを計算する場合)
- 列calculation2をEVStochとします。(EVを計算する場合)
練習問題3-3¶
モデルについては、
- まず、モデルファイルmedical.modelをコピーしてmedical2.modelを作成します。
- 次に、計算クラス名を
calculation Medical2(Base)
のようにして修正します。 - そして、以下のようにモジュールRateとモジュールCashFlowを修正して下さい。
モジュールRate¶
double Multiplier = 2.0
double[] benefitPV_P = if (t > n) { 0.0 }
elseif ( CT_P.Dx(x + t) <= 0.0) { 0.0 }
else { ( (CT_P.Mx_hosp(x + t) - CT_P.Mx_hosp(x + n)) * Multiplier +
(CT_P.Mx_acci(x + t) - CT_P.Mx_acci(x + n)) * Multiplier +
CT_P.Mx_surg(x + t) - CT_P.Mx_surg(x + n) )
/ CT_P.Dx(x + t) }
double[] benefitPV_V = if (t > n) { 0.0 }
elseif ( CT_V.Dx(x + t) <= 0.0) { 0.0 }
else { ( (CT_V.Mx_hosp(x + t) - CT_V.Mx_hosp(x + n)) * Multiplier +
(CT_V.Mx_acci(x + t) - CT_V.Mx_acci(x + n)) * Multiplier +
CT_V.Mx_surg(x + t) - CT_V.Mx_surg(x + n) )
/ CT_V.Dx(x + t) }
モジュールCashFlow¶
double Multiplier = 2.0
double[] medical_benefit_hosp = S * Multiplier * dx_hosp(t) * Tx_hosp(t)
double[] medical_benefit_acci = S * Multiplier * dx_acci(t) * Tx_acci(t)
ラン定義については、
- まず、ファイルrun.xlsxのシートrunの、医療保険(Medical)を行う行をコピーします。
- そして、列nameを01_medical2, calculationをMedical2と修正すれば良いです。