常微分方程式の精度保証付き数値計算について

公開日:
最終更新日:

はじめに

この記事では,常微分方程式の精度保証付き数値計算のさわりを解説する.

精度保証付き数値計算 (validated numerics) は「数値計算によって得られた結果に対して,数学的に厳密な誤差限界を与える手法」である(荻田・柏木・劉,2018).こう聞くと,精度保証付き数値計算は「従来の数値解法に誤差評価を付け加える理論」であるかのように思われるかもしれない.しかし,それは精度保証付き数値計算のほんの一面にすぎない.

誤差を評価するには,まず解の存在を証明しなければならない.計算の目的によっては,解が一意であることも示す必要があるだろう.こうした要件から,従来の数値解法をそのまま精度保証付き数値解法に修正できるとは限らず,しばしば精度保証ならではのアプローチが必要になる.この記事によって,この記事によって,精度保証付き数値計算が持つそうした特徴を少しでも伝えられたら嬉しい.

Googleドライブから,この記事のPDF版Markdown版をダウンロードできる.印刷して読みたい方にはPDF版をおすすめする.

浮動小数点演算

計算機において,実数の演算は浮動小数点演算 (floating-point arithmetic; FP) という,Q\mathbb{Q}の部分集合における演算(と,そのちょっとした拡張)で近似される.いま流通しているほとんどのPCは,IEEE 754-2008という標準規格に則った浮動小数点演算を実装している.

この記事を読むには,浮動小数点演算について次のことを抑えていれば十分である.詳細を知りたければBoldo (2023) が参考になるだろう.

  1. 浮動小数点数の全体集合Fˉ\mathbb{\bar{F}}は,Q\mathbb{Q}のある部分集合F\mathbb{F}{±}\lbrace\pm\infty\rbraceの和集合である.
  2. F\mathbb{F}は有限集合である.
  3. ある自然数ppが存在して,F\mathbb{F}の元はすべて,二進法での桁数がpp以下の整数に,2±12^{\pm 1}を何回か掛けた数である.このようなppの最小値を精度 (precision) という.

浮動小数点数でない実数xxを浮動小数点数演算で扱うには,Fˉ\mathbb{\bar{F}}からxxに近い元を適切に選び出す必要がある.この操作を丸め (rounding) という.代表的な丸め関数は以下の3通りである.

  1. xx以下であるFˉ\mathbb{\bar{F}}の元で最大のものを丸められた値RD(x)\operatorname{RD}(x)とする.これを負の無限大への丸め (round towards negative infinity) という.
  2. xx以上であるFˉ\mathbb{\bar{F}}の元で最小のものを丸められた値RU(x)\operatorname{RU}(x)とする.これを正の無限大への丸め (round towards positive infinity) という.
  3. xxに最も近いFˉ\mathbb{\bar{F}}の元を丸められた値RN(x)\operatorname{RN}(x)とする.ただし,最も近いものが2つある場合は別に対応規則を定める.これを最近接丸め (round to nearest) という.

最近接丸め関数は一意ではない.IEEE 754-2008にしたがうシステムは偶数丸め (round ties to even) という最近接丸めを実装しており,指定しない限り偶数丸めが使われる.

区間演算

F\mathbb{F}R\mathbb{R}ではないから,浮動小数点演算には常に誤差がつきまとう.誤差を定量的に把握するため,精度保証付き数値計算では実数をFˉ\mathbb{\bar{F}}の2元で挟み

axb(a,bFˉ) a \leq x \leq b\quad(a,b\in\mathbb{\bar{F}})

の形で表現する.xxに対する演算は,このような区間[a,b]\lbrack a,b\rbrackに対する区間演算 (interval arithmetic; IA) に置き換えて実行する.

はじめから浮動小数点演算の誤差まで考慮して区間演算を議論するのは面倒なので,この記事ではR\mathbb{R}における区間演算を定義してから,それを修正してF\mathbb{F}における区間演算を定義する.

SSR\mathbb{R}の閉集合とする.任意のx1,x2Sx_{1},x_{2}\in Sx1x2x_{1}\leq x_{2})に対して

x1ux2    uS x_{1}\leq u\leq x_{2} \implies u\in S

が成立するとき,SSを1次元閉区間 (closed interval) という.この定義のもとでは\emptysetR\mathbb{R}{a}\lbrace a\rbraceaRa\in\mathbb{R})はすべて閉区間である.

閉区間SSの下限がaa,上限がbbであるとき,SS[a,b]\lbrack a,b\rbrackと表す.すなわち

[a,b]{xRaxb} \lbrack a,b\rbrack \coloneqq \lbrace x\in\mathbb{R}\mid a\leq x\leq b\rbrace

とする.また,しばしば実数aaと閉区間{a}=[a,a]\lbrace a\rbrace=\lbrack a,a\rbrackを同一視する.本稿の定義では,集合[a,+]\lbrack a,+\infty\rbrack[,b]\lbrack-\infty,b\rbrack±\pm\inftyが属さないことに注意せよ.

m×nm\times n行列の集合SSが1次元閉区間の直積で表せるとき,SSm×nm\times n区間行列 (interval matrix) という.m=1m=1またはn=1n=1のときは区間ベクトル (interval vector) ともいう.

以下では閉区間を[x]\lbrack x\rbrackのように,ラベルxxに角括弧をつけて表記する.すなわち

[x]=[x,x](x=inf[x]  and  x=sup[x]) \lbrack x\rbrack = \lbrack x^{\triangledown},x^{\vartriangle}\rbrack\quad(x^{\triangledown}=\inf\lbrack x\rbrack\;\mathrel{\textrm{and}}\;x^{\vartriangle}=\sup\lbrack x\rbrack)

とする.また,1次元閉区間の全体集合をIR\mathbb{IR}と表す.区間ベクトル,区間行列の全体集合も同様に

IRn,IRm×n \mathbb{IR}^{n}, \quad\mathbb{IR}^{m\times n}

と書く.

区間行列は「各成分が閉区間である行列」とも「行列を端点とする閉区間」ともみなせる.そこで,次のように記号を定める.

m×nm\times n区間行列[X]={(uij)aijuijbij}\lbrack\bm{X}\rbrack=\lbrace(u_{i\mskip2mu\relax j})\mid a_{i\mskip2mu\relax j}\leq u_{i\mskip2mu\relax j}\leq b_{i\mskip2mu\relax j}\rbraceに対して,m×nm\times n行列X\bm{X}^{\triangledown}X\bm{X}^{\vartriangle}

X(aij),X(bij) \bm{X}^{\triangledown} \coloneqq (a_{i\mskip2mu\relax j}), \quad\bm{X}^{\vartriangle} \coloneqq (b_{i\mskip2mu\relax j})

で定義する.また,[X]\lbrack\bm{X}\rbrack

[X]=[X,X]=([xij]) \lbrack\bm{X}\rbrack = \lbrack\bm{X}^{\triangledown},\bm{X}^{\vartriangle}\rbrack = (\lbrack x_{i\mskip2mu\relax j}\rbrack)

とも表記する.ただし[xij]=[xij,xij]=[aij,bij]\lbrack x_{i\mskip2mu\relax j}\rbrack=\lbrack x_{i\mskip2mu\relax j}^{\triangledown},x_{i\mskip2mu\relax j}^{\vartriangle}\rbrack=\lbrack a_{i\mskip2mu\relax j},b_{i\mskip2mu\relax j}\rbrackである.

精度保証付き数値計算の文脈では,区間の下限をx\underline{x},上限をx\overline{x}と書くほうが標準的である.しかし,この記法は組版が少し面倒なので,本稿では用いない.

SSR\mathbb{R}の部分集合とする.SSを含む閉区間IIRI\in\mathbb{IR}で条件

JS    JI(JIR) J \supseteq S \implies J \supseteq I\quad(J\in\mathbb{IR})

を満たすものをSS区間包 (interval hull) といい,hullS\operatorname*{hull}Sと表す.ベクトルと行列についても同様に定義する.

任意のSRS\subseteq\mathbb{R}に対して,SSの区間包はただ一つ存在する.実際,SSの区間包は[infS,supS]\lbrack\inf S,\sup S\rbrackである.SSがなんらかのパラメータθ\thetaに関する像{f(θ)θP}\lbrace f(\theta)\mid\theta\in P\rbraceである場合,hullS\operatorname*{hull}S

hullθPf(θ) \operatorname*{hull}_{\theta\in P}f(\theta)

とも表す.

\starR\mathbb{R}上の(必ずしも全域で定義されない)2項演算とする.任意の[x],[y]IR\lbrack x\rbrack,\lbrack y\rbrack\in\mathbb{IR}に対して,閉区間[x][y]\lbrack x\rbrack\star\lbrack y\rbrack

[x][y]hull{uv(u,v)D([x],[y])} \lbrack x\rbrack\star\lbrack y\rbrack \coloneqq \operatorname*{hull}\lbrace u\star v\mid(u,v)\in D\cap(\lbrack x\rbrack,\lbrack y\rbrack)\rbrace

で定義する.ただし,DDuvu\star vが定義される(u,v)R2(u,v)\in\mathbb{R}^{2}の全体集合である.

\starが加減算のとき,[x][y]\lbrack x\rbrack\star\lbrack y\rbrackはより簡単に

[x]+[y]=[x+y,x+y],[x][y]=[xy,xy] \begin{gathered} \lbrack x\rbrack+\lbrack y\rbrack = \lbrack x^{\triangledown}+y^{\triangledown},x^{\vartriangle}+y^{\vartriangle}\rbrack,\\ \lbrack x\rbrack-\lbrack y\rbrack = \lbrack x^{\triangledown}-y^{\vartriangle},x^{\vartriangle}-y^{\triangledown}\rbrack \end{gathered}

と書ける.\starが乗除算のときはもう少し複雑であり

[x][y]=hull{xy,xy,xy,xy},[x][y]=hull{xy,xy,xy,xy}if0[y] \begin{gathered} \lbrack x\rbrack\cdot\lbrack y\rbrack = \operatorname*{hull}\lbrace x^{\triangledown}y^{\triangledown},x^{\vartriangle}y^{\triangledown},x^{\triangledown}y^{\vartriangle},x^{\vartriangle}y^{\vartriangle}\rbrace,\\ \frac{\lbrack x\rbrack}{\lbrack y\rbrack} = \operatorname*{hull}\biggl\lbrace\frac{x^{\triangledown}}{y^{\triangledown}},\frac{x^{\vartriangle}}{y^{\triangledown}},\frac{x^{\triangledown}}{y^{\vartriangle}},\frac{x^{\vartriangle}}{y^{\vartriangle}}\biggr\rbrace\mskip18mu\relax\textrm{if}\mskip6mu\relax 0\notin\lbrack y\rbrack \end{gathered}

となる(0[y]0\in\lbrack y\rbrackの場合は付録).

たとえば,[x]=[2,3]\lbrack x\rbrack=\lbrack 2,3\rbrack[y]=[5,2]\lbrack y\rbrack=\lbrack-5,-2\rbrackのとき

[x]+[y]=[3,1],[x][y]=[4,8],[x][y]=[15,4],[x][y]=[1.5,0.4] \begin{gathered} \lbrack x\rbrack+\lbrack y\rbrack = \lbrack-3,1\rbrack, \quad\lbrack x\rbrack-\lbrack y\rbrack = \lbrack 4,8\rbrack,\\ \lbrack x\rbrack\cdot\lbrack y\rbrack = \lbrack-15,-4\rbrack, \quad\frac{\lbrack x\rbrack}{\lbrack y\rbrack} = \lbrack-1.5,-0.4\rbrack \end{gathered}

である.

区間演算における減算は加算の逆演算ではなく,除算は乗算の逆演算ではない.実際,[x]=[0,1]\lbrack x\rbrack=\lbrack 0,1\rbrack[y]=[2,5]\lbrack y\rbrack=\lbrack 2,5\rbrackについて

[x][x]=[1,1]0,[y][y]=[0.4,2.5]1 \lbrack x\rbrack-\lbrack x\rbrack = \lbrack-1,1\rbrack \neq 0, \quad\frac{\lbrack y\rbrack}{\lbrack y\rbrack} = \lbrack 0.4,2.5\rbrack \neq 1

である.また,[z]=[1,3]\lbrack z\rbrack=\lbrack -1,3\rbrackとすると

[x]([y]+[z])=[0,1][1,8]=[0,8],[x][y]+[x][z]=[0,5]+[1,3]=[1,8] \begin{gathered} \lbrack x\rbrack\cdot(\lbrack y\rbrack+\lbrack z\rbrack) = \lbrack 0,1\rbrack\cdot\lbrack 1,8\rbrack = \lbrack 0,8\rbrack,\\ \lbrack x\rbrack\cdot\lbrack y\rbrack+\lbrack x\rbrack\cdot\lbrack z\rbrack = \lbrack 0,5\rbrack+\lbrack -1,3\rbrack = \lbrack -1,8\rbrack \end{gathered}

となるので,分配法則も成り立たない.その代わり,劣分配法則 (sub-distributive law)

[x]([y]+[z])[x][y]+[x][z] \lbrack x\rbrack\cdot(\lbrack y\rbrack+\lbrack z\rbrack) \subseteq \lbrack x\rbrack\cdot\lbrack y\rbrack+\lbrack x\rbrack\cdot\lbrack z\rbrack

が成立する.

区間ベクトルと区間行列に対しても,和と差は成分ごとに定義される.たとえば[x]=([x1][x2])T\lbrack\bm{x}\rbrack=(\begin{matrix}\lbrack x_{1}\rbrack & \lbrack x_{2}\rbrack\end{matrix})^{\mathsf{T}}[y]=([y1][y2])T\lbrack\bm{y}\rbrack=(\begin{matrix}\lbrack y_{1}\rbrack & \lbrack y_{2}\rbrack\end{matrix})^{\mathsf{T}}のときは

[x]±[y]=([x1]±[y1][x2]±[y2])T \lbrack\bm{x}\rbrack\pm\lbrack\bm{y}\rbrack = (\begin{matrix}\lbrack x_{1}\rbrack\pm\lbrack y_{1}\rbrack & \lbrack x_{2}\rbrack\pm\lbrack y_{2}\rbrack\end{matrix})^{\mathsf{T}}

である.

機械区間演算

区間演算を計算機に実装しようとすると,扱える数が浮動小数点数に制限される.上限と下限がともにFˉ\mathbb{\bar{F}}に属する閉区間を機械区間 (machine interval) といい,全体集合をIF\mathbb{IF}と書く.機械区間に対する機械区間演算は,区間演算を修正して,次のように定義される.

SSR\mathbb{R}の部分集合とする.SSを含む閉区間IIFI\in\mathbb{IF}で条件

JS    JI(JIF) J \supseteq S \implies J \supseteq I\quad(J\in\mathbb{IF})

を満たすものをSSF\mathbb{F}-区間包といい,hullFS\operatorname{hull}_{\mathbb{F}}Sと表す.ベクトルと行列についても同様に定義する.

\starR\mathbb{R}上の(必ずしも全域で定義されない)2項演算とする.任意の[x],[y]IF\lbrack x\rbrack,\lbrack y\rbrack\in\mathbb{IF}に対して,閉区間[x][y]\lbrack x\rbrack\star\lbrack y\rbrack

[x][y]hullF{uv(u,v)D([x],[y])} \lbrack x\rbrack\star\lbrack y\rbrack \coloneqq \operatorname{hull}_{\mathbb{F}}\lbrace u\star v\mid(u,v)\in D\cap(\lbrack x\rbrack,\lbrack y\rbrack)\rbrace

で定義する.ただし,DDuvu\star vが定義される(u,v)R2(u,v)\in\mathbb{R}^{2}の全体集合である.

機械区間演算について,\starが加減算のときは

[x]+[y]=[RD(x+y),RU(x+y)],[x][y]=[RD(xy),RU(xy)] \begin{gathered} \lbrack x\rbrack+\lbrack y\rbrack = \lbrack\operatorname{RD}(x^{\triangledown}+y^{\triangledown}),\operatorname{RU}(x^{\vartriangle}+y^{\vartriangle})\rbrack,\\ \lbrack x\rbrack-\lbrack y\rbrack = \lbrack\operatorname{RD}(x^{\triangledown}-y^{\vartriangle}),\operatorname{RU}(x^{\vartriangle}-y^{\triangledown})\rbrack \end{gathered}

となる.\starが乗除算のときはYamanaka (2015) を参照のこと.

べき級数演算

区間演算は,実数の演算を浮動小数点数の演算で不等式評価する技法といえる.同様に,関数の演算を浮動小数点数係数多項式の演算で不等式評価する技法が,Kashiwagi (1994) のべき級数演算である.

簡単のため,この記事ではIR\mathbb{IR}係数の区間多項式に関してべき級数演算を定義する.計算機に実装するときには,IR\mathbb{IR}IF\mathbb{IF}の違いに応じた修正が必要となる.

文字TTの式

f(T)=[a0]+[a1]T++[an]Tn([ai]IR) f(T) = \lbrack a_{0}\rbrack+\lbrack a_{1}\rbrack T+\dotsb+\lbrack a_{n}\rbrack T^{n}\quad(\lbrack a_{i}\rbrack\in\mathbb{IR})

区間多項式 (interval polynomial) という.

実数ttの代入は,区間演算によって

f(t)i=0n[ai]ti={i=0nuitiui[ai]} f(t) \coloneqq \sum_{i=0}^{n}\lbrack a_{i}\rbrack t^{i} = \Biggl\lbrace\sum_{i=0}^{n}u_{i}t^{i}\Biggm\vert u_{i}\in\lbrack a_{i}\rbrack\Biggr\rbrace

と定める.f(t)f(t)のことをf(T)T=tf(T)\rvert_{T=t}とも表記する.

f(T)f(T)を区間多項式,DDを1次元閉区間とする.グラフが2つの曲線x=inff(t)x=\inf f(t)x=supf(t)x=\sup f(t)で挟まれる連続関数x=ϕ(t)x=\phi(t)tDt\in D)の全体集合をbandDf(T)\operatorname*{band}_{D}f(T)と表す.

始域XX,終域YYの連続関数の全体集合をC(X,Y)C(X,Y)と表す.1次元閉区間DDに対して,連続関数の集合bandDf(T)\operatorname*{band}_{D}f(T)

bandDf(T){ϕC(D,R)ϕ(t)f(t)for allt} \operatorname*{band}_{D}f(T) \coloneqq \lbrace\phi\in C(D,\mathbb{R})\mid\phi(t)\in f(t)\mskip18mu\relax\textrm{for all}\mskip6mu\relax t\rbrace

で定義する.DDが文脈から明らかならbandf(T)\operatorname*{band}f(T)とも書く.

たいていの文献でbandf(T)\operatorname*{band}f(T)f(T)f(T)は同一視される.

連続関数ϕ(t)\phi(t)bandf(T)\operatorname*{band}f(T)に属する条件は

inff(t)ϕ(t)supf(t)for allt \inf f(t) \leq \phi(t) \leq \sup f(t)\mskip18mu\relax\textrm{for all}\mskip6mu\relax t

が成り立つことだから,区間多項式は関数に対する不等式評価に相当する.

この節では,区間多項式に対して,以下の基本的な演算を定める.どの演算も,不等式評価と矛盾しないように定義されることが重要である.

  1. 加減乗除
  2. 関数合成
  3. 積分
  4. 減次

区間多項式f(T)=i=0m[ai]Tif(T)=\sum_{i=0}^{m}\lbrack a_{i}\rbrack T^{i}g(T)=i=0n[bi]Tig(T)=\sum_{i=0}^{n}\lbrack b_{i}\rbrack T^{i}の加算・減算・乗算はそれぞれ

f(T)±g(T)i=0max{m,n}([ai]±[bi])Ti,f(T)g(T)i=0m+n(j=0i[aj][bij])Ti \begin{gathered} f(T)\pm g(T) \coloneqq \sum_{i=0}^{\max\lbrace m,n\rbrace}(\lbrack a_{i}\rbrack\pm\lbrack b_{i}\rbrack) T^{i},\\ f(T)g(T) \coloneqq \sum_{i=0}^{m+n}\Biggl(\sum_{j=0}^{i}\lbrack a_{j}\rbrack\lbrack b_{i-j}\rbrack\Biggr)T^{i} \end{gathered}

で定義される.ただし,[am+1]=[am+2]==0\lbrack a_{m+1}\rbrack=\lbrack a_{m+2}\rbrack=\dotsb=0かつ[bn+1]=[bn+2]==0\lbrack b_{n+1}\rbrack=\lbrack b_{n+2}\rbrack=\dotsb=0とする.

演算\mathord{\star}が加算・減算・乗算のいずれかであるとき,すべてのϕ1bandDf(T)\phi_{1}\in\operatorname*{band}_{D}f(T)ϕ2bandDg(T)\phi_{2}\in\operatorname*{band}_{D}g(T)について,ttの関数ϕ1(t)ϕ2(t)\phi_{1}(t)\star\phi_{2}(t)bandD(f(T)g(T))\operatorname*{band}_{D}(f(T)\star g(T))に属する.

\starが乗算の場合だけ証明する.ϕ1bandf(T)\phi_{1}\in\operatorname*{band}f(T)ϕ2bandg(T)\phi_{2}\in\operatorname*{band}g(T)を任意にとる.定義から,任意のtDt\in Dに対して,あるui[ai]u_{i}\in\lbrack a_{i}\rbrackvj[bj]v_{j}\in\lbrack b_{j}\rbrackが存在して

ϕ1(t)=i=0muiti,ϕ2(t)=j=0nvjtj \phi_{1}(t) = \sum_{i=0}^{m}u_{i}t^{i}, \quad\phi_{2}(t) = \sum_{j=0}^{n}v_{j}t^{j}

を満たす.k=i+jk=i+jとおくと

ϕ1(t)ϕ2(t)=i=0mj=0nuivjti+j=k=0m+ni=0kuivkitk,k=0m+ni=0kuivkitkk=0m+n(i=0k[ai][bki])tk \begin{gathered} \phi_{1}(t)\phi_{2}(t) = \sum_{i=0}^{m}\sum_{j=0}^{n}u_{i}v_{j}t^{i+j} = \sum_{k=0}^{m+n}\sum_{i=0}^{k}u_{i}v_{k-i}t^{k},\\ \sum_{k=0}^{m+n}\sum_{i=0}^{k}u_{i}v_{k-i}t^{k} \in \sum_{k=0}^{m+n}\Biggl(\sum_{i=0}^{k}\lbrack a_{i}\rbrack\lbrack b_{k-i}\rbrack\Biggr)t^{k} \end{gathered}

なのでϕ1(t)ϕ2(t)(f(T)g(T))T=t\phi_{1}(t)\phi_{2}(t)\in(f(T)g(T))\rvert_{T=t}である.

DD00が属する1次元閉区間とし,関数y=ψ(x)y=\psi(x)は区間[R]=tDf(t)\lbrack R\rbrack=\bigcup_{t\in D}f(t)を含む適当な開集合上で十分になめらかであるとする.このとき,ψ(x)\psi(x)のテイラー展開を利用して

ψ(f(T))i=0k11i!hullx[a0](diydxi)([a1]T+[a2]T2+)i+1k!hullx[R](dkydxk)([a1]T+[a2]T2+)k \begin{aligned} \psi(f(T)) &\coloneqq \sum_{i=0}^{k-1}\frac{1}{i!}\operatorname*{hull}_{x\in\lbrack a_{0}\rbrack}\biggl(\frac{\mathrm{d}^{i}y}{\mathrm{d}x^{i}}\biggr)(\lbrack a_{1}\rbrack T+\lbrack a_{2}\rbrack T^{2}+\dotsb)^{i}\\ &\hphantom{{}\coloneqq{}}+\frac{1}{k!}\operatorname*{hull}_{x\in\lbrack R\rbrack}\biggl(\frac{\mathrm{d}^{k}y}{\mathrm{d}x^{k}}\biggr)(\lbrack a_{1}\rbrack T+\lbrack a_{2}\rbrack T^{2}+\dotsb)^{k} \end{aligned}

とおく.ただし,kkは適当な自然数であり,f(T)0=1f(T)^{0}=1とする.

すべてのϕbandDf(T)\phi\in\operatorname*{band}_{D}f(T)について,合成関数ψ(ϕ(t))\psi(\phi(t))bandDψ(f(T))\operatorname*{band}_{D}\psi(f(T))に属する.

tDt\in Dを任意にとり,ui[ai]u_{i}\in\lbrack a_{i}\rbrackϕ(t)=uiti\phi(t)=\sum u_{i}t^{i}となるように選ぶ.u0f(0)[R]u_{0}\in f(0)\subseteq\lbrack R\rbrackだから,x0=ϕ(t)x_{0}=\phi(t)に対して,あるξhull{u0,x0}\xi\in\operatorname*{hull}\lbrace u_{0},x_{0}\rbraceが存在し

ψ(x0)=i=0k11i!diydxix=u0(x0u0)i=+1k!dkydxkx=ξ(x0u0)k \begin{aligned} \psi(x_{0}) &= \sum_{i=0}^{k-1}\frac{1}{i!}\frac{\mathrm{d}^{i}y}{\mathrm{d}x^{i}}\biggr\rvert_{x=u_{0}}(x_{0}-u_{0})^{i}\\ &\hphantom{{}={}}+\frac{1}{k!}\frac{\mathrm{d}^{k}y}{\mathrm{d}x^{k}}\biggr\rvert_{x=\xi}(x_{0}-u_{0})^{k} \end{aligned}

を満たす(テイラーの定理).よって

ψ(ϕ(t))=i=0k11i!diydxix=u0(u1t+u2t2+)i=+1k!dkydxkx=ξ(u1t+u2t2+)k \begin{aligned} \psi(\phi(t)) &= \sum_{i=0}^{k-1}\frac{1}{i!}\frac{\mathrm{d}^{i}y}{\mathrm{d}x^{i}}\biggr\rvert_{x=u_{0}}(u_{1}t+u_{2}t^{2}+\dotsb)^{i}\\ &\hphantom{{}={}}+\frac{1}{k!}\frac{\mathrm{d}^{k}y}{\mathrm{d}x^{k}}\biggr\rvert_{x=\xi}(u_{1}t+u_{2}t^{2}+\dotsb)^{k} \end{aligned}

なのでψ(ϕ(t))ψ(f(T))T=t\psi(\phi(t))\in\psi(f(T))\rvert_{T=t}である.

この命題を使うと,区間多項式の除算を定義できる.y=1/xy=1/xのとき

1i!diydxi=(1)ixi+1 \frac{1}{i!}\frac{\mathrm{d}^{i}y}{\mathrm{d}x^{i}} = \frac{(-1)^{i}}{x^{i+1}}

なので

g(T)f(T)g(T)1f(T),1f(T)i=0k1hullx[a0]((1)ixi+1)([a1]T+[a2]T2+)i+hullx[R]((1)kxk+1)([a1]T+[a2]T2+)k \begin{gathered} \frac{g(T)}{f(T)} \coloneqq g(T)\cdot\frac{1}{f(T)},\\ \begin{aligned} \frac{1}{f(T)} &\coloneqq \sum_{i=0}^{k-1}\operatorname*{hull}_{x\in\lbrack a_{0}\rbrack}\biggl(\frac{(-1)^{i}}{x^{i+1}}\biggr)(\lbrack a_{1}\rbrack T+\lbrack a_{2}\rbrack T^{2}+\dotsb)^{i}\\ &\hphantom{{}\coloneqq{}}+\operatorname*{hull}_{x\in\lbrack R\rbrack}\biggl(\frac{(-1)^{k}}{x^{k+1}}\biggr)(\lbrack a_{1}\rbrack T+\lbrack a_{2}\rbrack T^{2}+\dotsb)^{k} \end{aligned} \end{gathered}

とすればよい.ただし,関数y=1/xy=1/x[R]\lbrack R\rbrackでなめらかでなければならないから,0[R]0\notin\lbrack R\rbrackが必要である.特にk=1k=1のとき

1f(T)=1[a0]i=1n[ai]hullx[R](x2)Ti \frac{1}{f(T)} = \frac{1}{\lbrack a_{0}\rbrack}-\sum_{i=1}^{n}\frac{\lbrack a_{i}\rbrack}{\operatorname*{hull}_{x\in\lbrack R\rbrack}(x^{2})}T^{i}

であり,0[R]0\notin\lbrack R\rbrackより

1f(T)=1[a0]i=1n[ai][R]2Ti([R]=tDf(t)) \frac{1}{f(T)} = \frac{1}{\lbrack a_{0}\rbrack}-\sum_{i=1}^{n}\frac{\lbrack a_{i}\rbrack}{\lbrack R\rbrack^{2}}T^{i}\quad({\textstyle\lbrack R\rbrack=\bigcup_{t\in D}f(t)})

となる.

区間多項式f(T)=i=0n[ai]Tif(T)=\sum_{i=0}^{n}\lbrack a_{i}\rbrack T^{i}の積分を

f(T)dTi=0n[ai]i+1Ti+1 \int f(T)\,\mathrm{d}T \coloneqq \sum_{i=0}^{n}\frac{\lbrack a_{i}\rbrack}{i+1}T^{i+1}

で定義する.

0D0\in Dのとき,すべてのϕbandDf(T)\phi\in\operatorname*{band}_{D}f(T)について,ttの関数0tϕ(t)dt\int_{0}^{t}\phi(t')\,\mathrm{d}t'bandD(f(T)dT)\operatorname*{band}_{D}(\int f(T)\,\mathrm{d}T)に属する.このことは積分の単調性からただちにしたがう.

区間多項式のmm次への減次を

i[ai]Tii<m[ai]Ti+(tDim[ai]tim)Tm \sum_{i}\lbrack a_{i}\rbrack T^{i} \longrightarrow \sum_{i\lt m}\lbrack a_{i}\rbrack T^{i}+\Biggl(\bigcup_{t\in D}\sum_{i\geq m}\lbrack a_{i}\rbrack t^{i-m}\Biggr)T^{m}

で定義する.

定義から,減次f(T)g(T)f(T)\to g(T)に関して

bandDf(T)bandDg(T) \operatorname*{band}_{D}f(T) \subseteq \operatorname*{band}_{D}g(T)

が成立する.

以上で,IR\mathbb{IR}係数の区間多項式に対して,基本的な演算が定義された.IRd\mathbb{IR}^{d}係数の区間多項式は,IR\mathbb{IR}係数の区間多項式を自然に拡張して定義される.

文字TTの式

f(T)=[a0]+[a1]T++[an]Tn([ai]IRd) \bm{f}(T) = \lbrack\bm{a}_{0}\rbrack+\lbrack\bm{a}_{1}\rbrack T+\dotsb+\lbrack\bm{a}_{n}\rbrack T^{n}\quad(\lbrack\bm{a}_{i}\rbrack\in\mathbb{IR}^{d})

を区間多項式という.

f(T)\bm{f}(T)に対して[aij]\lbrack a_{i\mskip2mu\relax j}\rbrackfi(T)f_{i}(T)

([a1j][a2j][adj])=[aj],fi(T)=j=1n[aij]Tj \mathopen{}\mathclose{\left(\begin{matrix}\lbrack a_{1\mskip2mu\relax j}\rbrack \\ \lbrack a_{2\mskip2mu\relax j}\rbrack \\ \vdots \\ \lbrack a_{d\mskip2mu\relax j}\rbrack\end{matrix}\right)} = \lbrack\bm{a}_{j}\rbrack, \quad f_{i}(T) = \sum_{j=1}^{n}\lbrack a_{i\mskip2mu\relax j}\rbrack T^{j}

で定めると,f(T)\bm{f}(T)f1(T),f2(T),,fd(T)f_{1}(T),f_{2}(T),\dotsc,f_{d}(T)を並べてできるベクトル

(f1(T)f2(T)fd(T)) \mathopen{}\mathclose{\left(\begin{matrix}f_{1}(T) \\ f_{2}(T) \\ \vdots \\ f_{d}(T)\end{matrix}\right)}

と同一視できる.f(T)\bm{f}(T)に関する加算・減算・積分・減次は,この成分ごとの演算で定義される.

区間多項式と基本演算の組をべき級数演算 (power series arithmetic; PSA) という.区間多項式の次数をmm次に下げるとき,打ち切り

i[ai]Tiim[ai]Ti \sum_{i}\lbrack a_{i}\rbrack T^{i} \longrightarrow \sum_{i\leq m}\lbrack a_{i}\rbrack T^{i}

で次数下げする算法をType-I PSAといい,減次

i[ai]Tii<m[ai]Ti+(tDim[ai]tim)Tm \sum_{i}\lbrack a_{i}\rbrack T^{i} \longrightarrow \sum_{i\lt m}\lbrack a_{i}\rbrack T^{i}+\Biggl(\bigcup_{t\in D}\sum_{i\geq m}\lbrack a_{i}\rbrack t^{i-m}\Biggr)T^{m}

で次数下げする算法をType-II PSAという.

べき級数演算のこの定義は原形から少しずれている.本来の定義は柏木雅英(2018),または柏木啓一郎・柏木雅英(2011)を参照のこと.

次数下げをしなければ,べき級数演算によって区間多項式の次数は限りなく大きくなりうる.計算資源には限りがあるので,現実的にはどこかで次数下げが必要になる.Type-I PSAは,求めたいものが多項式の係数であり,bandf(T)\operatorname*{band}f(T)による関数の不等式評価を目的としない場合に使われる.対するType-II PSAは,求めたいものが関数の不等式評価である場合に使われる.

ピカール反復

べき級数演算は,初期値問題の精度保証付き数値計算に応用される.この節では,初期値問題の数学について簡単に説明する.

微分方程式と初期条件の組

{dx/dt=f(x,t)att>t0,x=x0att=t0 \begin{cases} \mathrm{d}\bm{x}/\mathrm{d}t = \bm{f}(\bm{x},t)\mskip12mu\relax\textrm{at}\mskip6mu\relax t\gt t_{0},\\ \bm{x} = \bm{x}_{0}\mskip12mu\relax\textrm{at}\mskip6mu\relax t=t_{0} \end{cases}

初期値問題 (initial value problem; IVP) という.dx/dt=f(x,t)\mathrm{d}\bm{x}/\mathrm{d}t=\bm{f}(\bm{x},t)の両辺をttで積分すると

x=dxdtdt=f(x,t)dt \bm{x} = \int\frac{\mathrm{d}\bm{x}}{\mathrm{d}t}\,\mathrm{d}t = \int\bm{f}(\bm{x},t)\,\mathrm{d}t

となるから,解x=ϕ(t)\bm{x}=\bm{\phi}(t)は条件

ϕ(t)=x0+t0tf(ϕ(t),t)dt \bm{\phi}(t) = \bm{x}_{0}+\int_{t_{0}}^{t}\bm{f}(\bm{\phi}(t'),t')\,\mathrm{d}t'

を満たす.両辺をttで微分すれば,この式を満たす連続関数ϕ\bm{\phi}はすべて初期値問題の解であることもわかる.つまり,関数ϕ\bm{\phi}に対して関数Pf(ϕ)P_{\bm{f}}(\bm{\phi})

Pf(ϕ) ⁣:tx0+t0tf(ϕ(t),t)dt P_{\bm{f}}(\bm{\phi})\colon t \mapsto \bm{x}_{0}+\int_{t_{0}}^{t}\bm{f}(\bm{\phi}(t'),t')\,\mathrm{d}t'

で定義すると,初期値問題を解くことは,連続関数ϕ\bm{\phi}の方程式

ϕ=Pf(ϕ) \bm{\phi} = P_{\bm{f}}(\bm{\phi})

を解くことと同値である.ϕ=Pf(ϕ)\bm{\phi}=P_{\bm{f}}(\bm{\phi})となるϕ\bm{\phi}PfP_{\bm{f}}不動点 (fixed point) という.

以下ではt0=0t_{0}=0とする.関数列ϕ0,ϕ1,\bm{\phi}_{0},\bm{\phi}_{1},\dotscを帰納的に

ϕ0(t)=x0,ϕn+1(t)=x0+0tf(ϕn(t),t)dt \bm{\phi}_{0}(t) = \bm{x}_{0}, \quad\bm{\phi}_{n+1}(t) = \bm{x}_{0}+\int_{0}^{t}\bm{f}(\bm{\phi}_{n}(t'),t')\,\mathrm{d}t'

で定める.この関数列はϕn+1=Pf(ϕn)\bm{\phi}_{n+1}=P_{\bm{f}}(\bm{\phi}_{n})を満たすから,nn\to\inftyでは

ϕ=Pf(ϕ) \bm{\phi}_{\infty} = P_{\bm{f}}(\bm{\phi}_{\infty})

となることが予想される.つまり,極限関数ϕ\bm{\phi}_{\infty}が初期値問題の解になる.解を構成するこの手続きをピカール反復 (Picard iteration) という.

ピカール反復について,次の定理が成り立つ.証明は付録に回す.

UURd\mathbb{R}^{d}の部分集合,x0\bm{x}_{0}UUの元,D=[0,h]RD=\lbrack 0,h\rbrack\subseteq\mathbb{R}を内部が空でない有界閉区間とする.また,連続関数

f ⁣:{(x,t)xU  and  tD}Rd \bm{f}\colon\lbrace(\bm{x},t)\mid\bm{x}\in U\;\mathrel{\textrm{and}}\;t\in D\rbrace \to \mathbb{R}^{d}

はリプシッツ条件を満たすとする.すなわち,定数L>0L\gt 0が存在し,すべてのx,xU\bm{x},\bm{x}'\in Uについて

suptDf(x,t)f(x,t)Lxx \sup_{t\in D}\lvert\bm{f}(\bm{x},t)-\bm{f}(\bm{x}',t)\rvert \leq L\lvert\bm{x}-\bm{x}'\rvert

となると仮定する.一様ノルムに関する閉部分集合KC(D,Rd)K\subseteq C(D,\mathbb{R}^{d})が以下の3条件を満たすとき,KKの元でPfP_{\bm{f}}の不動点となるものがただ一つ存在する.また,その不動点はピカール反復の極限関数である.

  1. KK\neq\emptysetである.
  2. すべてのϕK\bm{\phi}\in KtDt\in Dについてϕ(t)U\bm{\phi}(t)\in Uである.
  3. すべてのϕK\bm{\phi}\in KについてPf(ϕ)KP_{\bm{f}}(\bm{\phi})\in Kである.

KKが一様ノルムに関する閉部分集合であるとは,KKに属する関数の列が一様収束するとき,その極限関数もKKに属することをいう.

柏木の方法

この節では,Kashiwagi (1994) により提案された,初期値問題の精度保証付き数値解法の概要を示す.

重要なのは,p(T)\bm{p}(T)が区間多項式であるとき,bandDp(T)\operatorname*{band}_{D}\bm{p}(T)は一様ノルムに関するC(D,Rd)C(D,\mathbb{R}^{d})の閉部分集合となることである.なんらかの方法で,解の不等式評価となることが期待できる区間多項式

p(T)=[a0]+[a1]T++[an]Tn \bm{p}(T) = \lbrack\bm{a}_{0}\rbrack+\lbrack\bm{a}_{1}\rbrack T+\dotsb+\lbrack\bm{a}_{n}\rbrack T^{n}

を得たとする.K=bandDp(T)K=\operatorname{band}_{D}\bm{p}(T)が定理の3条件を満たすことを示せば,KK上に初期値問題の解がただ一つあると結論できる.

関数ϕbandDp(T)\bm{\phi}\in\operatorname{band}_{D}\bm{p}(T)を任意にとる.Pf(ϕ)P_{\bm{f}}(\bm{\phi})bandDp(T)\operatorname{band}_{D}\bm{p}(T)に属する条件は,すべてのtDt\in Dについて

x0+0tf(ϕ(t),t)dtp(t) \bm{x}_{0}+\int_{0}^{t}\bm{f}(\bm{\phi}(t'),t')\,\mathrm{d}t' \in \bm{p}(t)

が成り立つことである.式

x0+f(p(T),T)dT \bm{x}_{0}+\int\bm{f}(\bm{p}(T),T)\,\mathrm{d}T

をType-II PSAで計算して,得られる区間多項式をp(T)=[ai]Ti\bm{p}(T)'=\sum\lbrack\bm{a}_{i}'\rbrack T^{i}とおく.各iiについて[ai][ai]\lbrack\bm{a}_{i}'\rbrack\subseteq\lbrack\bm{a}_{i}\rbrackが確かめられれば

Pf(ϕ)bandDp(T)bandDp(T) P_{\bm{f}}(\bm{\phi}) \in \operatorname*{band}_{D}\bm{p}(T)' \subseteq \operatorname*{band}_{D}\bm{p}(T)

より,K=bandDp(T)K=\operatorname*{band}_{D}\bm{p}(T)が定理の条件を満たすといえる.

p(T)\bm{p}(T)を見つける一つの方法は,Type-I PSAでピカール反復を計算することである.すなわち,式

p0(T)=x0,pn+1(T)=x0+f(pn(T),T)dT \bm{p}_{0}(T) = \bm{x}_{0}, \quad\bm{p}_{n+1}(T) = \bm{x}_{0}+\int\bm{f}(\bm{p}_{n}(T),T)\,\mathrm{d}T

をType-I PSAで計算してp1(T),p2(T),\bm{p}_{1}(T),\bm{p}_{2}(T),\dotscを定義する.ただし,各pn(T)\bm{p}_{n}(T)nn次で打ち切る.このとき,pn(T)\bm{p}_{n}(T)は解x=ϕ(t)\bm{x}=\bm{\phi}(t)のテイラー多項式

x0+ϕ(0)t1!+ϕ(0)t22!++ϕ(n)(0)tnn! \bm{x}_{0}+\frac{\bm{\phi}'(0)t}{1!}+\frac{\bm{\phi}''(0)t^{2}}{2!}+\dotsb+\frac{\bm{\phi}^{(n)}(0)t^{n}}{n!}

を近似することがわかっている.そのため,ピカール反復を適当な回数nnで止めて,より高次の項の寄与を含むように項[v]Tn\lbrack\bm{v}\rbrack T^{n}をうまく設定し

p(T)=pn(T)+[v]Tn \bm{p}(T) = \bm{p}_{n}(T)+\lbrack\bm{v}\rbrack T^{n}

と定めれば,先述の方法がうまく機能すると期待できる.[v]\lbrack\bm{v}\rbrackの具体的な定め方は柏木雅英(2018)を見よ.

おわりに

最後に,意欲的な方のために,本文では書けなかったキーワードをいくつか示しておく.

  • 閉区間を中心と半径の組x=c,r=[cr,c+r]\langle x\rangle=\langle c,r\rangle=\lbrack c-r,c+r\rbrackで表現する中心・半径型区間演算があり,この記事で示した上端・下端型区間演算としばしば併用される.詳細は Yamanaka (2015) を見よ.
  • 関数の不等式評価を得る方法はType-II PSAだけではない.平均値形式や,Makino & Berz (1999) のテイラーモデルなどがよく知られている.
  • 常微分方程式の精度保証付き数値解法では,Moore法とLohner法が有名である.Moore法の解説はAlefeld & Mayer (2000) に,Lohner法の解説は柏木雅英(2018)にある.
  • この記事で説明した解法だけだと,長い区間0th0\leq t\leq hにわたる解の不等式評価を得ることができない.柏木啓一郎・柏木雅英(2011)はアフィン演算という技法を応用して,長い区間にわたる解の不等式評価を計算している.

付録A(0を元に持つ区間の除算)

0[y]0\in\lbrack y\rbrackの場合,[x]/[y]\lbrack x\rbrack/\lbrack y\rbrackは次のようになる.

  1. [y]=0\lbrack y\rbrack=0なら[x]/[y]=\lbrack x\rbrack/\lbrack y\rbrack=\emptysetである.
  2. [y]0\lbrack y\rbrack\neq 0[x]=0\lbrack x\rbrack=0なら[x]/[y]=0\lbrack x\rbrack/\lbrack y\rbrack=0である.
  3. y<0<yy^{\triangledown}\lt 0\lt y^{\vartriangle}[x]0\lbrack x\rbrack\neq 0なら[x]/[y]=[,+]\lbrack x\rbrack/\lbrack y\rbrack=\lbrack-\infty,+\infty\rbrackである.

いずれも成り立たないとき,[x]/[y]\lbrack x\rbrack/\lbrack y\rbrackは次の表の通りである.

y<y=0y^{\triangledown}\lt y^{\vartriangle}=00=y<y0=y^{\triangledown}\lt y^{\vartriangle}
x<0x^{\vartriangle}\lt 0[x/y,+]\lbrack x^{\vartriangle}/y^{\triangledown},+\infty\rbrack[,x/y]\lbrack-\infty,x^{\vartriangle}/y^{\vartriangle}\rbrack
x<x=0x^{\triangledown}\lt x^{\vartriangle}=0[0,+]\lbrack 0,+\infty\rbrack[,0]\lbrack-\infty,0\rbrack
x<0<xx^{\triangledown}\lt 0\lt x^{\vartriangle}[,+]\lbrack-\infty,+\infty\rbrack[,+]\lbrack-\infty,+\infty\rbrack
0=x<x0=x^{\triangledown}\lt x^{\vartriangle}[,0]\lbrack-\infty,0\rbrack[0,+]\lbrack 0,+\infty\rbrack
0<x0\lt x^{\triangledown}[x/y,+]\lbrack x^{\triangledown}/y^{\triangledown},+\infty\rbrack[,x/y]\lbrack-\infty,x^{\triangledown}/y^{\vartriangle}\rbrack

y<0<yy^{\triangledown}\lt 0\lt y^{\vartriangle}かつ (x<0  or  0<xx^{\vartriangle}\lt 0\;\mathrel{\textrm{or}}\;0\lt x^{\triangledown}) であるとき,除算の値域

R={uvu[x]  and  v[y]{0}} R = \biggl\lbrace\frac{u}{v}\biggm\vert u\in\lbrack x\rbrack\;\mathrel{\textrm{and}}\;v\in\lbrack y\rbrack\setminus\lbrace 0\rbrace\biggr\rbrace

は閉区間の和集合で

R=[,a][b,+]={[,x/y][x/y,+](x<0),[,x/y][x/y,+](x>0) \begin{aligned} R &= \lbrack-\infty,a\rbrack\cup\lbrack b,+\infty\rbrack\\ &= \begin{cases}\lbrack-\infty,x^{\vartriangle}/y^{\vartriangle}\rbrack\cup\lbrack x^{\vartriangle}/y^{\triangledown},+\infty\rbrack & (x^{\vartriangle}\lt 0),\\ \lbrack-\infty,x^{\triangledown}/y^{\triangledown}\rbrack\cup\lbrack x^{\triangledown}/y^{\vartriangle},+\infty\rbrack & (x^{\triangledown}\gt 0)\end{cases} \end{aligned}

と書ける.この場合,区間演算の定義通りに計算すると

[x][y]=hullR=[,+] \frac{\lbrack x\rbrack}{\lbrack y\rbrack} = \operatorname*{hull}R = \lbrack-\infty,+\infty\rbrack

となる.しかし,この計算結果からは「値域が開区間(a,b)(a,b)を含まない」という情報が抜け落ちてしまっている.それはもったいないので,[,a]\lbrack-\infty,a\rbrack[b,+]\lbrack b,+\infty\rbrackの組を計算結果とすることもある.

CAPD (version 5.2.0) のように,0[y]0\in\lbrack y\rbrackのとき[x]/[y]\lbrack x\rbrack/\lbrack y\rbrackは不正な式とする実装もある.

付録B(解の存在と一意性)

本文では証明を省略した,ピカール反復に関する定理を示す.

C(D,Rd)C(D,\mathbb{R}^{d})のノルムを

ϕ=suptDe2Ltϕ(t) \lVert\bm{\phi}\rVert = \sup_{t\in D}\lvert\mathrm{e}^{-2Lt}\bm{\phi}(t)\rvert

で定める.一様ノルムϕ=sup{ϕ(t)tD}\lVert\bm{\phi}\rVert_{\infty}=\sup\lbrace\lvert\bm{\phi}(t)\rvert\mid t\in D\rbraceとの間に不等式

e2Lhϕϕϕ \mathrm{e}^{-2Lh}\lVert\bm{\phi}\rVert_{\infty} \leq \lVert\bm{\phi}\rVert \leq \lVert\bm{\phi}\rVert_{\infty}

が成り立つので,C(D,Rd)C(D,\mathbb{R}^{d})はノルム\lVert\mathord{\bullet}\rVertに関するバナッハ空間であり,KKはこのノルムについても閉集合である.よって,PfP_{\bm{f}}がバナッハ空間(K,)(K,\lVert\mathord{\bullet}\rVert)における縮小写像であれば,バナッハの不動点定理から定理の主張がしたがう.すべてのϕ0,ϕ1K\bm{\phi}_{0},\bm{\phi}_{1}\in Kについて

Pf(ϕ1)Pf(ϕ0)suptD(e2Lt0tf(ϕ1(t),t)f(ϕ0(t),t)dt)suptD(e2Lt0tLϕ1(t)ϕ0(t)dt),0tLϕ1(t)ϕ0(t)dt0tLe2Ltϕ1ϕ0dt=e2Lt12ϕ1ϕ0 \begin{gathered} \begin{aligned} &\lVert P_{\bm{f}}(\bm{\phi}_{1})-P_{\bm{f}}(\bm{\phi}_{0})\rVert\\ &\leq \sup_{t\in D}\biggl(\mathrm{e}^{-2Lt}\int_{0}^{t}\lvert\bm{f}(\bm{\phi}_{1}(t'),t')-\bm{f}(\bm{\phi}_{0}(t'),t')\rvert\,\mathrm{d}t'\biggr)\\ &\leq \sup_{t\in D}\biggl(\mathrm{e}^{-2Lt}\int_{0}^{t}L\lvert\bm{\phi}_{1}(t')-\bm{\phi}_{0}(t')\rvert\,\mathrm{d}t'\biggr), \end{aligned}\\ \begin{aligned} \int_{0}^{t}L\lvert\bm{\phi}_{1}(t')-\bm{\phi}_{0}(t')\rvert\,\mathrm{d}t' &\leq \int_{0}^{t}L\mathrm{e}^{2Lt'}\lVert\bm{\phi}_{1}-\bm{\phi}_{0}\rVert\,\mathrm{d}t'\\ &= \frac{\mathrm{e}^{2Lt}-1}{2}\lVert\bm{\phi}_{1}-\bm{\phi}_{0}\rVert \end{aligned} \end{gathered}

より

Pf(ϕ1)Pf(ϕ0)suptD(1e2Lt2)ϕ1ϕ012ϕ1ϕ0 \begin{aligned} \lVert P_{\bm{f}}(\bm{\phi}_{1})-P_{\bm{f}}(\bm{\phi}_{0})\rVert &\leq \sup_{t\in D}\biggl(\frac{1-\mathrm{e}^{-2Lt}}{2}\biggr)\lVert\bm{\phi}_{1}-\bm{\phi}_{0}\rVert\\ &\leq \frac{1}{2}\lVert\bm{\phi}_{1}-\bm{\phi}_{0}\rVert \end{aligned}

だから,PfP_{\bm{f}}は縮小写像である.

参考文献

  1. Alefeld, Götz; Mayer, Günter. Interval analysis: theory and applications. J. Comput. Appl. Math. 2000, vol. 121, p. 421-464. https://doi.org/10.1016/S0377-0427(00)00342-3, (accessed 2023-12-11).
  2. Boldo, Sylvie et al. Floating-point arithmetic. Acta Numerica. 2023, vol. 32, p. 203-290. https://doi.org/10.1017/S0962492922000101, (accessed 2023-12-05).
  3. Kapela, Tomasz et al. CAPD::DynSys: a flexible C++ toolbox for rigorous numerical analysis of dynamical systems. Commun. Nonlinear Sci. Numer. Simul. 2021, vol. 101, 105578.
  4. 柏木啓一郎, 柏木雅英. 平均値形式とアフィン演算を用いた常微分方程式の精度保証法. 日本応用数理学会論文誌. 2011, vol. 21, no. 1, p. 37-58, (online), 入手先, J-STAGE, (参照 2023-12-15).
  5. Kashiwagi, Masahide. “Numerical Validation for Ordinary Differential Equations Using Power Series Arithmetic”. Proc. 1994 Symposium on Nonlinear Theory and its Applications. Kagoshima, Japan, 1994-10-06/08, IEICE, 1994, p. 243-246.
  6. 柏木雅英. “常微分方程式の精度保証付き数値解法”. 精度保証付き数値計算の基礎. 大石進一編. コロナ社, 2018, p. 165-196.
  7. 柏木雅英. kv. version 0.4.55, 2022-09-16. http://verifiedby.me/kv/, (参照 2023-12-06).
  8. Makino, Kyoko; Berz, Martin. Efficient Control of the Dependency Problem Based on Taylor Model Methods. Reliable Computing. 1999, vol. 5, p. 3-12, (online), available from SpringerLink, (accessed 2023-12-15).
  9. 荻田武史, 柏木雅英, 劉雪峰. “序論”. 精度保証付き数値計算の基礎. 大石進一編. コロナ社, 2018, p. 11-32.
  10. Yamanaka, Naoya; Oishi, Shin’ichi. Interval Arithmetic and Its Implementations. RIMS Kôkyûroku Bessatsu. 2015, B54, p. 71-98. http://hdl.handle.net/2433/241301, (accessed 2023-12-05).
  11. IEEE Std 754: 2008. Standard for Floating-Point Arithmetic.