伊藤積分の定義と性質 — 確率的な積分を理解する

株価がランダムに変動しているとき、ある戦略に従って株を売買した場合の累積損益はどう計算すればよいでしょうか。通常の積分では「被積分関数が滑らかである」ことが前提ですが、株価の変動を記述するブラウン運動の経路は至るところ微分不可能であり、通常のリーマン・スティルチェス積分では定義できません。この困難を乗り越えるために生まれたのが伊藤積分(Ito integral)です。

伊藤積分は確率解析(stochastic analysis)の基盤であり、その応用範囲は驚くほど広大です。

  • 金融工学: ブラック・ショールズ方程式の導出における中心的な道具です。オプション価格の理論的基盤を伊藤積分が支えています
  • 物理学: ランジュバン方程式やフォッカー・プランク方程式など、熱揺動を含む系の記述に不可欠です
  • 生物学・生態学: 確率的な環境変動のもとでの個体群動態を確率微分方程式で記述する際に使われます
  • 工学: ノイズのある制御系の解析や、確率的フィルタリング(カルマン・ブシーフィルタ)の理論的基盤です

本記事では、通常の積分がなぜブラウン運動に対して使えないのかを直感的に理解したうえで、伊藤積分の厳密な構成法を解説します。さらに、伊藤積分が持つ重要な性質(マルチンゲール性、等長公式、非前方参照性)を証明し、Pythonシミュレーションで理論を検証します。

本記事の内容

  • 通常の積分がブラウン運動で破綻する理由の直感的説明
  • 伊藤積分の厳密な構成と定義
  • 伊藤の等長公式(Ito isometry)の証明と意味
  • マルチンゲール性と非前方参照性
  • 伊藤積分とストラトノビッチ積分の違い
  • Pythonによるシミュレーションと理論の検証

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

通常の積分がなぜ使えないのか — 直感的な理解

滑らかな関数に対する積分の復習

通常のリーマン・スティルチェス積分 $\int_0^T f(t)\,dg(t)$ は、$g(t)$ が有界変動(bounded variation)であるときに定義されます。有界変動とは、大雑把に言えば「関数の上がり下がりの合計が有限」ということです。滑らかな関数は当然有界変動ですし、単調関数や区分的に滑らかな関数も有界変動です。

リーマン・スティルチェス積分は、区間 $[0, T]$ を $0 = t_0 < t_1 < \dots < t_n = T$ と分割し、

$$ \sum_{k=0}^{n-1} f(t_k^*)\left[g(t_{k+1}) – g(t_k)\right] $$

の極限として定義されます。ここで $t_k^*$ は区間 $[t_k, t_{k+1}]$ 内の代表点です。$g$ が有界変動であれば、分割を細かくしていったときにこの和は代表点の選び方によらず一つの値に収束します。

ブラウン運動の「激しすぎる」振動

ところが、ブラウン運動 $B_t$ は有界変動ではありません。実は、任意の有限区間 $[0, T]$ 上で、ブラウン運動の全変動(total variation)は確率1で無限大になります。

$$ \sum_{k=0}^{n-1} |B_{t_{k+1}} – B_{t_k}| \xrightarrow{n \to \infty} \infty \quad \text{(a.s.)} $$

直感的に言えば、ブラウン運動の経路はあまりにも激しくジグザグしており、上がり下がりの合計が有限に収まらないのです。微分不可能であるだけでなく、変動が無限大という、通常の関数の枠組みを大きく逸脱した性質を持っています。

これは、通常のリーマン・スティルチェス積分の定義をそのまま $g(t) = B_t(\omega)$ に適用しても、和が収束しないことを意味します。つまり、$\int_0^T f(t)\,dB_t$ を通常の方法で定義することはできません。

なぜ代表点の選び方が問題になるのか

もう一つの本質的な困難は、リーマン・スティルチェス和の代表点 $t_k^*$ の選び方によって、極限値が異なってしまうことです。滑らかな関数 $g$ の場合は、$t_k^* = t_k$(左端点)を選んでも $t_k^* = t_{k+1}$(右端点)を選んでも $t_k^* = (t_k + t_{k+1})/2$(中点)を選んでも、同じ極限に収束します。

しかし、ブラウン運動に対しては状況が全く異なります。左端点を使うか中点を使うかで、異なる値に収束するのです。具体的には、最も基本的な積分 $\int_0^T B_t\,dB_t$ を考えると、

  • 左端点(伊藤積分): $\sum_{k} B_{t_k}(B_{t_{k+1}} – B_{t_k}) \to \frac{1}{2}B_T^2 – \frac{1}{2}T$
  • 中点(ストラトノビッチ積分): $\sum_{k} B_{(t_k + t_{k+1})/2}(B_{t_{k+1}} – B_{t_k}) \to \frac{1}{2}B_T^2$

左端点を使った場合に $-T/2$ という「余分な項」が現れます。通常の微積分では $\int x\,dx = x^2/2$ ですから、ストラトノビッチの方が「自然」に見えるかもしれません。しかし、伊藤の選択(左端点)には深い理由があり、確率論的に非常に便利な性質を持っています。

では、伊藤積分がなぜ左端点を選ぶのか、そしてその定義がどのように構成されるのかを見ていきましょう。

伊藤積分の厳密な構成

確率空間とフィルトレーション

伊藤積分を定義するための舞台を整えます。確率空間 $(\Omega, \mathcal{F}, P)$ と、その上のフィルトレーション $\{\mathcal{F}_t\}_{t \geq 0}$ を考えます。フィルトレーションとは、時刻 $t$ までに利用可能な情報を表すσ-加法族の増大列です。

$$ \mathcal{F}_s \subset \mathcal{F}_t \quad (s \leq t) $$

ブラウン運動 $B_t$ は、このフィルトレーションに適合(adapted)していると仮定します。つまり、各時刻 $t$ において $B_t$ は $\mathcal{F}_t$-可測であるということです。大雑把に言えば、「時刻 $t$ の情報だけで $B_t$ の値がわかる」ということです。

ステップ1: 単純過程に対する伊藤積分

伊藤積分の構成は、まず最も簡単な被積分関数から始めて、段階的に一般化していくという戦略をとります。

単純過程(simple process)とは、時間を有限個の区間に分割し、各区間で定数値をとる確率過程のことです。具体的には、$0 = t_0 < t_1 < \dots < t_n = T$ という分割に対して、

$$ \begin{equation} f(t, \omega) = \sum_{k=0}^{n-1} e_k(\omega) \cdot \mathbf{1}_{[t_k, t_{k+1})}(t) \end{equation} $$

の形をした過程です。ここで各 $e_k$ は $\mathcal{F}_{t_k}$-可測な確率変数です。$e_k$ が $\mathcal{F}_{t_k}$-可測であるとは、$e_k$ の値が時刻 $t_k$ までの情報で確定するということです。これが非前方参照性(non-anticipating property)であり、「未来の情報を使わない」ことを意味しています。

単純過程 $f$ に対する伊藤積分は、自然な形で定義されます。

$$ \begin{equation} I(f) = \int_0^T f(t)\,dB_t := \sum_{k=0}^{n-1} e_k \left(B_{t_{k+1}} – B_{t_k}\right) \end{equation} $$

各項 $e_k(B_{t_{k+1}} – B_{t_k})$ は、「時刻 $t_k$ での持ち高 $e_k$ に、その直後の価格変動 $B_{t_{k+1}} – B_{t_k}$ を掛けた損益」と解釈できます。金融の文脈で言えば、これは最も自然な損益計算です。$e_k$ が $\mathcal{F}_{t_k}$-可測であるという条件は、「現時点の情報だけで投資判断をする」という要請に対応しています。

ステップ2: 伊藤の等長公式

単純過程に対する伊藤積分は有限和なので問題なく定義できます。次に、一般の被積分関数への拡張を可能にするための鍵となる性質を確認します。

伊藤の等長公式(Ito isometry): 単純過程 $f$ に対して、

$$ \begin{equation} E\left[\left(\int_0^T f(t)\,dB_t\right)^2\right] = E\left[\int_0^T f(t)^2\,dt\right] \end{equation} $$

が成り立ちます。

この公式は、伊藤積分の「大きさ」($L^2$ノルム)が、被積分関数の $L^2$ ノルムと等しいことを述べています。名前の通り、伊藤積分は $L^2$ 空間の間の等長写像(isometry)なのです。

証明: 単純過程 $f(t) = \sum_{k=0}^{n-1} e_k \mathbf{1}_{[t_k, t_{k+1})}(t)$ に対して、

$$ I(f)^2 = \left(\sum_{k=0}^{n-1} e_k \Delta B_k\right)^2 = \sum_{k=0}^{n-1} e_k^2 (\Delta B_k)^2 + 2\sum_{j < k} e_j e_k \Delta B_j \Delta B_k $$

と展開されます。ここで $\Delta B_k = B_{t_{k+1}} – B_{t_k}$ と略記しました。

交差項の期待値を計算します。$j < k$ のとき、$e_j$, $e_k$, $\Delta B_j$ はすべて $\mathcal{F}_{t_k}$-可測であり、$\Delta B_k$ は $\mathcal{F}_{t_k}$ と独立です。ブラウン運動の独立増分性から $E[\Delta B_k | \mathcal{F}_{t_k}] = 0$ なので、

$$ E[e_j e_k \Delta B_j \Delta B_k] = E\left[e_j e_k \Delta B_j \cdot E[\Delta B_k | \mathcal{F}_{t_k}]\right] = 0 $$

したがって交差項はすべて消え、残るのは対角項のみです。

$$ E[I(f)^2] = \sum_{k=0}^{n-1} E[e_k^2 (\Delta B_k)^2] $$

$e_k$ は $\mathcal{F}_{t_k}$-可測であり、$(\Delta B_k)^2$ は $\mathcal{F}_{t_k}$ と独立なので、条件付き期待値の性質から、

$$ E[e_k^2 (\Delta B_k)^2] = E\left[e_k^2 \cdot E[(\Delta B_k)^2 | \mathcal{F}_{t_k}]\right] = E[e_k^2] \cdot (t_{k+1} – t_k) $$

最後の等号では $E[(\Delta B_k)^2] = t_{k+1} – t_k$(ブラウン運動の分散の性質)を使いました。

以上をまとめると、

$$ E[I(f)^2] = \sum_{k=0}^{n-1} E[e_k^2](t_{k+1} – t_k) = E\left[\int_0^T f(t)^2\,dt\right] $$

が得られ、伊藤の等長公式が証明されました。$\square$

この証明の核心は、ブラウン運動の増分 $\Delta B_k$ が過去の情報 $\mathcal{F}_{t_k}$ と独立であるという性質にあります。左端点を代表点に選ぶことで、$e_k$ と $\Delta B_k$ の独立性が保証され、交差項がきれいに消えるのです。これが伊藤積分が左端点を採用する最も深い理由です。

ステップ3: 一般の被積分関数への拡張

伊藤の等長公式が確立されれば、伊藤積分を一般の被積分関数に拡張するのは、解析学における標準的な手続きで行えます。

被積分関数 $f$ が以下の条件を満たすとします。

  1. $f(t, \omega)$ は $\mathcal{F}_t$-適合過程である(非前方参照性)
  2. $E\left[\int_0^T f(t)^2\,dt\right] < \infty$(二乗可積分性)

このような $f$ に対して、単純過程の列 $\{f_n\}$ で

$$ E\left[\int_0^T (f_n(t) – f(t))^2\,dt\right] \to 0 \quad (n \to \infty) $$

を満たすものが存在します($L^2$ 空間における稠密性)。

伊藤の等長公式を適用すると、

$$ E\left[\left(I(f_n) – I(f_m)\right)^2\right] = E\left[\int_0^T (f_n(t) – f_m(t))^2\,dt\right] \to 0 \quad (n, m \to \infty) $$

なので、$\{I(f_n)\}$ は $L^2(\Omega)$ におけるコーシー列です。$L^2$ 空間の完備性により極限が存在し、この極限を $f$ の伊藤積分と定義します。

$$ \begin{equation} \int_0^T f(t)\,dB_t := \lim_{n \to \infty} I(f_n) \quad (\text{$L^2$ convergence}) \end{equation} $$

伊藤の等長公式が等長写像を保証しているため、この極限は近似列 $\{f_n\}$ の選び方によりません(well-defined性)。

このようにして、伊藤積分は二乗可積分で非前方参照的な確率過程のクラス全体に対して定義されます。構成法自体は抽象的ですが、「単純過程による離散的な近似から出発し、$L^2$ の意味での極限をとる」という方針は、リーマン積分の構成と精神的に似ています。

ここまでで伊藤積分の定義を確立しました。次に、この積分が持つ重要な性質を一つずつ見ていきましょう。

伊藤積分の基本性質

性質1: 期待値がゼロ(マルチンゲール性)

伊藤積分の最も重要な性質の一つは、その期待値がゼロであることです。

$$ \begin{equation} E\left[\int_0^T f(t)\,dB_t\right] = 0 \end{equation} $$

この性質は、単純過程に対しては直接確認できます。

$$ E\left[\sum_{k} e_k \Delta B_k\right] = \sum_k E[e_k \cdot E[\Delta B_k | \mathcal{F}_{t_k}]] = \sum_k E[e_k \cdot 0] = 0 $$

ここでもブラウン運動の独立増分性と $E[\Delta B_k] = 0$ を使いました。

より一般に、伊藤積分 $M_t = \int_0^t f(s)\,dB_s$ はマルチンゲールになります。すなわち、$s < t$ に対して、

$$ \begin{equation} E[M_t | \mathcal{F}_s] = M_s \end{equation} $$

が成り立ちます。マルチンゲールとは、「現在の情報のもとでの将来の期待値が、現在の値に等しい」過程のことです。金融の文脈では、「公平なゲーム」に対応しています。伊藤積分がマルチンゲールであるということは、ブラウン運動に対する確率的な投資戦略(ただし未来の情報を使わないもの)では、平均的には利益も損失も得られないことを意味します。

性質2: 二次変分

伊藤積分 $M_t = \int_0^t f(s)\,dB_s$ の二次変分(quadratic variation)は次のように与えられます。

$$ \begin{equation} \langle M \rangle_t = \int_0^t f(s)^2\,ds \end{equation} $$

二次変分は、過程の「揺らぎの蓄積量」を測る量です。分割 $0 = t_0 < t_1 < \dots < t_n = t$ に対して、

$$ \sum_{k=0}^{n-1} (M_{t_{k+1}} – M_{t_k})^2 \xrightarrow{n \to \infty} \langle M \rangle_t \quad \text{(in probability)} $$

が成り立ちます。通常の滑らかな関数の場合、二次変分はゼロになりますが、伊藤積分(そしてブラウン運動自体)は非ゼロの二次変分を持ちます。

特に $f(t) = 1$ のとき、$M_t = B_t$ であり、ブラウン運動の二次変分は $\langle B \rangle_t = t$ となります。これは「ブラウン運動の $(dB_t)^2$ は $dt$ と同じ振る舞いをする」ことの厳密な表現です。

伊藤の等長公式は、二次変分を使って次のように書き換えることもできます。

$$ E[M_t^2] = E[\langle M \rangle_t] $$

これは、マルチンゲールの分散が二次変分の期待値に等しいことを意味しています。

性質3: 線形性

伊藤積分は線形です。すなわち、定数 $a, b$ と適合過程 $f, g$ に対して、

$$ \begin{equation} \int_0^T (af + bg)\,dB_t = a\int_0^T f\,dB_t + b\int_0^T g\,dB_t \end{equation} $$

が成り立ちます。これは単純過程に対しては有限和の線形性から自明であり、一般の場合は $L^2$ 極限の線形性から従います。

性質4: 連続性

伊藤積分 $M_t = \int_0^t f(s)\,dB_s$ は、$t$ の関数として連続な経路(continuous sample paths)を持ちます。つまり、ほぼ確実にすべての $\omega$ に対して、$t \mapsto M_t(\omega)$ は連続関数です。

この性質は、マルチンゲール $M_t$ の連続修正(continuous modification)の存在定理(コルモゴロフの連続性定理)から導かれます。

性質5: 非前方参照性の重要性

伊藤積分の定義では、被積分関数 $f(t)$ が時刻 $t$ 以降のブラウン運動の情報を使わないこと($\mathcal{F}_t$-適合性)が本質的です。この条件を非前方参照性(non-anticipating)と呼びます。

非前方参照性は単なる技術的条件ではなく、深い物理的・経済的意味を持っています。

  • 因果律: 未来の情報に基づいて現在の行動を決めることは物理的に不可能です。非前方参照性はこの因果律の数学的表現です
  • 無裁定条件: 金融市場で未来の価格情報を使った投資戦略(インサイダー取引)を排除するための条件です
  • 数学的必要性: 等長公式の証明で見たように、交差項がゼロになるためには非前方参照性が不可欠です

もし未来の情報を使う(前方参照的な)被積分関数を許すと、伊藤積分のマルチンゲール性が壊れ、期待値がゼロにならなくなります。これは「未来を知っている」投資家が必ず利益を上げられることに対応します。

ここまでの性質を踏まえて、伊藤積分の最も基本的な計算例を見てみましょう。

基本的な計算例

例1: $\int_0^T B_t\,dB_t$ の計算

伊藤積分の最も有名な計算例は $\int_0^T B_t\,dB_t$ です。これは「現在の株価に比例した枚数を保有する戦略の損益」に対応します。

定義に基づいてリーマン和の形で書くと、

$$ \int_0^T B_t\,dB_t = \lim_{n \to \infty} \sum_{k=0}^{n-1} B_{t_k}(B_{t_{k+1}} – B_{t_k}) $$

各項を変形します。恒等式 $a(b-a) = \frac{1}{2}(b^2 – a^2) – \frac{1}{2}(b-a)^2$ で $a = B_{t_k}$, $b = B_{t_{k+1}}$ とすると、

$$ B_{t_k}(B_{t_{k+1}} – B_{t_k}) = \frac{1}{2}(B_{t_{k+1}}^2 – B_{t_k}^2) – \frac{1}{2}(B_{t_{k+1}} – B_{t_k})^2 $$

$k$ について和をとると、第1項はテレスコーピング(望遠鏡和)で簡単になります。

$$ \sum_{k=0}^{n-1} B_{t_k}(B_{t_{k+1}} – B_{t_k}) = \frac{1}{2}B_T^2 – \frac{1}{2}B_0^2 – \frac{1}{2}\sum_{k=0}^{n-1}(B_{t_{k+1}} – B_{t_k})^2 $$

$B_0 = 0$ であり、最後の和はブラウン運動の二次変分に収束します。

$$ \sum_{k=0}^{n-1}(B_{t_{k+1}} – B_{t_k})^2 \xrightarrow{n \to \infty} T \quad \text{(in probability)} $$

したがって、

$$ \begin{equation} \int_0^T B_t\,dB_t = \frac{1}{2}B_T^2 – \frac{1}{2}T \end{equation} $$

通常の微積分では $\int x\,dx = \frac{1}{2}x^2 + C$ ですが、伊藤積分では $-\frac{1}{2}T$ という補正項が現れます。この補正項はブラウン運動の二次変分に起因するもので、伊藤の公式の特徴的な帰結です。この $-\frac{1}{2}T$ は偶然現れた項ではなく、伊藤の補題(Ito’s lemma)から系統的に導くことができます。

例2: $\int_0^T t\,dB_t$ の計算

次に、決定論的な被積分関数 $f(t) = t$ に対する伊藤積分を考えます。

$$ \int_0^T t\,dB_t $$

この積分は部分積分法を使って計算できます。伊藤積分における部分積分の公式は後ほど伊藤の公式から導かれますが、ここでは結果だけ述べると、

$$ \begin{equation} \int_0^T t\,dB_t = TB_T – \int_0^T B_t\,dt \end{equation} $$

右辺の第2項 $\int_0^T B_t\,dt$ は通常のリーマン積分(パスワイズ積分)であることに注意してください。$B_t$ の経路は連続なので、この積分は各 $\omega$ に対してリーマン積分として定義できます。

この積分の分布を調べましょう。$\int_0^T t\,dB_t$ は正規分布に従います。期待値は、伊藤積分のマルチンゲール性から、

$$ E\left[\int_0^T t\,dB_t\right] = 0 $$

分散は、伊藤の等長公式から、

$$ E\left[\left(\int_0^T t\,dB_t\right)^2\right] = \int_0^T t^2\,dt = \frac{T^3}{3} $$

したがって、$\int_0^T t\,dB_t \sim N\left(0, \frac{T^3}{3}\right)$ です。

例3: 決定論的関数の伊藤積分

一般に、決定論的な関数 $f(t)$(確率に依存しない関数)の伊藤積分は正規分布に従います。

$$ \begin{equation} \int_0^T f(t)\,dB_t \sim N\left(0, \int_0^T f(t)^2\,dt\right) \end{equation} $$

これは、ブラウン運動の増分が正規分布であり、独立な正規確率変数の線形結合もまた正規分布であることから従います。期待値は常にゼロ(マルチンゲール性)、分散は等長公式で与えられます。

この結果は実用上非常に重要です。決定論的な関数の伊藤積分は、分布が完全に特定できるのです。

計算例で理論の具体的な意味を確認しました。次に、伊藤積分とは異なる積分の定義であるストラトノビッチ積分との関係を見てみましょう。

伊藤積分とストラトノビッチ積分の関係

ストラトノビッチ積分の定義

代表点の選び方として、左端点の代わりに中点を使うと、ストラトノビッチ積分(Stratonovich integral)が得られます。

$$ \begin{equation} \int_0^T f(t) \circ dB_t := \lim_{n \to \infty} \sum_{k=0}^{n-1} f\left(\frac{t_k + t_{k+1}}{2}\right)(B_{t_{k+1}} – B_{t_k}) \end{equation} $$

記号 $\circ$ はストラトノビッチ積分であることを示すために使われます。

二つの積分の関係

伊藤積分とストラトノビッチ積分の間には、次の変換公式が成り立ちます。$f(t, \omega) = g(B_t)$ のように被積分関数がブラウン運動の関数である場合、

$$ \begin{equation} \int_0^T g(B_t) \circ dB_t = \int_0^T g(B_t)\,dB_t + \frac{1}{2}\int_0^T g'(B_t)\,dt \end{equation} $$

第2項 $\frac{1}{2}\int_0^T g'(B_t)\,dt$ はストラトノビッチ補正項と呼ばれます。

先ほどの $\int_0^T B_t\,dB_t$ の例では $g(x) = x$, $g'(x) = 1$ ですので、

$$ \int_0^T B_t \circ dB_t = \int_0^T B_t\,dB_t + \frac{1}{2}T = \frac{1}{2}B_T^2 – \frac{1}{2}T + \frac{1}{2}T = \frac{1}{2}B_T^2 $$

となり、通常の微積分の結果 $\int x\,dx = \frac{1}{2}x^2$ と一致します。

どちらを使うべきか

伊藤積分とストラトノビッチ積分には、それぞれ長所と短所があります。

伊藤積分の利点: – マルチンゲール性を持ち、確率論的な議論が容易 – 非前方参照性(因果律)が組み込まれている – 金融工学では標準的な定式化 – 期待値の計算が容易($E[I] = 0$)

ストラトノビッチ積分の利点: – 通常の微積分の公式(連鎖律)がそのまま成り立つ – 物理学では、白色ノイズの有色ノイズ極限としてストラトノビッチ型が自然に現れる – 座標変換に対する共変性(幾何学的に自然な変換性)

実用的には、数学と金融工学では伊藤積分が標準であり、物理学ではストラトノビッチ積分がよく使われます。両者は変換公式で相互に変換できるため、本質的な違いはなく、どちらかの結果が得られれば他方に変換できます。

これらの理論を実際のシミュレーションで確認してみましょう。

Pythonによるシミュレーションと理論の検証

ブラウン運動の二次変分の確認

まず、伊藤積分の議論の出発点であるブラウン運動の二次変分が $T$ に収束することを確認します。

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(42)

T = 1.0

# 分割数を変えて二次変分を計算
partition_sizes = [10, 50, 100, 500, 1000, 5000, 10000]
n_paths = 200  # パス数

fig, axes = plt.subplots(1, 2, figsize=(13, 5))

# 各分割数での二次変分の分布
qv_means = []
qv_stds = []

for n in partition_sizes:
    dt = T / n
    # ブラウン運動の増分を生成
    dB = np.random.normal(0, np.sqrt(dt), size=(n_paths, n))
    # 二次変分 = Σ(ΔB_k)^2
    qv = np.sum(dB**2, axis=1)
    qv_means.append(np.mean(qv))
    qv_stds.append(np.std(qv))

# 二次変分の平均と標準偏差
ax = axes[0]
ax.errorbar(partition_sizes, qv_means, yerr=qv_stds, fmt='o-',
            capsize=3, label='Quadratic variation')
ax.axhline(T, color='r', linestyle='--', linewidth=1.5, label=f'$T = {T}$')
ax.set_xscale('log')
ax.set_xlabel('Number of partitions $n$', fontsize=12)
ax.set_ylabel('Quadratic variation', fontsize=12)
ax.set_title('Convergence of quadratic variation', fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)

# 分割数10000での二次変分のヒストグラム
n_large = 10000
dt = T / n_large
dB = np.random.normal(0, np.sqrt(dt), size=(5000, n_large))
qv_large = np.sum(dB**2, axis=1)

ax = axes[1]
ax.hist(qv_large, bins=60, density=True, alpha=0.7, color='steelblue',
        edgecolor='white', linewidth=0.5)
ax.axvline(T, color='r', linestyle='--', linewidth=2, label=f'$T = {T}$')
ax.set_xlabel('Quadratic variation', fontsize=12)
ax.set_ylabel('Density', fontsize=12)
ax.set_title(f'Distribution of QV ($n={n_large}$)', fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('qv_convergence.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"n=10000 での二次変分: 平均 = {np.mean(qv_large):.6f}, 標準偏差 = {np.std(qv_large):.6f}")

上のグラフから、以下のことが確認できます。

  1. 分割数 $n$ を増やすにつれて、二次変分の平均は $T = 1$ に収束し、標準偏差は減少している。これはブラウン運動の二次変分が $T$ に概収束することの数値的な確認です。分割が粗い($n = 10$)ではばらつきが大きいですが、$n = 10000$ ではほぼ確定的に $T$ に集中しています

  2. $n = 10000$ でのヒストグラムは $T = 1$ の付近に鋭く集中している。二次変分が確定的な値 $T$ に収束するという理論的予測が、シミュレーションで再現されています。通常の関数の二次変分はゼロになりますが、ブラウン運動では $T$ という非ゼロの値に収束するという点が、確率解析特有の現象です

$\int_0^T B_t\,dB_t$ の数値計算と理論値の比較

次に、$\int_0^T B_t\,dB_t = \frac{1}{2}B_T^2 – \frac{1}{2}T$ という理論的結果をシミュレーションで確認します。

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(123)

T = 1.0
n = 10000      # 時間分割数
n_paths = 50000  # パス数
dt = T / n

# ブラウン運動の増分
dB = np.random.normal(0, np.sqrt(dt), size=(n_paths, n))

# ブラウン運動の累積和
B = np.cumsum(dB, axis=1)
# B_0 = 0 を先頭に追加
B = np.hstack([np.zeros((n_paths, 1)), B])

# 伊藤積分の数値計算: Σ B_{t_k} * ΔB_k (左端点)
ito_numerical = np.sum(B[:, :-1] * dB, axis=1)

# 理論値: (1/2)B_T^2 - (1/2)T
B_T = B[:, -1]
ito_theory = 0.5 * B_T**2 - 0.5 * T

# ストラトノビッチ積分の数値計算: Σ (B_{t_k} + B_{t_{k+1}})/2 * ΔB_k (中点)
strat_numerical = np.sum(0.5 * (B[:, :-1] + B[:, 1:]) * dB, axis=1)

# ストラトノビッチ理論値: (1/2)B_T^2
strat_theory = 0.5 * B_T**2

fig, axes = plt.subplots(1, 3, figsize=(16, 5))

# 伊藤積分: 数値 vs 理論
ax = axes[0]
idx = np.random.choice(n_paths, 2000, replace=False)
ax.scatter(ito_theory[idx], ito_numerical[idx], alpha=0.15, s=3, color='steelblue')
lims = [min(ito_theory.min(), ito_numerical.min()), max(ito_theory.max(), ito_numerical.max())]
ax.plot(lims, lims, 'r-', linewidth=1.5, label='$y = x$')
ax.set_xlabel(r'$\frac{1}{2}B_T^2 - \frac{1}{2}T$ (theory)', fontsize=11)
ax.set_ylabel(r'$\sum B_{t_k} \Delta B_k$ (numerical)', fontsize=11)
ax.set_title('Ito integral verification', fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
ax.set_aspect('equal')

# ストラトノビッチ積分: 数値 vs 理論
ax = axes[1]
ax.scatter(strat_theory[idx], strat_numerical[idx], alpha=0.15, s=3, color='forestgreen')
lims2 = [min(strat_theory.min(), strat_numerical.min()), max(strat_theory.max(), strat_numerical.max())]
ax.plot(lims2, lims2, 'r-', linewidth=1.5, label='$y = x$')
ax.set_xlabel(r'$\frac{1}{2}B_T^2$ (theory)', fontsize=11)
ax.set_ylabel(r'$\sum B_{mid} \Delta B_k$ (numerical)', fontsize=11)
ax.set_title('Stratonovich integral verification', fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
ax.set_aspect('equal')

# 伊藤 vs ストラトノビッチの差
ax = axes[2]
diff = strat_numerical - ito_numerical
ax.hist(diff, bins=80, density=True, alpha=0.7, color='coral', edgecolor='white', linewidth=0.5)
ax.axvline(0.5 * T, color='k', linestyle='--', linewidth=2, label=f'$T/2 = {0.5*T}$')
ax.set_xlabel('Stratonovich - Ito', fontsize=11)
ax.set_ylabel('Density', fontsize=11)
ax.set_title('Difference between two integrals', fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('ito_vs_strat.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"伊藤積分の誤差 (RMSE): {np.sqrt(np.mean((ito_numerical - ito_theory)**2)):.6f}")
print(f"ストラトノビッチ積分の誤差 (RMSE): {np.sqrt(np.mean((strat_numerical - strat_theory)**2)):.6f}")
print(f"差の平均: {np.mean(diff):.6f} (理論値: {0.5*T})")

このシミュレーション結果から、3つの重要な事実が確認できます。

  1. 左図: 伊藤積分の数値計算(左端点リーマン和)が理論値 $\frac{1}{2}B_T^2 – \frac{1}{2}T$ と正確に一致している。散布図の点が対角線 $y = x$ 上に集中しており、すべてのパスにおいて数値計算と理論値の一致が見られます。これは伊藤積分の定義が正しく機能していることを示しています

  2. 中図: ストラトノビッチ積分の数値計算(中点リーマン和)が理論値 $\frac{1}{2}B_T^2$ と一致している。ストラトノビッチ積分では $-\frac{1}{2}T$ の補正項が現れず、通常の微積分と同じ結果になります

  3. 右図: 二つの積分の差がほぼ確定的に $T/2 = 0.5$ に集中している。ヒストグラムが $T/2$ の位置に鋭く集中しており、伊藤とストラトノビッチの差がちょうどストラトノビッチ補正項 $\frac{1}{2}\int_0^T g'(B_t)\,dt = \frac{1}{2}T$($g(x) = x$, $g'(x) = 1$ の場合)に等しいことが確認できます

伊藤の等長公式の数値検証

最後に、伊藤の等長公式 $E\left[\left(\int_0^T f(t)\,dB_t\right)^2\right] = \int_0^T E[f(t)^2]\,dt$ を数値的に検証します。決定論的な関数 $f(t) = t$ と確率的な関数 $f(t) = B_t$ の両方で確認します。

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(456)

T = 1.0
n = 10000
n_paths = 100000
dt = T / n
t = np.linspace(0, T, n + 1)

# ブラウン運動
dB = np.random.normal(0, np.sqrt(dt), size=(n_paths, n))
B = np.cumsum(dB, axis=1)
B = np.hstack([np.zeros((n_paths, 1)), B])

# --- ケース1: f(t) = t ---
f1 = t[:-1]  # 左端点の値 (deterministic)
ito_f1 = np.sum(f1[np.newaxis, :] * dB, axis=1)  # 伊藤積分

# 理論値: E[(∫t dB)^2] = ∫t^2 dt = T^3/3
var_f1_theory = T**3 / 3
var_f1_numerical = np.mean(ito_f1**2)

# --- ケース2: f(t) = B_t ---
f2 = B[:, :-1]  # 左端点の値 (stochastic)
ito_f2 = np.sum(f2 * dB, axis=1)  # 伊藤積分

# 理論値: E[(∫B_t dB)^2] = E[∫B_t^2 dt] = ∫E[B_t^2] dt = ∫t dt = T^2/2
var_f2_theory = T**2 / 2
var_f2_numerical = np.mean(ito_f2**2)

# --- ケース3: f(t) = sin(2πt) ---
f3 = np.sin(2 * np.pi * t[:-1])
ito_f3 = np.sum(f3[np.newaxis, :] * dB, axis=1)

var_f3_theory = np.trapz(f3**2, t[:-1])  # 数値積分
var_f3_numerical = np.mean(ito_f3**2)

fig, axes = plt.subplots(1, 3, figsize=(16, 5))

# ケース1のヒストグラム
ax = axes[0]
ax.hist(ito_f1, bins=80, density=True, alpha=0.7, color='steelblue',
        edgecolor='white', linewidth=0.5)
x_range = np.linspace(-2, 2, 300)
from scipy.stats import norm
ax.plot(x_range, norm.pdf(x_range, 0, np.sqrt(var_f1_theory)), 'r-', linewidth=2,
        label=rf'$N(0, T^3/3)$')
ax.set_xlabel(r'$\int_0^T t\, dB_t$', fontsize=12)
ax.set_ylabel('Density', fontsize=12)
ax.set_title(rf'$f(t) = t$: $E[I^2] = {var_f1_numerical:.4f}$ (theory: ${var_f1_theory:.4f}$)', fontsize=11)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)

# ケース2のヒストグラム
ax = axes[1]
ax.hist(ito_f2, bins=80, density=True, alpha=0.7, color='forestgreen',
        edgecolor='white', linewidth=0.5)
ax.set_xlabel(r'$\int_0^T B_t\, dB_t$', fontsize=12)
ax.set_ylabel('Density', fontsize=12)
ax.set_title(rf'$f(t) = B_t$: $E[I^2] = {var_f2_numerical:.4f}$ (theory: ${var_f2_theory:.4f}$)', fontsize=11)
ax.grid(True, alpha=0.3)

# ケース3のヒストグラム
ax = axes[2]
ax.hist(ito_f3, bins=80, density=True, alpha=0.7, color='coral',
        edgecolor='white', linewidth=0.5)
x_range3 = np.linspace(-2, 2, 300)
ax.plot(x_range3, norm.pdf(x_range3, 0, np.sqrt(var_f3_theory)), 'r-', linewidth=2,
        label=rf'$N(0, {var_f3_theory:.4f})$')
ax.set_xlabel(r'$\int_0^T \sin(2\pi t)\, dB_t$', fontsize=12)
ax.set_ylabel('Density', fontsize=12)
ax.set_title(rf'$f(t) = \sin(2\pi t)$: $E[I^2] = {var_f3_numerical:.4f}$ (theory: ${var_f3_theory:.4f}$)', fontsize=11)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('ito_isometry.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"ケース1: f(t)=t,       E[I^2] = {var_f1_numerical:.6f} (理論: {var_f1_theory:.6f})")
print(f"ケース2: f(t)=B_t,     E[I^2] = {var_f2_numerical:.6f} (理論: {var_f2_theory:.6f})")
print(f"ケース3: f(t)=sin(2πt), E[I^2] = {var_f3_numerical:.6f} (理論: {var_f3_theory:.6f})")
print(f"\n伊藤積分の平均値(ゼロであるべき):")
print(f"  ケース1: {np.mean(ito_f1):.6f}")
print(f"  ケース2: {np.mean(ito_f2):.6f}")
print(f"  ケース3: {np.mean(ito_f3):.6f}")

等長公式の検証結果から、以下のことが確認できます。

  1. 3つのケースすべてで、$E[I^2]$ の数値計算値が理論値と高い精度で一致している。$f(t) = t$ では $T^3/3 \approx 0.3333$、$f(t) = B_t$ では $T^2/2 = 0.5$、$f(t) = \sin(2\pi t)$ ではそれぞれの値に収束しており、等長公式が正確に成り立つことが確認できます

  2. 決定論的な被積分関数($f(t) = t$ と $f(t) = \sin(2\pi t)$)の場合、伊藤積分の分布は正規分布に完全に一致している。赤い理論曲線とヒストグラムが重なっており、理論的予測 $\int_0^T f(t)\,dB_t \sim N(0, \int_0^T f(t)^2\,dt)$ が確認できます

  3. $f(t) = B_t$ の場合、伊藤積分 $\int_0^T B_t\,dB_t = \frac{1}{2}B_T^2 – \frac{1}{2}T$ の分布は正規分布にはなりません。$B_T^2$ はカイ二乗分布に関連した分布をとるため、左右非対称な形状になります。確率的な被積分関数の場合は分布の形状が複雑になりますが、等長公式は依然として成り立ちます

  4. すべてのケースで伊藤積分の平均値はゼロに近い。これはマルチンゲール性 $E[I] = 0$ の数値的確認です。10万パスのサンプル数により、ゼロからのずれは統計的な誤差の範囲内に収まっています

まとめ

本記事では、伊藤積分の定義と基本性質について解説しました。

  • 通常の積分の限界: ブラウン運動は全変動が無限大であるため、リーマン・スティルチェス積分では定義できません。さらに、代表点の選び方によって異なる値に収束するため、新しい積分の定義が必要です
  • 伊藤積分の構成: 単純過程に対して左端点のリーマン和として定義し、伊藤の等長公式を使って $L^2$ 空間の完備性により一般の被積分関数に拡張します
  • 伊藤の等長公式: $E[(\int f\,dB)^2] = E[\int f^2\,dt]$ という等長性は、伊藤積分の構成と解析の基盤です。証明の鍵はブラウン運動の独立増分性と非前方参照性です
  • マルチンゲール性: 伊藤積分は期待値ゼロのマルチンゲールです。これは「未来を知らない投資戦略では平均的に利益は得られない」ことの数学的表現です
  • ストラトノビッチ積分との関係: 中点を使うストラトノビッチ積分は通常の連鎖律を保存しますが、マルチンゲール性を失います。両者は変換公式で結ばれています
  • Pythonシミュレーションで、ブラウン運動の二次変分の収束、伊藤積分の理論値との一致、等長公式の数値検証を確認しました

伊藤積分は確率微分方程式(SDE)の理論の基盤です。次の記事では、伊藤積分を道具として、確率微分方程式を解くための中心的な公式である伊藤の公式(Ito’s formula)とその応用について解説します。

次のステップとして、以下の記事も参考にしてください。