Latticeクラスに戻りましょう。すべきでしたが、開発者は、おそらく短い名前を好んだのでしょう。方が良いと気づきました。クラステンプレートの間で接続点としての役割を果たしています。(Treeクラスではあえて必要無い設計手法でしたが、とりあえずそのままにしています)。Latticeベースクラスで宣言されたメソッドが、この派生クラスで、動作の実装がなされています。汎用的な構造にする為、このTreeLatticeクラスの中ではTreeクラス(で宣言されたメソッド)は出てきません。どのようなTreeクラスを選択して、それをどのように使うかは、派生クラスに任されています。このクラスのコンストラクターは、単純明快です。取り、それぞれメンバー変数に保存します。1~2点の事前チェックを行い、データを一時保管する為の2つのメンバー変数を初期化します。ここでは詳細な説明は飛ばします。クラスのメソッドの実装部分で、前のセクションで示した概要に従った動作を行います。TimeGridインスタンスから導出します。)メソッドに渡します。)メソッドを呼び出して得ます。Treeクラスにおける、同じ機能を持つメソッドと同じメソッド名にしています。)は同じ動作を実行します。)ではそれを行っていません。従って、前者のメソッドは後者のメソッドを使って実装できます。)メソッドを呼び出せばいいだけです。)メソッドのプログラムコードの中に記述されています。)メソッドを呼び出します。上の資産価格を計算します。)メソッドを呼び出します。)メソッドは、(CRTPを使って)派生クラスで実装されるインターフェースを使って実装されています。コンセプトを導入していなかったので、この方法が唯一まともな方法でした。資産価格とその分岐先への遷移確率を使って計算します。その値を、さらにステップ期間に相当する割引率で調整します。分岐先間の割引率を返す)。(注:割引率は分岐先に独立して決まるとの前提です)。返すよう実装されています。状態変数の計算方法の説明は、あえて無視しましょう。遡るより、遥かに効率的であるとだけ申し上げておきます。(わざわざ定義して、それを)呼び出す様にしているのでしょうか?(その結果、派生クラスで、それらのメソッドの実装が必要になります。1つ持っているだけなら、Treeのメソッドを使うのは簡単な事です。Latticeクラスのメソッドの実装内容は、Treeインスタンスの同じ名前のメソッドを呼び出すだけです。Tree構造がどのような次元であっても、共通のインターフェースに適合させる事ができるのです。Latticeクラスが用意されています。このクラスは、TreeLatticeクラスで必要となるメソッドを何も実装していません。)メソッドです)を必要としています。このクラスは特定のカテゴリーのクラスをまとめる役割以外には、ほとんど何もしていません。対象資産のTreeインスタンスの保存と管理も、やはり派生クラスに任されています。(注:TreeLattice1Dクラスで必要なメソッドの既定値を実装すべきではないかとの議論もあります。する方がいいかもしれません。Latticeで必要な場合は、オーバーライドする事も可能でしょう。インスタンス、2ShortRateDynamicsクラスのインスタンス(ここでは説明を飛ばします)、および3TimeGridインスタンスを取ります。Treeインスタンスから取りだせるので、なぜここで引数として渡す必要があったのか不明です。TimeGridインスタンスは、Treeの分岐数(当然3です)と共に、ベースクラスのコンストラクターに渡されます。インスタンスはメンバー変数に保存されます。Treeクラスのメソッドを呼び出す様に実装されています。Treeクラスに無いからです。分岐先までの期間に対応する割引率を計算するようになっています。フィットした短期金利の拡散過程を、3項Treeで表現する場合の、Hull-Whiteが提示したテクニックを思い出して下さい。ShortRateTreeクラスが、前者を表現し、ShortRateDynamicsクラスが、変換後の後者を表現しています。与えて、それを短期金利に変換し、それを使って計算されています。underlying()は、英語の語感からくる‘対象資産’の値というより、‘状態変数’の値と訳した方が良かったかもしれません。Nodeにおける短期金利の値を変更する事が可能という事です。フィットさせる為に、いくつかのモデルで行われています。示していませんが、もうひとつのコンストラクターを用意しており、フィットさせる動作の為、追加のパラメータを引数として取るようになっています。ベースクラスとなり、TreeLatticeクラスで使われるメソッドの大半を実装しています。TreeLattice1Dクラスとの相違点です。クラス階層の対称性を考えると、TreeLattice2Dクラスでもそういった実装をせず、派生クラスに実装を移してもよかったかも知れません。使って、モデル化しています。ここで、説明の為の図をお見せしたとしても、混乱させるだけだと思います。ペアとして表現するという事です。それは即ち、確率変数の遷移は、ペアからペアへの遷移として認識される事になります。2変数のペアの可能な組合せすべてにインデックス番号を付け、そのペアを一個のインデックス番号で取りだせるようにして、必要なインターフェースと整合を取るようにしています。ケースで見てみましょう。持っていなければなりません。無いと、全く訳が分からなくなります)。それぞれ異なった確率で分岐するとします。通りの可能性があります。ように、インデックス番号を対応させます。個のペアが出来ますが、それらについても辞書の順番に並べてインデックス番号を付けます。インデックス番号がふられます。ここまで説明すれば、実装内容の意味がより理解しやすくなるでしょう。TreeLattice2Dクラスのコンストラクターは、TrinomialTreeインスタンスを2つと、2変数の間の相関係数を引数として取り、それらをメンバー変数に保存します。次元が引数として渡されます。