Method for bounding the errors of numerical computations
許容関数(青緑)と区間値近似(赤) 区間演算( 区間数学、 区間分析、 区間計算 と も呼ばれる )は、関数の 境界 を計算することで、 数学計算 における 丸め誤差 や 測定誤差を 軽減するために使用される数学的手法です。区間 演算 を含む 数値解析法は 、比較的信頼性が高く、数学的に正しい結果を保証できます。区間演算または区間数学では、値を単一の数値として表すのではなく、各値を複数の 可能性の範囲 として表します。
数学的には、区間演算は不確実な実数値 変数 を扱うのではなく、 が取り得る値の範囲を定義する 区間 を扱います 。言い換えれば、変数 の任意の値は と の間の閉区間に存在します 。関数 を に適用すると、 すべての に対して のすべての可能な値を含む 区間が生成されます 。 x {\displaystyle x} [ a , b ] {\displaystyle [a,b]} x {\displaystyle x} x {\displaystyle x} a {\displaystyle a} b {\displaystyle b} f {\displaystyle f} x {\displaystyle x} [ c , d ] {\displaystyle [c,d]} f ( x ) {\displaystyle f(x)} x ∈ [ a , b ] {\displaystyle x\in [a,b]}
区間演算は様々な用途に適していますが、最も一般的な用途は科学研究、特にソフトウェアによる計算において、計算における 丸め誤差 や、物理的・技術的パラメータの正確な値に関する知識の不確実性を追跡するために使用されます。後者は、測定誤差や部品の許容誤差、あるいは計算精度の限界によって生じることがよくあります。区間演算は、方程式( 微分方程式 など)や 最適化問題 に対する確実な解を求めるのにも役立ちます。
導入 区間演算 の主な目的は、 1つ以上の変数における関数の値域の 上限と下限を 簡便に計算する方法を提供することです。これらの端点は、必ずしも真の値域の 上限 または 下限で はありません。なぜなら、これらの値を正確に計算することは困難または不可能な場合があるからです。境界は、関数の値域を部分集合として含んでいれば十分です。
この処理は、通常、実区間に限定されるので、
[ a , b ] = { x ∈ R ∣ a ≤ x ≤ b } , {\displaystyle [a,b]=\{x\in \mathbb {R} \mid a\leq x\leq b\},} ここで 、 と は許容されます。 のいずれかが 無限大の場合 、区間は無限区間となります。 が両方とも無限大の場合、区間は拡張された実数直線となります。実数は区間 と解釈できるため、区間 と実数は自由に組み合わせることができます。 a = − ∞ {\displaystyle a={-\infty }} b = ∞ {\displaystyle b={\infty }} a {\displaystyle a} b {\displaystyle b} r {\displaystyle r} [ r , r ] , {\displaystyle [r,r],}
例 身長1.80mの人の体重m (キログラム) に対する BMI(ボディマス指数) 人のBMI(ボディマス指数 )の計算について考えてみましょう 。BMIは、体重(キログラム)を身長(メートル)の2乗で割ることで算出されます。1キログラム単位の精度を持つ体重計を使用するとします。この体重計では中間値は判別できず、実際の体重は最も近い整数に切り上げられます。例えば、体重計は最も近いキログラム単位の値しか表示できないため、79.6 kgと80.3 kgは区別できません。体重計が80 kgを示しているときに、その人の体重が ちょうど 80.0 kgである可能性は低いです。したがって、80 kgと表示されている体重計は、79.5 kgと80.5 kgの間、つまり間隔 を示しています 。 [ 79.5 , 80.5 ) {\displaystyle [79.5,80.5)}
体重80kg、身長180cmの男性のBMIは約24.7です。体重79.5kgで身長が同じ場合のBMIは24.537、体重80.5kgの場合は24.846となります。体重は指定された体重範囲内では常に増加し続けるため、真のBMIは必ず範囲内に収まります 。範囲全体が正常体重と過剰体重の境界値である25未満であるため、この男性は正常体重であると確実に結論付けることができます。 [ 24.537 , 24.846 ] {\displaystyle [24.537,24.846]}
この例の誤差は結論(標準体重)には影響しませんが、一般的にはそうではありません。男性の体重がもう少し多ければ、BMIの範囲にカットオフ値25が含まれる可能性があります。そのような場合、体重計の精度では明確な結論を出すには不十分です。
BMIの例の範囲は、 この区間が計算された区間のスーパーセットであるため、 と報告できます。ただし、この区間にはBMIの可能性のある値が含まれないため、 と報告することはできません 。 [ 24.5 , 24.9 ] {\displaystyle [24.5,24.9]} [ 24.6 , 24.8 ] {\displaystyle [24.6,24.8]}
複数の間隔 身長L(メートル)と体重の関係におけるBMI(ボディマス指数) 身長と体重はどちらもBMIの値に影響します。上記の例では体重の変化のみを考慮しましたが、身長にも不確実性があります。メートル単位での身長測定は通常、最も近いセンチメートルに丸められます。例えば、1.79メートルという記録された測定値は、区間 内の身長を表します 。BMIは体重に対して均一に増加し、身長に対して均一に減少するため、各区間の最小値と最大値を代入し、最小値と最大値を境界として選択することで、誤差区間を計算できます。したがって、BMIは区間 内に収まる必要があります。 [ 1.785 , 1.795 ) {\displaystyle [1.785,1.795)}
[ 79.5 , 80.5 ) [ 1.785 , 1.795 ) 2 ⊆ [ 24.673 , 25.266 ] . {\displaystyle {\frac {[79.5,80.5)}{[1.785,1.795)^{2}}}\subseteq [24.673,25.266].} この場合、男性は標準体重であるか太りすぎである可能性があります。体重と身長の測定値は、確定的な結論を出すには正確性が不十分でした。
区間演算子 加算や乗算などの2つの区間に対する 二項演算は次のように定義されます。 ⋆ {\displaystyle \star }
[ x 1 , x 2 ] ⋆ [ y 1 , y 2 ] = { x ⋆ y | x ∈ [ x 1 , x 2 ] ∧ y ∈ [ y 1 , y 2 ] } . {\displaystyle [x_{1},x_{2}]{\,\star \,}[y_{1},y_{2}]=\{x\star y\,|\,x\in [x_{1},x_{2}]\,\land \,y\in [y_{1},y_{2}]\}.} 言い換えれば、 と が対応する区間内にある場合の、 のすべての可能な値の集合です 。 が 区間上の各被演算子に対して 単調で ある場合 (これは四則演算(分母に が含まれる場合の除算を除く)に当てはまります )、極値は被演算子区間の端点で発生します。すべての組み合わせを書き出すと、これを表現する方法の1つは、 x ⋆ y {\displaystyle x\star y} x {\displaystyle x} y {\displaystyle y} ⋆ {\displaystyle \star } 0 {\displaystyle 0}
[ x 1 , x 2 ] ⋆ [ y 1 , y 2 ] = [ min { x 1 ⋆ y 1 , x 1 ⋆ y 2 , x 2 ⋆ y 1 , x 2 ⋆ y 2 } , max { x 1 ⋆ y 1 , x 1 ⋆ y 2 , x 2 ⋆ y 1 , x 2 ⋆ y 2 } ] , {\displaystyle [x_{1},x_{2}]\star [y_{1},y_{2}]=\left[\min\{x_{1}\star y_{1},x_{1}\star y_{2},x_{2}\star y_{1},x_{2}\star y_{2}\},\max\{x_{1}\star y_{1},x_{1}\star y_{2},x_{2}\star y_{1},x_{2}\star y_{2}\}\right],} ただし、 および すべて に対して が定義されていることとする 。 x ⋆ y {\displaystyle x\star y} x ∈ [ x 1 , x 2 ] {\displaystyle x\in [x_{1},x_{2}]} y ∈ [ y 1 , y 2 ] {\displaystyle y\in [y_{1},y_{2}]}
実際のアプリケーションでは、これをさらに簡略化できます。
追加 : [ x 1 , x 2 ] + [ y 1 , y 2 ] = [ x 1 + y 1 , x 2 + y 2 ] {\displaystyle [x_{1},x_{2}]+[y_{1},y_{2}]=[x_{1}+y_{1},x_{2}+y_{2}]} 減算 : [ x 1 , x 2 ] − [ y 1 , y 2 ] = [ x 1 − y 2 , x 2 − y 1 ] {\displaystyle [x_{1},x_{2}]-[y_{1},y_{2}]=[x_{1}-y_{2},x_{2}-y_{1}]} 掛け算 : [ x 1 , x 2 ] ⋅ [ y 1 , y 2 ] = [ min { x 1 y 1 , x 1 y 2 , x 2 y 1 , x 2 y 2 } , max { x 1 y 1 , x 1 y 2 , x 2 y 1 , x 2 y 2 } ] {\displaystyle [x_{1},x_{2}]\cdot [y_{1},y_{2}]=[\min\{x_{1}y_{1},x_{1}y_{2},x_{2}y_{1},x_{2}y_{2}\},\max\{x_{1}y_{1},x_{1}y_{2},x_{2}y_{1},x_{2}y_{2}\}]} 部門 : どこで [ x 1 , x 2 ] [ y 1 , y 2 ] = [ x 1 , x 2 ] ⋅ 1 [ y 1 , y 2 ] , {\displaystyle {\frac {[x_{1},x_{2}]}{[y_{1},y_{2}]}}=[x_{1},x_{2}]\cdot {\frac {1}{[y_{1},y_{2}]}},} 1 [ y 1 , y 2 ] = [ 1 y 2 , 1 y 1 ] if 0 ∉ [ y 1 , y 2 ] 1 [ y 1 , 0 ] = [ − ∞ , 1 y 1 ] 1 [ 0 , y 2 ] = [ 1 y 2 , ∞ ] 1 [ y 1 , y 2 ] = [ − ∞ , 1 y 1 ] ∪ [ 1 y 2 , ∞ ] ⊆ [ − ∞ , ∞ ] if 0 ∈ ( y 1 , y 2 ) {\displaystyle {\begin{aligned}{\frac {1}{[y_{1},y_{2}]}}&=\left[{\tfrac {1}{y_{2}}},{\tfrac {1}{y_{1}}}\right]&&{\textrm {if}}\;0\notin [y_{1},y_{2}]\\{\frac {1}{[y_{1},0]}}&=\left[-\infty ,{\tfrac {1}{y_{1}}}\right]\\{\frac {1}{[0,y_{2}]}}&=\left[{\tfrac {1}{y_{2}}},\infty \right]\\{\frac {1}{[y_{1},y_{2}]}}&=\left[-\infty ,{\tfrac {1}{y_{1}}}\right]\cup \left[{\tfrac {1}{y_{2}}},\infty \right]\subseteq [-\infty ,\infty ]&&{\textrm {if}}\;0\in (y_{1},y_{2})\end{aligned}}} 最後のケースでは、 の除外に関する有用な情報が失われます。したがって、 と を別々の区間として 扱うのが一般的です。より一般的には、不連続関数を扱う場合、 という形式のいわゆる 多重区間 を用いて計算を行うと便利な場合があります。 対応する 多重区間演算は、 (通常は互いに素な)区間の集合を維持し、重なり合う区間を結合することも提供します。 [1] ( 1 / y 1 , 1 / y 2 ) {\displaystyle (1/y_{1},1/y_{2})} [ − ∞ , 1 y 1 ] {\displaystyle \left[-\infty ,{\tfrac {1}{y_{1}}}\right]} [ 1 y 2 , ∞ ] {\displaystyle \left[{\tfrac {1}{y_{2}}},\infty \right]} ⋃ i [ a i , b i ] . {\textstyle \bigcup _{i}\left[a_{i},b_{i}\right].}
正の区間の乗算 区間乗算は多くの場合2回の乗算のみで済みます。 、 が非負の場合、 x 1 {\displaystyle x_{1}} y 1 {\displaystyle y_{1}}
[ x 1 , x 2 ] ⋅ [ y 1 , y 2 ] = [ x 1 ⋅ y 1 , x 2 ⋅ y 2 ] , if x 1 , y 1 ≥ 0. {\displaystyle [x_{1},x_{2}]\cdot [y_{1},y_{2}]=[x_{1}\cdot y_{1},x_{2}\cdot y_{2}],\qquad {\text{ if }}x_{1},y_{1}\geq 0.} この乗算は、辺の長さが変化する長方形の面積として解釈できます。結果の区間は、最小から最大まで、あらゆる面積の範囲をカバーします。
これらの定義の助けを借りれば、 、 などの単純な関数の範囲を計算することがすでに可能です。 たとえば、 および の場合 : f ( a , b , x ) = a ⋅ x + b . {\displaystyle f(a,b,x)=a\cdot x+b.} a = [ 1 , 2 ] {\displaystyle a=[1,2]} b = [ 5 , 7 ] {\displaystyle b=[5,7]} x = [ 2 , 3 ] {\displaystyle x=[2,3]}
f ( a , b , x ) = ( [ 1 , 2 ] ⋅ [ 2 , 3 ] ) + [ 5 , 7 ] = [ 1 ⋅ 2 , 2 ⋅ 3 ] + [ 5 , 7 ] = [ 7 , 13 ] . {\displaystyle f(a,b,x)=([1,2]\cdot [2,3])+[5,7]=[1\cdot 2,2\cdot 3]+[5,7]=[7,13].}
表記 間隔の表記を短縮するには、括弧を使用できます。
[ x ] ≡ [ x 1 , x 2 ] {\displaystyle [x]\equiv [x_{1},x_{2}]} 区間を表すために用いることができます。このような簡潔な表記法では、 一点区間 と一般区間を混同しないように注意してください。すべての区間の集合に対して、 [ x ] {\displaystyle [x]} [ x 1 , x 1 ] {\displaystyle [x_{1},x_{1}]}
[ R ] := { [ x 1 , x 2 ] | x 1 ≤ x 2 and x 1 , x 2 ∈ R ∪ { − ∞ , ∞ } } {\displaystyle [\mathbb {R} ]:=\left\{\,[x_{1},x_{2}]\,|\,x_{1}\leq x_{2}{\text{ and }}x_{1},x_{2}\in \mathbb {R} \cup \{-\infty ,\infty \}\right\}} 略語として。間隔のベクトルには 太字フォントを使用できます 。 ( [ x ] 1 , … , [ x ] n ) ∈ [ R ] n {\displaystyle \left([x]_{1},\ldots ,[x]_{n}\right)\in [\mathbb {R} ]^{n}} [ x ] {\displaystyle [\mathbf {x} ]}
基本関数 単調関数の値 4 つの基本演算子以外の区間関数も定義できます。
単調関数 (1変数)の場合 、値の範囲は簡単に計算できます。 が区間内で単調増加(または減少)する場合、 (または) となる すべての に対して、 となります 。 f : R → R {\displaystyle f:\mathbb {R} \to \mathbb {R} } [ x 1 , x 2 ] , {\displaystyle [x_{1},x_{2}],} y 1 , y 2 ∈ [ x 1 , x 2 ] {\displaystyle y_{1},y_{2}\in [x_{1},x_{2}]} y 1 < y 2 , {\displaystyle y_{1}<y_{2},} f ( y 1 ) ≤ f ( y 2 ) {\displaystyle f(y_{1})\leq f(y_{2})} f ( y 2 ) ≤ f ( y 1 ) {\displaystyle f(y_{2})\leq f(y_{1})}
したがって、区間に対応する範囲は、 関数をその端点に適用することによって計算できます。 [ y 1 , y 2 ] ⊆ [ x 1 , x 2 ] {\displaystyle [y_{1},y_{2}]\subseteq [x_{1},x_{2}]}
f ( [ y 1 , y 2 ] ) = [ min { f ( y 1 ) , f ( y 2 ) } , max { f ( y 1 ) , f ( y 2 ) } ] . {\displaystyle f([y_{1},y_{2}])=\left[\min \left\{f(y_{1}),f(y_{2})\right\},\max \left\{f(y_{1}),f(y_{2})\right\}\right].} このことから、区間関数の次の基本機能を簡単に定義できます。
指数 関数 : a [ x 1 , x 2 ] = [ a x 1 , a x 2 ] {\displaystyle a^{[x_{1},x_{2}]}=[a^{x_{1}},a^{x_{2}}]} a > 1 , {\displaystyle a>1,} 対数 : 正の区間 および log a [ x 1 , x 2 ] = [ log a x 1 , log a x 2 ] {\displaystyle \log _{a}[x_{1},x_{2}]=[\log _{a}{x_{1}},\log _{a}{x_{2}}]} [ x 1 , x 2 ] {\displaystyle [x_{1},x_{2}]} a > 1 , {\displaystyle a>1,} 奇数乗: 奇数の場合 [ x 1 , x 2 ] n = [ x 1 n , x 2 n ] {\displaystyle [x_{1},x_{2}]^{n}=[x_{1}^{n},x_{2}^{n}]} n ∈ N . {\displaystyle n\in \mathbb {N} .} 偶数乗の場合、考慮する値の範囲は重要であり、乗算を行う前に処理する必要があります。例えば、 の 場合 、 の区間が生成されるはずです。 しかし、 の区間乗算を繰り返すことで が取られると 、結果は 必要以上に広くなります。 x n {\displaystyle x^{n}} x ∈ [ − 1 , 1 ] {\displaystyle x\in [-1,1]} [ 0 , 1 ] {\displaystyle [0,1]} n = 2 , 4 , 6 , … . {\displaystyle n=2,4,6,\ldots .} [ − 1 , 1 ] n {\displaystyle [-1,1]^{n}} [ − 1 , 1 ] ⋅ [ − 1 , 1 ] ⋅ ⋯ ⋅ [ − 1 , 1 ] {\displaystyle [-1,1]\cdot [-1,1]\cdot \cdots \cdot [-1,1]} [ − 1 , 1 ] , {\displaystyle [-1,1],}
より一般的には、区分的単調関数については、区間の端点 、を、 区間内の いわゆる 臨界点(関数の単調性が方向を変える点)と共に考慮すれば十分であると言えます。 正弦 関数と 余弦 関数の場合、臨界点はそれぞれ または です 。したがって、区間に少なくとも 2 つの極値が含まれる場合、結果として得られる区間は となるため、区間内の最大 5 つの点のみを考慮する必要があります 。正弦関数と余弦関数の場合、臨界点は簡単に事前に計算できる値、つまり -1、0、1 につながるため、完全な評価が必要なのは端点のみです。 x 1 {\displaystyle x_{1}} x 2 {\displaystyle x_{2}} ( 1 2 + n ) π {\displaystyle \left({\tfrac {1}{2}}+n\right)\pi } n π {\displaystyle n\pi } n ∈ Z {\displaystyle n\in \mathbb {Z} } [ − 1 , 1 ] {\displaystyle [-1,1]}
一般関数の区間拡張 一般的に、多くの関数の出力区間について、このような単純な記述を見つけることは容易ではないかもしれません。しかし、関数を区間演算に拡張することは依然として可能です。が 実ベクトルから実数への関数である場合、 はの 区間拡張 と呼ばれます 。 f : R n → R {\displaystyle f:\mathbb {R} ^{n}\to \mathbb {R} } [ f ] : [ R ] n → [ R ] {\displaystyle [f]:[\mathbb {R} ]^{n}\to [\mathbb {R} ]} f {\displaystyle f}
[ f ] ( [ x ] ) ⊇ { f ( y ) ∣ y ∈ [ x ] } . {\displaystyle [f]([\mathbf {x} ])\supseteq \{f(\mathbf {y} )\mid \mathbf {y} \in [\mathbf {x} ]\}.} この区間拡張の定義では、正確な結果は得られません。例えば、指数関数の拡張として と はどちらも 許容 されます。より厳密な拡張が望ましいですが、計算コストと不正確さの相対的なバランスを考慮する必要があります。この場合、 最も厳密な結果をもたらす を選択すべきです。 [ f ] ( [ x 1 , x 2 ] ) = [ e x 1 , e x 2 ] {\displaystyle [f]([x_{1},x_{2}])=[e^{x_{1}},e^{x_{2}}]} [ g ] ( [ x 1 , x 2 ] ) = [ − ∞ , ∞ ] {\displaystyle [g]([x_{1},x_{2}])=[{-\infty },{\infty }]} [ f ] {\displaystyle [f]}
実数式が与えられた場合、その 部分式、関数、演算子のそれぞれの区間拡張を使用して
、その 自然な区間拡張が実現されます。
テイラー 区間拡張 (次数 )は、次 のように定義される 回微分可能な関数である。 k {\displaystyle k} k + 1 {\displaystyle k+1} f {\displaystyle f}
[ f ] ( [ x ] ) := f ( y ) + ∑ i = 1 k 1 i ! D i f ( y ) ⋅ ( [ x ] − y ) i + [ r ] ( [ x ] , [ x ] , y ) , {\displaystyle [f]([\mathbf {x} ]):=f(\mathbf {y} )+\sum _{i=1}^{k}{\frac {1}{i!}}\mathrm {D} ^{i}f(\mathbf {y} )\cdot ([\mathbf {x} ]-\mathbf {y} )^{i}+[r]([\mathbf {x} ],[\mathbf {x} ],\mathbf {y} ),} ある に対して 、 は 点 における の - 階微分 であり 、はテイラー剰余 の区間拡張です 。 y ∈ [ x ] {\displaystyle \mathbf {y} \in [\mathbf {x} ]} D i f ( y ) {\displaystyle \mathrm {D} ^{i}f(\mathbf {y} )} i {\displaystyle i} f {\displaystyle f} y {\displaystyle \mathbf {y} } [ r ] {\displaystyle [r]}
r ( x , ξ , y ) = 1 ( k + 1 ) ! D k + 1 f ( ξ ) ⋅ ( x − y ) k + 1 . {\displaystyle r(\mathbf {x} ,\xi ,\mathbf {y} )={\frac {1}{(k+1)!}}\mathrm {D} ^{k+1}f(\xi )\cdot (\mathbf {x} -\mathbf {y} )^{k+1}.} 平均値形式 ベクトルは と の 間にあり 、 によって保護されています 。通常、 を 区間の中点とし、自然区間拡張を用いて剰余を評価します。 ξ {\displaystyle \xi } x {\displaystyle \mathbf {x} } y {\displaystyle \mathbf {y} } x , y ∈ [ x ] {\displaystyle \mathbf {x} ,\mathbf {y} \in [\mathbf {x} ]} ξ {\displaystyle \xi } [ x ] {\displaystyle [\mathbf {x} ]} y {\displaystyle \mathbf {y} }
次数のテイラー区間拡張の特殊なケースは 平均値形式 とも呼ばれます 。 k = 0 {\displaystyle k=0}
複素区間演算 区間は中心から指定された距離内にある点の集合として定義することができ、この定義は実数から 複素数 に拡張することができる。 [2] もう 1 つの拡張では、区間を複素平面内の長方形として定義する。実数の計算の場合と同様に、複素数の計算には不確実なデータが含まれる。したがって、区間数は実数の閉区間であり、複素数は 実数 の順序付きペアであるという事実を考慮すると、区間演算の適用を実数の計算における不確実性の尺度に限定する理由はない。 [3] このように、区間演算は複素区間数を介して拡張され、複素数の計算における不確実性の領域を判定することができる。複素区間演算は長方形または円板を使用して定義することができ、それぞれに長所と短所がある。 [3]
実区間数(実閉区間)の基本的な代数演算は複素数にも拡張できます。したがって、複素区間演算が通常の複素演算と類似しているものの、同一ではないことは驚くべきことではありません。 [3] 実区間演算の場合と同様に、複素区間数の加法と乗法の間には分配法則は存在せず、特定の特殊な場合を除いて複素区間数には逆元が常に存在するとは限らないことが示されています。 [3] 通常の複素演算の他の2つの有用な性質は、複素区間演算では成立しません。通常の複素共役の加法性と乗法性は、複素区間共役には成立しません。 [3]
区間演算は、同様の方法で、 四元数 や 八元数 などの他の多次元 数体系 に拡張することができますが、通常の演算の他の有用な特性を犠牲にする必要があります。 [3]
間隔法 古典的な数値解析の方法は、数値間の依存関係が通常考慮されないため、区間値アルゴリズムに 1 対 1 で転送することはできません。
丸め区間演算 異なる丸めレベルでの外界 実際の実装で効果的に動作させるには、区間演算は浮動小数点演算と互換性がなければなりません。以前の演算は正確な演算に基づいていましたが、一般的には高速な数値解法が利用できない場合があります。関数 の および の値の範囲は、 例えば です 。同じ計算を1桁精度で行うと、結果は通常 になります 。しかし となるため、このアプローチは の定義域の一部が 失われるため、区間演算の基本原則に反します。代わりに、外向きに丸められた解が 使用されます。 f ( x , y ) = x + y {\displaystyle f(x,y)=x+y} x ∈ [ 0.1 , 0.8 ] {\displaystyle x\in [0.1,0.8]} y ∈ [ 0.06 , 0.08 ] {\displaystyle y\in [0.06,0.08]} [ 0.16 , 0.88 ] {\displaystyle [0.16,0.88]} [ 0.2 , 0.9 ] {\displaystyle [0.2,0.9]} [ 0.2 , 0.9 ] ⊉ [ 0.16 , 0.88 ] {\displaystyle [0.2,0.9]\not \supseteq [0.16,0.88]} f ( [ 0.1 , 0.8 ] , [ 0.06 , 0.08 ] ) {\displaystyle f([0.1,0.8],[0.06,0.08])} [ 0.1 , 0.9 ] {\displaystyle [0.1,0.9]}
二進浮動小数点演算の標準規格 IEEE 754 では、丸めの実装手順も規定されています。IEEE 754準拠のシステムでは、プログラマーは最も近い浮動小数点数に丸めることができます。選択肢としては、0への丸め(切り捨て)、正の無限大への丸め(切り上げ)、負の無限大への丸め(切り下げ)があります。
区間演算に必要な 外部丸めは 、上限(up)と下限(down)の計算におけるプロセッサの丸め設定を変更することで実現できます。あるいは、適切な小さな区間を 追加することもできます。 [ ε 1 , ε 2 ] {\displaystyle [\varepsilon _{1},\varepsilon _{2}]}
依存の問題 値の範囲のおおよその見積もり いわゆる「 依存性」問題は 、区間演算の適用における大きな障害です。区間法は基本的な算術演算や関数の範囲を非常に正確に決定できますが、より複雑な関数では必ずしもそうではありません。パラメータを用いた計算において、ある区間が複数回出現し、それぞれの出現を独立に扱う場合、結果として得られる区間が望ましくないほど拡大してしまう可能性があります。
変数の各出現を独立して扱う 例として、 定義される関数を取ります。 この関数の区間上の値 は 、自然区間拡張として次のように計算されます。 f {\displaystyle f} f ( x ) = x 2 + x . {\displaystyle f(x)=x^{2}+x.} [ − 1 , 1 ] {\displaystyle [-1,1]} [ − 1 4 , 2 ] . {\displaystyle \left[-{\tfrac {1}{4}},2\right].}
[ − 1 , 1 ] 2 + [ − 1 , 1 ] = [ 0 , 1 ] + [ − 1 , 1 ] = [ − 1 , 2 ] , {\displaystyle [-1,1]^{2}+[-1,1]=[0,1]+[-1,1]=[-1,2],} これはわずかに大きいです。代わりに、関数 の 最小値と最大値 を 上で 計算しました。 のより良い表現があり、 その中で変数は 1 回だけ出現します。つまり、 を として書き直し、 の 二次方程式 で を 2 乗します 。 h ( x , y ) = x 2 + y {\displaystyle h(x,y)=x^{2}+y} x , y ∈ [ − 1 , 1 ] . {\displaystyle x,y\in [-1,1].} f {\displaystyle f} x {\displaystyle x} f ( x ) = x 2 + x {\displaystyle f(x)=x^{2}+x}
f ( x ) = ( x + 1 2 ) 2 − 1 4 . {\displaystyle f(x)=\left(x+{\frac {1}{2}}\right)^{2}-{\frac {1}{4}}.} したがって、適切な間隔計算は
( [ − 1 , 1 ] + 1 2 ) 2 − 1 4 = [ − 1 2 , 3 2 ] 2 − 1 4 = [ 0 , 9 4 ] − 1 4 = [ − 1 4 , 2 ] {\displaystyle \left([-1,1]+{\frac {1}{2}}\right)^{2}-{\frac {1}{4}}=\left[-{\frac {1}{2}},{\frac {3}{2}}\right]^{2}-{\frac {1}{4}}=\left[0,{\frac {9}{4}}\right]-{\frac {1}{4}}=\left[-{\frac {1}{4}},2\right]} 正しい値を返します。
一般に、各変数が一度だけ出現し、かつボックス内で連続であれば、正確な値の範囲を実現できることが示されます。 ただし、すべての関数がこのように書き直せるわけではありません。 f {\displaystyle f}
ラッピング効果 値の範囲を過大評価する問題の依存性は、大きな範囲をカバーすることになり、より有意義な結論を導き出すことを妨げる可能性があります。
範囲のさらなる増加は、区間ベクトルの形をとらない領域の解から生じる。線形システムの解集合は
{ x = p y = p p ∈ [ − 1 , 1 ] {\displaystyle {\begin{cases}x=p\\y=p\end{cases}}\qquad p\in [-1,1]} はまさに点と 点を結ぶ線です。 区間法を使用すると単位正方形が得られます。 これは ラッピング効果 として知られています。 ( − 1 , − 1 ) {\displaystyle (-1,-1)} ( 1 , 1 ) . {\displaystyle (1,1).} [ − 1 , 1 ] × [ − 1 , 1 ] . {\displaystyle [-1,1]\times [-1,1].}
線形間隔システム 線形区間系は、行列区間拡張 と区間ベクトルから構成されます。 と 対をなす すべて のベクトルに対して、 最小の直方体 を求めます 。 [ A ] ∈ [ R ] n × m {\displaystyle [\mathbf {A} ]\in [\mathbb {R} ]^{n\times m}} [ b ] ∈ [ R ] n {\displaystyle [\mathbf {b} ]\in [\mathbb {R} ]^{n}} [ x ] ∈ [ R ] m {\displaystyle [\mathbf {x} ]\in [\mathbb {R} ]^{m}} x ∈ R m {\displaystyle \mathbf {x} \in \mathbb {R} ^{m}} ( A , b ) {\displaystyle (\mathbf {A} ,\mathbf {b} )} A ∈ [ A ] {\displaystyle \mathbf {A} \in [\mathbf {A} ]} b ∈ [ b ] {\displaystyle \mathbf {b} \in [\mathbf {b} ]}
A ⋅ x = b {\displaystyle \mathbf {A} \cdot \mathbf {x} =\mathbf {b} } 。 二次方程式系、つまり の場合、 すべての可能な解をカバーする 区間ベクトル が存在する可能性があり、これは区間ガウス法で簡単に見つけることができます。この方法は数値演算に代わるものであり、 ガウス消去 法と呼ばれる線形代数法がその区間版となります。しかし、この方法は計算において区間実体 と を 繰り返し使用するため、問題によっては結果が不正確になる可能性があります。したがって、区間値ガウス法の結果は解の集合全体を含んでいるにもかかわらず、その外側にも大きな領域が存在するため、最初の概算値しか得られません。 n = m {\displaystyle n=m} [ x ] {\displaystyle [\mathbf {x} ]} [ A ] {\displaystyle [\mathbf {A} ]} [ b ] {\displaystyle [\mathbf {b} ]}
大まかな解は、 ガウス・ザイデル法 の区間版によって改善されることが多い 。これは、 線形方程式の区間拡張の行目が、 [ x ] {\displaystyle [\mathbf {x} ]} i {\displaystyle i}
( [ a 11 ] ⋯ [ a 1 n ] ⋮ ⋱ ⋮ [ a n 1 ] ⋯ [ a n n ] ) ⋅ ( x 1 ⋮ x n ) = ( [ b 1 ] ⋮ [ b n ] ) {\displaystyle {\begin{pmatrix}{[a_{11}]}&\cdots &{[a_{1n}]}\\\vdots &\ddots &\vdots \\{[a_{n1}]}&\cdots &{[a_{nn}]}\end{pmatrix}}\cdot {\begin{pmatrix}{x_{1}}\\\vdots \\{x_{n}}\end{pmatrix}}={\begin{pmatrix}{[b_{1}]}\\\vdots \\{[b_{n}]}\end{pmatrix}}} 除算が許されるなら、 変数によって決定できる 。したがって、同時に決定される。 x i {\displaystyle x_{i}} 1 / [ a i i ] {\displaystyle 1/[a_{ii}]}
x j ∈ [ x j ] {\displaystyle x_{j}\in [x_{j}]} そして 。 x j ∈ [ b i ] − ∑ k ≠ j [ a i k ] ⋅ [ x k ] [ a i i ] {\displaystyle x_{j}\in {\frac {[b_{i}]-\sum \limits _{k\not =j}[a_{ik}]\cdot [x_{k}]}{[a_{ii}]}}} それで、次のように 置き換えることができます [ x j ] {\displaystyle [x_{j}]}
[ x j ] ∩ [ b i ] − ∑ k ≠ j [ a i k ] ⋅ [ x k ] [ a i i ] {\displaystyle [x_{j}]\cap {\frac {[b_{i}]-\sum \limits _{k\not =j}[a_{ik}]\cdot [x_{k}]}{[a_{ii}]}}} 、 そして、ベクトル の各要素を乗じます。この手順は 対角優勢行列 に対してより効率的なので、系の代わりに、結果として得られる行列方程式を持つ 適切な有理行列を乗じる方法を試すこともよくあります 。 [ x ] {\displaystyle [\mathbf {x} ]} [ A ] ⋅ x = [ b ] , {\displaystyle [\mathbf {A} ]\cdot \mathbf {x} =[\mathbf {b} ]{\mbox{,}}} M {\displaystyle \mathbf {M} }
( M ⋅ [ A ] ) ⋅ x = M ⋅ [ b ] {\displaystyle (\mathbf {M} \cdot [\mathbf {A} ])\cdot \mathbf {x} =\mathbf {M} \cdot [\mathbf {b} ]} 解くべき残りの部分。例えば、 中心行列 を選択した場合 、 は 単位行列の外拡張となります。 M = A − 1 {\displaystyle \mathbf {M} =\mathbf {A} ^{-1}} A ∈ [ A ] {\displaystyle \mathbf {A} \in [\mathbf {A} ]} M ⋅ [ A ] {\displaystyle \mathbf {M} \cdot [\mathbf {A} ]}
これらの方法は、発生する区間の幅が十分に小さい場合にのみ有効です。より広い区間の場合、有限(ただし大きい)実数同値線形システムに対して区間線形システムを用いると有効です。すべての行列が 逆行列である場合、区間内に発生する端点のすべての可能な組み合わせ(上限と下限)を考慮するだけで十分です。結果として生じる問題は、従来の数値計算法を用いて解くことができます。区間演算は、丸め誤差の決定に依然として用いられています。 A ∈ [ A ] {\displaystyle \mathbf {A} \in [\mathbf {A} ]}
これは次元の小さい系にのみ適しています。なぜなら 、行列が完全に占有されている場合、実数行列は逆行列を計算し、 右辺にベクトルを 与える必要があるからです。このアプローチはJiri Rohnによって開発され、現在も開発が続けられています。 [4] n × n {\displaystyle n\times n} 2 n 2 {\displaystyle 2^{n^{2}}} 2 n {\displaystyle 2^{n}}
区間ニュートン法 「厚い」関数の区間ニュートンステップにおける検索領域の縮小。 区間ベクトルの零点を求める ニュートン法 の区間変形は 平均値拡張から導出できる。 [5] 未知のベクトル を に適用すると次式 が得られる。 [ x ] {\displaystyle [\mathbf {x} ]} z ∈ [ x ] {\displaystyle \mathbf {z} \in [\mathbf {x} ]} y ∈ [ x ] {\displaystyle \mathbf {y} \in [\mathbf {x} ]}
f ( z ) ∈ f ( y ) + [ J f ] ( [ x ] ) ⋅ ( z − y ) {\displaystyle f(\mathbf {z} )\in f(\mathbf {y} )+[J_{f}](\mathbf {[x]} )\cdot (\mathbf {z} -\mathbf {y} )} 。 がゼロの場合 、つまり となり 、 は満たさなければなりません。 z {\displaystyle \mathbf {z} } f ( z ) = 0 {\displaystyle f(z)=0}
f ( y ) + [ J f ] ( [ x ] ) ⋅ ( z − y ) = 0 {\displaystyle f(\mathbf {y} )+[J_{f}](\mathbf {[x]} )\cdot (\mathbf {z} -\mathbf {y} )=0} 。 これは と同等です 。 の外部推定値は 線形手法を使用して決定できます。 z ∈ y − [ J f ] ( [ x ] ) − 1 ⋅ f ( y ) {\displaystyle \mathbf {z} \in \mathbf {y} -[J_{f}](\mathbf {[x]} )^{-1}\cdot f(\mathbf {y} )} [ J f ] ( [ x ] ) − 1 ⋅ f ( y ) ) {\displaystyle [J_{f}](\mathbf {[x]} )^{-1}\cdot f(\mathbf {y} ))}
区間ニュートン法の各ステップでは、近似的な初期値 が に置き換えられる ため、結果が改善されます。従来の方法とは異なり、区間ニュートン法では零点を含むことで結果に近づきます。これにより、結果が初期範囲内のすべての零点を生成することが保証されます。逆に、ニュートンステップで空集合が生成される場合、 初期範囲に の零点が存在しないことが証明され ます。 [ x ] ∈ [ R ] n {\displaystyle [\mathbf {x} ]\in [\mathbb {R} ]^{n}} [ x ] ∩ ( y − [ J f ] ( [ x ] ) − 1 ⋅ f ( y ) ) {\displaystyle [\mathbf {x} ]\cap \left(\mathbf {y} -[J_{f}](\mathbf {[x]} )^{-1}\cdot f(\mathbf {y} )\right)} f {\displaystyle f} [ x ] {\displaystyle [\mathbf {x} ]}
この方法は、開始領域内のすべての零点に収束します。零除算は、異なる零点の分離につながる可能性がありますが、分離は完全ではない可能性があります。二分法によって補完することができます。
例として、関数 、開始範囲 、点 を考えます 。すると、 となり 、最初のニュートンステップは となります。 f ( x ) = x 2 − 2 {\displaystyle f(x)=x^{2}-2} [ x ] = [ − 2 , 2 ] {\displaystyle [x]=[-2,2]} y = 0 {\displaystyle y=0} J f ( x ) = 2 x {\displaystyle J_{f}(x)=2\,x}
[ − 2 , 2 ] ∩ ( 0 − 1 2 ⋅ [ − 2 , 2 ] ( 0 − 2 ) ) = [ − 2 , 2 ] ∩ ( [ − ∞ , − 0.5 ] ∪ [ 0.5 , ∞ ] ) = [ − 2 , − 0.5 ] ∪ [ 0.5 , 2 ] {\displaystyle [-2,2]\cap \left(0-{\frac {1}{2\cdot [-2,2]}}(0-2)\right)=[-2,2]\cap {\Big (}[{-\infty },{-0.5}]\cup [{0.5},{\infty }]{\Big )}=[{-2},{-0.5}]\cup [{0.5},{2}]} 。 およびでは、 さらにニュートンステップが別途使用されます。これらは および の周りの任意の小さな区間に収束します 。 x ∈ [ − 2 , − 0.5 ] {\displaystyle x\in [{-2},{-0.5}]} [ 0.5 , 2 ] {\displaystyle [{0.5},{2}]} − 2 {\displaystyle -{\sqrt {2}}} + 2 {\displaystyle +{\sqrt {2}}}
区間ニュートン法は、のような 厚い関数 にも適用できます 。これらの関数はいずれにせよ区間結果を持ちます。その結果は を含む区間を生成します 。 g ( x ) = x 2 − [ 2 , 3 ] {\displaystyle g(x)=x^{2}-[2,3]} [ − 3 , − 2 ] ∪ [ 2 , 3 ] {\displaystyle \left[-{\sqrt {3}},-{\sqrt {2}}\right]\cup \left[{\sqrt {2}},{\sqrt {3}}\right]}
二分法と被覆 大まかな見積もり(ターコイズ)と「細かく分ける」ことで改善された見積もり(赤) 各種区間法は、異なる区間拡張のサイズ間の依存関係を考慮しないため、保守的な結果をもたらします。ただし、区間が狭い場合、依存関係の問題はそれほど重要ではなくなります。
区間ベクトルを 小さなボックスで覆う と、 [ x ] {\displaystyle [\mathbf {x} ]} [ x 1 ] , … , [ x k ] , {\displaystyle [\mathbf {x} _{1}],\ldots ,[\mathbf {x} _{k}],}
[ x ] = ⋃ i = 1 k [ x i ] , {\displaystyle [\mathbf {x} ]=\bigcup _{i=1}^{k}[\mathbf {x} _{i}],} 値の範囲に対して有効になります。
f ( [ x ] ) = ⋃ i = 1 k f ( [ x i ] ) . {\displaystyle f([\mathbf {x} ])=\bigcup _{i=1}^{k}f([\mathbf {x} _{i}]).} したがって、上記の間隔拡張については、次のことが当てはまります。
[ f ] ( [ x ] ) ⊇ ⋃ i = 1 k [ f ] ( [ x i ] ) . {\displaystyle [f]([\mathbf {x} ])\supseteq \bigcup _{i=1}^{k}[f]([\mathbf {x} _{i}]).} は右側の 純粋な スーパーセットで あることが多いため、これにより推定値が改善されることが多いです。 [ f ] ( [ x ] ) {\displaystyle [f]([\mathbf {x} ])}
このような被覆は、区間ベクトルの太い要素 を中央で2つの区間に分割する二 分法 など によって生成できます。 それでも 結果が適切でない場合は、さらに段階的に細分化することも可能です。 区間の被覆はベクトル要素の分割によって生成されるため 、計算コストが大幅に増加します。 [ x i 1 , x i 2 ] {\displaystyle [x_{i1},x_{i2}]} [ x ] = ( [ x 11 , x 12 ] , … , [ x n 1 , x n 2 ] ) {\displaystyle [\mathbf {x} ]=([x_{11},x_{12}],\ldots ,[x_{n1},x_{n2}])} [ x i 1 , 1 2 ( x i 1 + x i 2 ) ] {\displaystyle \left[x_{i1},{\tfrac {1}{2}}(x_{i1}+x_{i2})\right]} [ 1 2 ( x i 1 + x i 2 ) , x i 2 ] . {\displaystyle \left[{\tfrac {1}{2}}(x_{i1}+x_{i2}),x_{i2}\right].} 2 r {\displaystyle 2^{r}} r {\displaystyle r}
区間が非常に広い場合、すべての区間を一定の(より狭い)幅を持つ複数の部分区間に分割すると便利です。この方法は ミンシング と呼ばれます。これにより、中間の二分ステップの計算を回避できます。どちらの方法も、低次元の問題にのみ適しています。
応用 区間演算は、正確な数値のない推定値を扱うために、 様々な分野( 集合反転 、 動作計画 、 集合推定、安定性解析など)で使用することができます。 [6]
丸め誤差分析 区間演算は誤差解析において、各計算から生じる丸め誤差を制御するために使用されます。区間演算の利点は、各演算の後に真の結果を確実に含む区間が存在することです。区間境界間の距離は、現在の丸め誤差の計算値を直接示します。
指定された間隔に対する 誤差 = 。 a b s ( a − b ) {\displaystyle \mathrm {abs} (a-b)} [ a , b ] {\displaystyle [a,b]} 区間分析は、ピボット などの従来の誤差低減手法を置き換えるのではなく、従来の手法に追加されます 。
許容差分析 技術的および物理的プロセスのシミュレーションでは、正確な数値を割り当てることができないパラメータがしばしば発生します。技術部品の製造プロセスでは一定の許容範囲が許容されるため、一部のパラメータは一定の範囲内で変動します。さらに、多くの基本定数は正確には分かっていません。 [1]
許容差の影響を受けるこのようなシステムの動作が、たとえば、 に対して 、 が未知数である場合 、可能な解の集合は次のようになります。 f ( x , p ) = 0 {\displaystyle f(\mathbf {x} ,\mathbf {p} )=0} p ∈ [ p ] {\displaystyle \mathbf {p} \in [\mathbf {p} ]} x {\displaystyle \mathbf {x} }
{ x | ∃ p ∈ [ p ] , f ( x , p ) = 0 } {\displaystyle \{\mathbf {x} \,|\,\exists \mathbf {p} \in [\mathbf {p} ],f(\mathbf {x} ,\mathbf {p} )=0\}} 、 区間法によって求めることができます。これは、従来の 誤差伝播解析に代わる手法です。 モンテカルロシミュレーション などの点法とは異なり 、区間演算法では解領域のどの部分も見落とされることはありません。ただし、他の確率分布は考慮されていないため、結果は常に誤差分布の最悪ケースの解析となります。
ファジィ区間演算 区間列による 正規分布 の近似 区間演算は、ファジィ論理 で使用されるように、ファジィ量の所属関数にも適用できます 。厳密な記述とに加えて 、 実数 が割り当てられる中間値も考えられます。 は確定的な所属に対応し、 は非所属に対応します。分布関数は不確実性を割り当てますが、これはさらなる区間として理解できます。 x ∈ [ x ] {\displaystyle x\in [x]} x ∉ [ x ] {\displaystyle x\not \in [x]} μ ∈ [ 0 , 1 ] {\displaystyle \mu \in [0,1]} μ = 1 {\displaystyle \mu =1} μ = 0 {\displaystyle \mu =0}
ファジィ算術 [7] では 、有限個の離散的な所属段階のみ が考慮される。したがって、このような不明瞭な値に対する分布の形は、区間の列によって表すことができる。 μ i ∈ [ 0 , 1 ] {\displaystyle \mu _{i}\in [0,1]}
[ x ( 1 ) ] ⊃ [ x ( 2 ) ] ⊃ ⋯ ⊃ [ x ( k ) ] . {\displaystyle \left[x^{(1)}\right]\supset \left[x^{(2)}\right]\supset \cdots \supset \left[x^{(k)}\right].} 間隔は ステージの変動範囲と正確に一致する [ x ( i ) ] {\displaystyle \left[x^{(i)}\right]} μ i . {\displaystyle \mu _{i}.}
不明瞭な値とそれに対応するシーケンスに関する 関数の適切な分布 。 f ( x 1 , … , x n ) {\displaystyle f(x_{1},\ldots ,x_{n})} x 1 , … , x n {\displaystyle x_{1},\ldots ,x_{n}}
[ x 1 ( 1 ) ] ⊃ ⋯ ⊃ [ x 1 ( k ) ] , … , [ x n ( 1 ) ] ⊃ ⋯ ⊃ [ x n ( k ) ] {\displaystyle \left[x_{1}^{(1)}\right]\supset \cdots \supset \left[x_{1}^{(k)}\right],\ldots ,\left[x_{n}^{(1)}\right]\supset \cdots \supset \left[x_{n}^{(k)}\right]} シーケンスによって近似できます。
[ y ( 1 ) ] ⊃ ⋯ ⊃ [ y ( k ) ] , {\displaystyle \left[y^{(1)}\right]\supset \cdots \supset \left[y^{(k)}\right],} どこ
[ y ( i ) ] = f ( [ x 1 ( i ) ] , … [ x n ( i ) ] ) {\displaystyle \left[y^{(i)}\right]=f\left(\left[x_{1}^{(i)}\right],\ldots \left[x_{n}^{(i)}\right]\right)} 区間法で計算できます。値は 区間計算の結果に対応します。 [ y ( 1 ) ] {\displaystyle \left[y^{(1)}\right]}
コンピュータ支援証明 ワーウィック・タッカーは区間演算を用いて スメールの 14番目の問題を解き、 ローレンツ・アトラクターが ストレンジ・アトラクター である ことを証明した 。 [8] トーマス・ヘイルズは区間演算を用いて ケプラー予想 を解決した 。
歴史 区間演算は数学において全く新しい現象ではありません。歴史の中で、様々な名称で幾度となく登場してきました。例えば、 アルキメデスは紀元前3世紀に、223/71 < π < 22/7という下限と上限を計算しました 。区間を用いた実際の計算は、他の数値計算手法ほど普及しているわけでも、完全に忘れ去られているわけでもありません。
実数の区間やその他の部分集合を用いた計算規則は、1931年にロザリンド・シセリー・ヤングによって発表された。 [9] デジタルシステムの信頼性を向上させるための値域数に関する算術的研究は、1951年にポール・S・ドワイヤーによって線形代数の教科書 [de] に掲載された。 [10] 区間は、浮動小数点数に関連する丸め誤差の測定に使用された。数値解析における区間代数に関する包括的な論文は、須永輝夫(1958年)によって発表された。 [11]
現代の区間演算の誕生は、 1966年に ラモン・E・ムーア が 『区間解析』 という本を出版したことで象徴されました。 [12] [13] 彼は1958年の春にこのアイデアを思いつき、1年後にはコンピュータ区間演算に関する論文を発表しました。 [14] その利点は、単純な原理から始めて、丸めによって生じる誤差だけでなく、自動化された誤差解析のための一般的な方法を提供したことです。
1956年に ミェチスワフ・ヴァルムスは 独立して区間を使った計算の公式を提案したが [15] 、ムーアが初めて非自明な応用を発見した。
その後の20年間、 カールスルーエ大学 で 、そして後にはベルギッシェ ・ヴッパータール大学でも、ドイツの研究者グループが ウルリッヒ・W・クーリッシュ [16] [17] とゲッツ・アレフェルト [de] [18] を中心に先駆的な研究を行った。例えば、カール・ニッケル [de]は より効果的な実装を研究し、連立方程式の解集合の包含手順の改善はアーノルド・ノイマイヤーらによるものであった。1960年代には、 エルドン・R・ハンセンが 線形方程式の区間拡張を扱い、その後、おそらく最も広く使用されている区間アルゴリズムである、現在ハンセン法として知られるものを含む、大域最適化に重要な貢献をした。 [5] この古典的な方法では、最大(または最小)の大域値を決定する問題がしばしばあるが、局所最適値しか見つけることができず、より良い値を見つけることができなかった。ヘルムート・ラチェクとジョン・ジョージ・ロクネは、それまで整数値にのみ適用されていた 分岐限定 法を、区間を使用して連続値に適用できるように開発しました。
1988年、ルドルフ・ローナーは 常微分方程式 を用いた初期値問題の信頼性の高い解を求める Fortran ベースのソフトウェアを開発した。 [19]
1990年代から発行されている学術誌 『Reliable Computing 』 (元は Interval Computations )は、コンピュータ支援計算の信頼性に特化した雑誌です。主任編集者であるR. Baker Kearfottは、大域最適化に関する研究に加え、区間演算における表記法と用語の統一に大きく貢献しました。 [20]
近年、 フランスの ソフィア・アンティポリス にある INRIA のCOPRINワーキンググループでは、特にパラメータ化された関数の プリイメージの推定とロバスト制御理論に研究が集中している。 [21]
実装 区間演算を用いた数値アプリケーションの開発を可能にするソフトウェアパッケージは数多く存在します。 [22] これらは通常、プログラムライブラリの形で提供されます。また、 C++ およびFortran コンパイラの 中には、区間データ型と適切な演算を言語拡張として処理するコンパイラもあり、区間演算を直接サポートしています。
1967 年以来、 カールスルーエ大学 で C++、Fortran、 Pascal などさまざまな プログラミング言語向けの 科学的計算用拡張機能 (XSC) が開発されてきました。 [23] 最初のプラットフォームは Zuse Z23 で、新しい区間データ型と適切な基本演算子が利用可能になりました。 1976 年には、 Zilog Z80 上の Pascal バリアントである Pascal-SCが登場し、これにより、結果の 自動 検証用の高速で複雑なルーチンの作成が可能になりました。 次に登場した Fortran 77 ベースの ACRITH-XSC (FORTRAN-SC) は、後に IBM によって提供されました。 1991 年からは、 Pascal-XSCで C コンパイラ用のコードを作成できるようになりました 。 1 年後には、 C++ クラス ライブラリがさまざまな コンピュータ システムで C-XSC をサポートするようになりました。 1997 2000 年の初めに、 改良された C++ 標準に対応するために、 ベルギッシェ・ヴッパータール大学の 科学計算ワーキング グループの主導の下、C-XSC 2.0 がリリースされました。
1993年、 ハンブルク工科大学で Profil/BIAS (Programmer's Runtime Optimized Fast Interval Library, Basic Interval Arithmetic)と呼ばれるC++クラスのライブラリが開発されました 。このライブラリは、一般的な区間演算をよりユーザーフレンドリーなものにしました。ハードウェアの効率的な利用、移植性、そして区間表現の独立性を重視していました。
Boost C++ライブラリ コレクション には、区間演算用のテンプレートクラスが含まれています。その作者は、区間演算を標準C++言語で実現することを目指しています。 [24]
Frinkプログラミング言語には 、任意精度の数値を 扱う区間演算の実装があります。Frinkで書かれたプログラムは 、 書き換えや再コンパイルなしで区間演算を使用できます。
GAOL [25]は、区間 制約プログラミング で使用される関係区間演算子を提供するという点でユニークな、もう1つのC++区間演算ライブラリです 。
Mooreライブラリ [26] は、C++における区間演算の効率的な実装です。任意の精度の端点を持つ区間を提供し、 C++の concepts 機能に基づいています。
Julia プログラミング言語 [27] には 、ValidatedNumerics.jlパッケージを介して、 区間演算の実装に加えて、 根探索 (実数値関数と複素数値関数の両方)や区間 制約プログラミングなどの高レベル機能が備わっています。 [28]
さらに、 Euler Mathematical Toolbox 、 FriCAS 、 Maple 、 Mathematica 、 Maxima [29] 、 MuPAD などのコンピュータ代数システムは区間を扱うことができます。Matlab の 拡張機能 Intlab [30]は BLAS ルーチンに基づいており 、ツールボックスb4mはProfil/BIASインターフェースを提供します。 [30] [31]
関数型言語OCaml のライブラリ はアセンブリ言語とCで書かれました。 [32]
MPFIは任意精度区間演算用のライブラリであり、C言語で書かれており、 MPFR に基づいています。 [33]
IEEE 1788規格 区間演算の標準規格IEEE Std 1788-2015は、2015年6月に承認されました。 [34] 2つの参照実装が無料で利用可能です。 [35] これらは、標準規格のワーキンググループのメンバーによって開発されました。C++用のlibieeep1788 [36]ライブラリと、 GNU Octave 用の intervalパッケージ [37] です。
標準規格の最小限のサブセットであるIEEE Std 1788.1-2017は、2017年12月に承認され、2018年2月に公開されました。これにより実装が容易になり、実装のスピードアップにつながる可能性があります。 [38]
会議とワークショップ 毎年、世界中で数多くの国際会議やワークショップが開催されています。主要な会議はおそらくSCAN(International Symposium on Scientific Computing, Computer Arithmetic, and Verified Numerical Computation)でしょうが、その他にもSWIM(Small Workshop on Interval Methods)、PPAM(International Conference on Parallel Processing and Applied Mathematics)、REC(International Workshop on Reliable Engineering Computing)などもあります。
参照
参考文献 ^ ab Dreyer, Alexander (2003). 部品公差を考慮したアナログ回路の区間解析 アーヘン(ドイツ): Shaker Verlag . p. 15. ISBN 3-8322-4555-3 。 ^ 複素区間演算とその応用、 ミオドラグ・S・ペトコビッチ 、リリヤナ・D・ペトコビッチ、 Wiley-VCH 、1998年、 ISBN 978-3-527-40134-5 ^ abcdef Hend Dawood (2011). 区間演算の理論:数学的基礎と応用 . ザールブリュッケン: LAP LAMBERT Academic Publishing. ISBN 978-3-8465-0154-2 。 ^ “Jiri Rohn, 出版物一覧”. 2008年11月23日時点のオリジナルよりアーカイブ 。 2008年5月26日 閲覧。 ^ ab ウォルスター、G. ウィリアム; ハンセン、エルドン・ロバート (2004)。 間隔分析を使用した全体的な最適化 (第 2 版)。米国ニューヨーク州:マーセル・デッカー。 ISBN 0-8247-4059-9 。 ^ リュック・ジョリン;キーファー、ミシェル。ディドリット、オリヴィエ。ウォルター、エリック (2001)。 適用された間隔分析 。ベルリン:シュプリンガー。 ISBN 1-85233-219-0 。 ^ 不確実なモデルパラメータの影響を定量化するためのファジィ演算の応用、マイケル・ハンス、 シュトゥットガルト大学 ^ タッカー、ワーウィック (1999).ローレンツアトラクターは存在します。 Comptes Rendus de l'Académie des Sciences-Series I-Mathematics、328(12)、1197-1202。 ^ Young, Rosalind Cicely (1931). The algebra of many-valued volumes. Mathematische Annalen, 104(1), 260-290. (注:ケンブリッジ大学 博士課程在学中 ) ^ Dwyer, Paul Sumner (1951). 線形計算. オックスフォード, イギリス: Wiley. ( ミシガン大学 ) ^ 須永輝雄 (1958). 「区間代数の理論と数値解析への応用」 RAAG 回想録 (2): 29–46 。 ^ ムーア、ラモン・エドガー (1966). 区間分析 . アメリカ合衆国ニュージャージー州エングルウッド・クリフ: プレンティス・ホール . ISBN 0-13-476853-1 。 ^ Cloud, Michael J.; Moore, Ramon Edgar ; Kearfott, R. Baker (2009). 区間解析入門 . フィラデルフィア: Society for Industrial and Applied Mathematics (SIAM). ISBN 978-0-89871-669-6 。 ^ ハンセン、エルドン・ロバート (2001年8月13日). 「R.E.ムーアの初期インターバル研究に関連する出版物」. ルイジアナ大学ラファイエット出版 . 2015年6月29日 閲覧。 ^ ミェチスワフ・ヴァルムス による区間解析に関する先駆的論文 2008年4月18日アーカイブ、 Wayback Machine ^ クーリッシュ、ウルリッヒ W. (1989)。 Wissenschaftliches Rechnen mit Ergebnisverifikation。 Eine Einführung (ドイツ語)。ヴィースバーデン: Vieweg-Verlag 。 ISBN 3-528-08943-1 。 ^ クーリッシュ、ウルリッヒ W. (1969)。 「Grundzüge der Intervalrechnung」。 Laugwitz、Detlef (編)。 Jahrbuch Überblicke Mathematik (ドイツ語)。 Vol. 2. ドイツ、マンハイム: Bibliographisches Institut 。 51–98 ページ 。 ^ アレフェルト、ゲッツ [ドイツ語] ;ヘルツバーガー、ユルゲン (1974)。 Einführung in die Intervalrechnung 。 Reihe Informatik (ドイツ語)。 Vol. 12. マンハイム、ウィーン、チューリッヒ: BI-Wissenschaftsverlag 。 ISBN 3-411-01466-0 。 ^ ルドルフ・ローナーの常微分方程式の境界値 2018年5月11日アーカイブ、 Wayback Machine (ドイツ語) ^ R. ベイカー・キアフォート著、 ルイジアナ大学ラファイエット校 ^ INRIA 、 Sophia Antipolis の COPRIN チームの紹介フィルム (mpeg) ^ 区間計算用ソフトウェア、 Wayback Machineに 2006-03-02 にアーカイブ 、Vladik Kreinovich 、 テキサス大学エルパソ校 が収集 。 ^ XSC言語の歴史 2007年9月29日アーカイブ Wayback Machine ^ C++標準ライブラリに区間演算を追加する提案 ^ Gaol は単なる区間演算ライブラリではない ^ ムーア: 現代の C++ における区間演算 ^ Juliaプログラミング言語 ^ ValidatedNumerics.jl ^ [1] Maximaの区間演算:Richard J. Fatemanによる概要。 ^ ab “Intlab INTerval LABoratory”. 2020年1月30日時点のオリジナルよりアーカイブ 。 2012年11月7日 閲覧。 ^ b4m ^ Alliot, Jean-Marc; Gotteland, Jean-Baptiste; Vanaret, Charlie; Durand, Nicolas; Gianazza, David (2012). x86/amd64アーキテクチャにおけるOCaml用区間計算ライブラリの実装. 第17回ACM SIGPLAN国際関数型プログラミング会議. ^ MPFI、MPFRに基づく多重精度区間演算ライブラリ ^ IEEE 区間演算標準 ^ Nathalie Revol (2015). 区間演算における(近)将来のIEEE 1788標準、スライド // SWIM 2015: 第8回区間法小規模ワークショップ。プラハ、2015年6月9~11日 ^ 区間演算のための予備的なIEEE P1788標準のC++実装 ^ GNU Octave 間隔パッケージ ^ 「IEEE Std 1788.1-2017 - IEEE 区間演算標準(簡略版)」 IEEE 標準 . IEEE Standards Association. 2017. 2018年2月7日時点のオリジナルよりアーカイブ。 2018年2月6日 閲覧 。
さらに読む ヘイズ、ブライアン(2003年11~12月)「明晰な間隔」 (PDF) . American Scientist . 91 (6). Sigma Xi: 484– 488. doi :10.1511/2003.6.484. オリジナル (PDF) から2021年8月27日にアーカイブ。 2008年5月24日 閲覧 。 タッカー、ワーウィック (2011年)『検証済み数値計算:厳密な計算への短い入門』 プリンストン大学出版局 、 ISBN 978-1400838974 。 ヴィッパーマン、ハンス=ヴィルム (1968) [1967-06-15、1966]。 「Triplex-ALGOL におけるシュランケンツァーレンの定義」。 コンピューティング (ドイツ語)。 3 (2)。カールスルーエ、ドイツ: Springer: 99– 109. doi :10.1007/BF02277452。 ISSN 0010-485X。 S2CID 36685400。 (11 ページ) (注: Triplex-ALGOL Karlsruhe について。これは、三重数値をサポートする ALGOL 60 (1963) 実装です。)
外部リンク 区間演算(Wolfram Mathworld) 歩行者向けの検証済み数値 インターバル法(Arnold Neumaier著) 2020年12月2日アーカイブ Wayback Machine 、 ウィーン大学 SWIM(インターバル法夏季ワークショップ) 並列処理と応用数学に関する国際会議 INTLAB、信頼性コンピューティング研究所、 Wayback Machine で2020年1月30日にアーカイブ、 ハンブルク工科大学 Joris van der Hoeven によるボール算術 kv - 検証済み数値計算用の C++ ライブラリ Arb - 任意精度のボール演算用のCライブラリ GitHub の JuliaIntervals