練習問題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と修正すれば良いです。