================================== ユーティリティ関数 ================================== 以下のユーティリティ関数を使うことができます。 .. hint:: * 以下の説明において、引数・返り値が (double value, int digit) -> double と説明されているとき、 * 引数はdouble型, int型の2つということを表します * 引数名value, digitは説明のためであり、モデリング上は特に関係ありません * 返り値はdouble型ということを表します * 引数・返り値が複数ある場合は、算式の中の引数の数や型に応じて適切なものが選ばれます。 Utl.round :引数・返り値1: (double value) -> double :引数・返り値2: (double value, int digit) -> double :説明: | 四捨五入を行い、小数点以下digit桁に丸めます。 | digitを指定しなかった場合は整数となるように丸めます。 | digitが負の場合はエラーとなります。 Utl.log :引数・返り値: (double value) -> double :説明: 対数を計算します Utl.exp :引数・返り値: (double value) -> double :説明: 指数を計算します Utl.abs :引数・返り値1: (int value) -> int :引数・返り値2: (double value) -> double :説明: 絶対値を計算します Utl.max :引数・返り値1: (int a, int b) -> int :引数・返り値2: (double a, double b) -> double :引数・返り値3: (int a, int b, int c) -> int :引数・返り値4: (double a, double b, double c) -> double :説明: 最大値を計算します Utl.min :引数・返り値1: (int a, int b) -> int :引数・返り値2: (double a, double b) -> double :引数・返り値3: (int a, int b, int c) -> int :引数・返り値4: (double a, double b, double c) -> double :説明: 最小値を計算します Utl.clip :引数・返り値1: (double a, double mn, double mx) -> double :引数・返り値2: (int a, int mn, int mx) -> int :説明: | aがmn以下であればmn、aがmx以上であればmx, そうでなければaを返します | mn > mx となっている場合はエラーとなります Utl.sum :引数・返り値: (double[] ary) -> double :説明: 配列の和を返します Utl.sum_range :引数・返り値: (double[] ary, int start, int last) -> double :説明: | 配列のstart番目からlast番目までの和を返します。 | start, lastがaryの範囲を超えている場合、範囲の最初の値、最後の値となります | start > last となっている場合は、0を返します Utl.average :引数・返り値: (double[] ary) -> double :説明: 配列の平均値を返します。 Utl.average_range :引数・返り値: (double[] ary, int start, int last) -> double :説明: | 配列のstart番目からlast番目までの平均値を返します。 | start, lastがaryの範囲を超えている場合、範囲の最初の値、最後の値となります | start > last となっている場合は、0を返します Utl.sum_product :引数・返り値: (double[] ary1, double[] ary2) -> double :説明: | 配列の対応する要素の積を計算し、その和を返します | ary1, ary2の要素数が異なる場合はエラーとなります Utl.sum_product_range :引数・返り値: (double[] ary1, double[] ary2, int start, int last) -> double :説明: | 配列のstart番目からlast番目までの対応する要素の積を計算し、その和を返します | ary1, ary2の要素数が異なる場合はエラーとなります | start, lastが配列の範囲を超えている場合、範囲の最初の値、最後の値となります | start > last となっている場合は、0を返します Utl.normsdist :引数・返り値: (double z) -> double :説明: 標準正規分布の累積分布関数の値を返します Utl.normsinv :引数・返り値: (double p) -> double :説明: 標準正規分布の累積分布関数の逆関数の値を返します Util.irr :引数・返り値: (double[] ary) -> double :説明: | 内部収益率を計算します | 各要素が年ごとの値であることが想定されています | 計算時間が比較的長い計算です。特に配列の要素数が多い場合に計算時間がかかるため、要素数を200以下とすることを推奨します。 | 内部収益率が計算できない場合、配列の和が正のときには100.0、そうでない場合は-100.0を返します。 Utl.to_annual :引数・返り値1: (double[] ary, int yearsLast) -> double[] :引数・返り値2: (double[] ary, int yearsLast, int[] years) -> double[] :説明: | 月単位の配列を年単位の配列に直すための関数です | yearsLastは直した後の配列の最後の要素のインデックスです | yearsがない場合、配列aryの0番目の要素は0番目、1-12番目は1番目, 13-24は2番目.. にマッピングされ、和が計算されます | yearsがある場合、配列aryの要素は配列yearの対応する要素のインデックスにマッピングされ、和が計算されます | ary, yearsの要素数が異なる場合はエラーとなります :説明 - ロジック (引数・返り値1): 返り値の配列のi番目の要素の値は以下で表されます :: ret = 0.0 for (k = 0; k < ary.Length; k++) if(k >= (i-1) * 12 + 1 && k <= (i * 12)) ret += ary[k] :説明 - ロジック (引数・返り値2): 返り値の配列のi番目の要素の値は以下で表されます :: ret = 0.0 for (k = 0; k < ary.Length; k++) if(i == years[k]) ret += ary[k] Utl.pv :引数・返り値: (double[] cf, double[] disc, double[] cfDisc) -> double[] :説明: | 各期末における翌期以降のCFの現価を計算します | cf, disc, cfDiscの要素数が異なる場合はエラーとなります :説明 - ロジック: 返り値の配列のi番目の要素の値は以下で表されます :: ret = 0.0 (for k = i + 1; k < cf.Length; k++) ret += cf(k) * cfDisc(k) / disc(i)