
区間演算(区間数学、区間解析、区間計算とも呼ばれる)は、関数の境界を計算することで、数学的計算における丸め誤差や測定誤差を軽減するために使用される数学的手法です。区間演算を用いた数値計算法は、比較的信頼性が高く、数学的に正しい結果を保証できます。区間演算または区間数学では、値を単一の数値として表現するのではなく、各値を可能性の範囲として表現します。
数学的には、不確実な実数値変数xを扱う代わりに、区間演算では、 xが取り得る値の範囲を定義する区間[ a , b ]を扱います。言い換えれば、変数xの任意の値は、 aとbの間の閉区間に含まれます。関数f をxに適用すると、すべてのx ∈ [ a , b ]に対してf ( x )の可能なすべての値を含む区間[ c , d ]が生成されます。
区間演算は様々な用途に適していますが、最も一般的な用途は科学研究、特にソフトウェアによる計算処理において、計算における丸め誤差や、物理的・技術的パラメータの正確な値に関する不確実性を追跡するために用いられます。後者は、多くの場合、測定誤差や部品の許容誤差、あるいは計算精度の限界によって生じます。区間演算は、方程式(微分方程式など)や最適化問題の確実な解を見つけるのにも役立ちます。
区間演算の主な目的は、1つまたは複数の変数における関数の値域の上限と下限を簡単に計算する方法を提供することです。これらの端点は、必ずしも値域の真の上限または下限である必要はありません。なぜなら、これらの値を正確に計算することは困難または不可能な場合があるからです。境界は、関数の値域を部分集合として含んでいれば十分です。
この処理は通常、実数区間に限定されるため、次の形式の量は
ここで、a = −∞およびb = ∞が許容されます。aまたはbのいずれか一方が無限大の場合、区間は非有界区間になります。両方が無限大の場合、区間は拡張された実数直線になります。実数rは区間[ r , r ]として解釈できるため、区間と実数は自由に組み合わせることができます。

人の体格指数(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)であることを示しています。
体重80kg 、身長1.80mの男性のBMIは 約24.7です。 同じ身長で体重79.5kgの場合、BMIは24.537となり、体重80.5kgの場合は24.846となります。指定された体重範囲内のすべての値において、体質量は連続的で常に増加しているため、真のBMIは[ 24.537, 24.846 ] の範囲内にあるはずです。この範囲全体が、正常体重と過体重の境界値である25未満であるため、この男性は正常体重であると確実に結論付けることができます。
この例における誤差は結論(標準体重)に影響を与えませんが、これは必ずしも当てはまるわけではありません。もし男性の体重がわずかに重かった場合、BMIの範囲にカットオフ値である25が含まれる可能性があります。そのような場合、体重計の精度では明確な結論を出すには不十分です。
BMIの例の範囲は、[ 24.5, 24.9 ]と報告できます。これは、この区間が計算された区間のスーパーセットであるためです。しかし、この範囲は[ 24.6, 24.8 ]と報告することはできません。なぜなら、この区間には可能なBMI値が含まれていないからです。

身長と体重はどちらもBMIの値に影響を与えます。上記の例では体重の変動のみを考慮しましたが、身長にも不確実性が伴います。メートル単位の身長測定値は通常、最も近いセンチメートルに丸められます。記録された1.79メートルの身長は、[ 1.785, 1.795)の範囲に含まれます。BMIは体重に対して一様に増加し、身長に対して一様に減少するため、各範囲の最小値と最大値を代入し、その最小値と最大値を境界として選択することで誤差範囲を計算できます。したがって、BMIは必ずこの範囲内に存在します。
この場合、男性は標準体重である可能性もあれば、過体重である可能性もある。体重と身長の測定値は、明確な結論を出すには精度が不十分だった。
2 つの区間に対する二項演算∗ は、加算や乗算のように定義されます。
言い換えれば、これはx ∗ yのすべての可能な値の集合であり、xとy はそれぞれ対応する区間内にある。各区間上の各オペランドに対して∗ が単調である場合(これは 4 つの基本算術演算 (分母がゼロの場合の除算を除く) に当てはまる)、極値はオペランド区間の端点で発生する。すべての組み合わせを書き出すと、これを表現する方法の 1 つは次のようになる。
ただし、x ∗ yはすべてのx ∈ [ x 1 , x 2 ]およびy ∈ [ y 1 , y 2 ]に対して定義されるものとする。
実用的な用途においては、これをさらに簡略化することができます。
最後のケースでは、( 1 / y 1 , 1 / y 2 )の除外に関する有用な情報が失われます。そのため、 [ -∞, 1 / y 1 ]と[ 1 / y 2 , ∞ ]を別々の区間として扱うのが一般的です。より一般的には、不連続関数を扱う場合、 ⋃ i [ a i , b i ]の形式のいわゆる多重区間を使用して計算を行うと便利な場合があります。対応する多重区間演算は、(通常は互いに素な) 区間の集合を維持し、重複する区間を結合する機能も提供します。[ 1 ]

区間乗算では、多くの場合、2回の乗算のみが必要です。x 1 、 y 1が非負の場合、
この乗算は、辺の長さが異なる長方形の面積として解釈できます。結果の範囲は、最小値から最大値まで、考えられるすべての面積を網羅します。
これらの定義を用いることで、f ( a , b , x ) = ax + bのような単純な関数の範囲を計算することが既に可能になります。例えば、a = [ 1, 2 ]、b = [ 5, 7 ]、x = [ 2, 3 ]の場合:
区間の表記を簡略化するために、括弧を使用することができます。
[ x ] ≡ [ x 1 , x 2 ]は区間を表すために使用できます。このような簡潔な表記では、[ x ]は一点区間[ x 1 , x 1 ]と一般的な区間と混同しないように注意してください。すべての区間の集合については、以下を使用できます。
略語として。区間のベクトルには太字フォントを使用できます。

4つの基本演算子以外にも、区間関数を定義することができる。
1変数の単調関数の場合、値の範囲は簡単に計算できます。f : ℝ → ℝが区間[ x 1 , x 2 ]で単調増加である場合、 y 1 < y 2 となるすべての y 1 , y 2 ∈ [ x 1 , x 2 ] に対して、f ( y 1 ) ≤ f ( y 2 )となります( fが減少する場合は、 f ( y 1 ) ≥ f ( y 2 )となります)。
したがって、区間[ y 1 , y 2 ] ⊆ [ x 1 , x 2 ]に対応する範囲は、その端点に関数を適用することによって計算できます。
これから、区間関数の以下の基本的な特徴を容易に定義することができる。
偶数乗の場合、考慮される値の範囲が重要であり、乗算を行う前に処理する必要があります。たとえば、x ∈ [ −1, 1 ]のx n は、偶数n ∈ ℕに対して区間[ 0, 1 ]を生成するはずです。しかし、[ −1, 1 ] n を[ −1, 1 ] · [ −1, 1 ] · ⋯ · [ −1, 1 ]の形式の区間乗算を繰り返して取得する と、結果は[ −1, 1 ]となり、必要以上に広くなります。
より一般的に言えば、区分的に単調な関数については、区間の端点x 1、x 2と、区間内のいわゆる臨界点(関数の単調性が方向を変える点)を考慮すれば十分であると言えます。正弦関数と余弦関数の場合、臨界点はそれぞれ( n + 1 / 2 ) πとnπ(n ∈ ℤ)にあります。したがって、区間が少なくとも 2 つの極値を含む場合、結果として得られる区間は[ −1, 1 ]となるため、区間内の最大 5 つの点だけを考慮すれば十分です。正弦関数と余弦関数の場合、臨界点は簡単に事前に計算できる値(つまり −1、0、1)となるため、端点のみを完全に評価する必要があります。
一般的に、多くの関数の出力区間のこのような単純な記述を見つけるのは容易ではないかもしれません。しかし、関数を区間演算に拡張することは可能です。f : ℝ n → ℝ が実ベクトルから実数への関数である場合、 [ f ] : [ ℝ ] n → [ℝ]は、次の条件を満たす場合にfの区間拡張と呼ばれます。
この区間拡張の定義では、正確な結果が得られません。例えば、 [ f ]( [ x 1 , x 2 ] ) = [ e x 1 , e x 2 ]と[ g ]( [ x 1 , x 2 ] ) = [ −∞, ∞ ]はどちらも指数関数の許容拡張です。より厳密な拡張が望ましいですが、計算コストと不正確さの相対的なバランスを考慮する必要があります。この場合、[ f ]が最も厳密な結果を与えるため、これを選択するのが適切です。
実数式が与えられた場合、その自然な区間拡張は、その式に含まれる各部分式、関数、および演算子の区間拡張を用いることによって実現される。
テイラー区間拡張(次数k)は、k + 1回微分可能な関数fで、次のように定義されます。
あるy ∈ [ x ]に対して、D i f ( y )は点yにおけるfのi階微分であり、[ r ]はテイラー剰余の区間拡張である。

ベクトルξはxとyの間にあり、 x , y ∈ [ x ]です。ξは[ x ]によって保護されています。通常、yは区間の中点として選択され、自然区間拡張を使用して残りの値を評価します。
次数k = 0のテイラー区間拡張の特殊なケースは、平均値形式とも呼ばれます。
区間は、中心から指定された距離内にある点の集合として定義でき、この定義は実数から複素数に拡張できます。[ 2 ]別の拡張では、区間を複素平面上の長方形として定義します。実数を用いた計算の場合と同様に、複素数を用いた計算にも不確実なデータが含まれます。したがって、区間数は実数の閉区間であり、複素数は実数の順序対であるという事実を考慮すると、区間演算の適用範囲を実数を用いた計算における不確実性の尺度に限定する理由はありません。[ 3 ]このように、複素区間数を介して区間演算を拡張することで、複素数を用いた計算における不確実性の領域を決定できます。複素区間演算は、長方形または円盤を使用して定義できますが、それぞれに利点と欠点があります。[ 3 ]
実数区間数(実数閉区間)の基本的な代数演算は複素数に拡張できます。したがって、複素数区間演算が通常の複素数演算と似ているが同一ではないことは驚くべきことではありません。[ 3 ]実数区間演算の場合と同様に、特定の特殊な場合を除いて複素数区間数の加算と乗算の間に分配法則はなく、複素数区間数には逆元が常に存在するとは限らないことが示せます。[ 3 ]通常の複素数演算の他の2つの有用な性質は複素数区間演算では成り立ちません。通常の複素共役の加法性と乗法性は、複素数区間共役では成り立ちません。[ 3 ]
区間演算は、同様の方法で、四元数や八元数などの他の多次元数体系にも拡張できますが、通常の算術の他の有用な特性を犠牲にしなければならないという代償があります。[ 3 ]
古典的な数値解析の手法は、数値間の依存関係が通常考慮されないため、区間値アルゴリズムにそのまま適用することはできない。

実際の実装で効果的に機能するには、区間は浮動小数点演算と互換性がある必要があります。以前の演算は正確な算術に基づいていましたが、一般的に高速な数値解法が利用できない場合があります。この例では、 x ∈ [ 0.1, 0.8 ]およびy ∈ [ 0.06, 0.08 ]の場合の関数f ( x , y ) = x + yの値の範囲は[ 0.16, 0.88 ]です。同じ計算を 1 桁の精度で行うと、結果は通常[ 0.2, 0.9 ]になります。しかし、[ 0.2, 0.9 ] ⊉ [ 0.16, 0.88 ]であるため、このアプローチは区間演算の基本原理に反します。fの定義域の一部( [ 0.1, 0.8 ] , [ 0.06, 0.08 ] )が失われてしまうからです。代わりに、外丸め解[ 0.1, 0.9 ]を使用します。
バイナリ浮動小数点演算に関する標準規格であるIEEE 754では、丸め処理の実装手順も規定されています。IEEE 754に準拠したシステムでは、プログラマは最も近い浮動小数点数に丸めることができます。丸め処理の選択肢としては、ゼロ方向への丸め(切り捨て)、正の無限大方向への丸め(切り上げ)、負の無限大方向への丸め(切り捨て)があります。
区間演算に必要な外部丸めは、上限値(up)と下限値(down)の計算におけるプロセッサの丸め設定を変更することで実現できます。あるいは、適切な小さな区間[ ε1 , ε2 ]を追加することも可能です。
区間演算は、任意精度浮動小数点演算を使用して実装されており、精度ははるかに高い(ただし有限であるため、丸め処理は依然として必要)。より大きな任意精度の数値は計算が遅く、かなりの量のメモリを消費する。区間演算のバリアントは、ボール演算では、従来の(下限-上限)区間演算のように高精度の下限と上限の代わりに、高精度の中点と低精度の半径を格納するため、計算コストが削減されます。 [ 4 ] [ 5 ]

いわゆる依存性問題は、区間演算の応用における大きな障害となっている。区間法は基本的な算術演算や関数の範囲を非常に正確に決定できるが、より複雑な関数では必ずしもそうとは限らない。パラメータを用いた計算において区間が複数回出現し、それぞれの出現を独立して扱うと、結果として得られる区間が意図せず拡大してしまう可能性がある。

例として、f ( x ) = x² + xで定義される関数fを考えてみましょう。区間[ −1, 1 ]におけるこの関数の値は[ −1/4 , 2 ]です。自然な区間拡張として、次のように計算されます。
これはわずかに大きいですが、代わりに関数h ( x , y ) = x 2 + yのx , y ∈ [ −1, 1 ]における下限と上限を計算しました。変数xが一度だけ現れるfのより良い表現があります。それは、平方完成によって二次式f ( x ) = x 2 + xを書き換えることです。
したがって、適切な区間計算は
そして正しい値を返します。
一般的に、各変数が一度だけ出現し、かつ関数fがボックス内で連続であれば、正確な値の範囲を達成できることが示される。しかし、すべての関数がこのように書き換えられるわけではない。

値の範囲を過大評価する原因となる問題の依存性は、広範囲に及ぶ可能性があり、より有意義な結論を導き出すことを妨げる。
範囲のさらなる増加は、区間ベクトルの形をとらない領域の解に起因する。線形システムの解集合
は、点(−1, −1)と(1, 1)を結ぶ線です。区間法を用いると、単位正方形[ −1, 1 ] × [ −1, 1 ]が得られます。これはラッピング効果として知られています。
線形区間システムは、行列区間拡張[ A ] ∈ [ℝ] n × mと区間ベクトル[ b ] ∈ [ℝ] nから構成されます。我々は、すべてのベクトルx ∈ ℝ mに対して、A ∈ [ A ]およびb ∈ [ b ]を満たすペア( A , b )が存在する最小の直方体 [ x ] ∈ [ ℝ ] mを求めます。
二次方程式系(つまり、n = mの場合)では、区間ガウス法によって簡単に求められる、すべての可能な解を網羅する区間ベクトル[ x ]が存在する可能性があります。これは数値演算を置き換えるものであり、ガウス消去法として知られる線形代数法がその区間版となります。ただし、この方法は計算において区間要素[ A ]と[ b ]を繰り返し使用するため、問題によっては結果が悪くなる場合があります。したがって、区間値ガウスの結果は、解集合全体を含んでいるものの、その外側にも大きな領域が含まれているため、最初の概算値としてのみ使用できます。
粗解[ x ]は、ガウス・ザイデル法の区間版によって改善されることが多い。その理由は、線形方程式の区間拡張のi行目が
除算 1 / [ a ii ] が許されるならば、変数x iによって決定できる。したがって、同時に
これで[ x j ]を次のように置き換えることができます
そして、ベクトル[ x ]の各要素によって。
対角優位行列の場合、この手順はより効率的であるため、システム[ A ] · x = [ b ]の代わりに、適切な有理行列Mを乗じることで、結果として得られる行列方程式を試すことができる場合が多い。
解決すべき問題が残ります。例えば、中心行列A ∈ [ A ]に対してM = A −1と選択すると、M · [ A ]は単位行列の外側拡張となります。
これらの方法は、発生する区間の幅が十分に小さい場合にのみ有効です。より広い区間の場合、有限(ただし大きい)実数等価線形システム上で区間線形システムを使用することが有効です。すべての行列A ∈ [ A ]が可逆であれば、区間内で発生する端点のすべての可能な組み合わせ(上限と下限)を考慮すれば十分です。結果として生じる問題は、従来の数値計算法を使用して解決できます。丸め誤差の決定には、依然として区間演算が使用されます。
これは、 n × n行列が完全に占有されている場合、2 n 2 個の実数行列を逆行列にする必要があり、右辺には2 n 個のベクトルが必要となるため、より小さな次元のシステムにのみ適しています。このアプローチは Jiri Rohn によって開発され、現在も開発が続けられています。 [ 6 ]

区間ベクトル[ x ]の零点を見つけるためのニュートン法の区間版は、平均値拡張から導出できる。[ 7 ]未知のベクトルz ∈ [ x ]をy ∈ [ x ]に適用すると、次のようになる。
zがゼロの場合、つまりf ( z )=0の場合、次の式を満たす必要があります。
これは以下と同等です
[ J f ]([ x ]) −1 · f ( y )の外側の推定値は、線形法を使用して決定できます。
区間ニュートン法の各ステップでは、近似開始値[ x ] ∈ [ℝ] nが次のように置き換えられます。
そのため、結果を改善できます。従来の方法とは対照的に、区間法は零点を包含することで結果に近づきます。これにより、結果が初期範囲内のすべての零点を生成することが保証されます。逆に、ニュートンステップが空集合を生成する場合、初期範囲[ x ]にはfの零点がなかったことが証明されます。
この方法は、開始領域内のすべてのゼロに収束します。ゼロ除算は、異なるゼロの分離につながる可能性がありますが、分離が完全には行われない場合があります。二分法によって補完することができます。
例として、関数f ( x ) = x 2 − 2、開始範囲[ x ] = [ −2, 2 ]、点y = 0を考えます。すると、J f ( x ) = 2 xとなり、最初のニュートンステップは次のようになります。
x ∈ [ −2, − 1 / 2 ]とx ∈ [ 1 / 2 , 2 ]に対して、それぞれニュートン法のステップが追加で適用されます。これらはそれぞれ− √ 2と+ √ 2 の周りの任意の小さな区間に収束します。
区間ニュートン法は、g ( x ) = x 2 − [ 2, 3 ]のような 太い関数にも使用できます。これは、いずれにしても区間結果になります。その結果、[ − √ 3 , − √ 2 ] ∪ [ √ 2 , √ 3 ]を含む区間が生成されます。

様々な区間法は、異なる区間拡張のサイズ間の依存関係を考慮していないため、保守的な結果をもたらす。ただし、区間が狭くなるにつれて、この依存関係の問題は小さくなる。
区間ベクトル[ x ]をより小さなボックス[ x 1 ]、…、[ x k ]で覆うと、
これは、値の範囲に対して有効です。
したがって、上述の区間拡張については、以下のことが成り立つ。
[ f ]([ x ])は右辺の真のスーパーセットであることが多いため、通常は推定値が改善されます。
このようなカバーは、区間ベクトルの太い要素[ x i 1 , x i 2 ]などの二分法によって生成できます。
中央で2つの区間に分割することによって
それでも結果が適切でない場合は、さらに段階的に細分化することが可能だ。ベクトル要素をr回分割することで2r区間のカバーが得られるが、計算コストは大幅に増加する。
区間幅が非常に広い場合、すべての区間を一定の(より狭い)幅を持つ複数の部分区間に分割する方法が有効です。この方法は「分割法」と呼ばれています。これにより、中間的な二分法の計算を回避できます。ただし、どちらの方法も低次元の問題にのみ適しています。
区間演算は、正確な数値を持たない推定値を扱うために、さまざまな分野(集合の反転、モーションプランニング、集合の推定、安定性解析など)で使用できます。 [ 8 ]
区間演算は、誤差解析において、各計算から生じる丸め誤差を制御するために使用されます。区間演算の利点は、各演算後に真の結果を確実に含む区間が存在することです。区間境界間の距離は、現在の丸め誤差の計算結果を直接示します。
区間分析は、ピボットなどの従来のエラー削減方法を置き換えるのではなく、補完するものです。
技術的および物理的プロセスのシミュレーションでは、正確な数値を割り当てることができないパラメータがしばしば発生します。技術部品の製造プロセスでは一定の許容範囲が認められるため、一部のパラメータは一定の範囲内で変動します。さらに、多くの基本定数は正確にはわかっていません。[ 1 ]
許容誤差の影響を受けるこのようなシステムの挙動が、例えば、p ∈ [ p ]および未知のxに対してf ( x , p ) = 0 を満たす場合、可能な解の集合は次のようになります。
区間法を用いることで、誤差分布を求めることができます。これは、従来の誤差伝播解析に代わる手法です。モンテカルロシミュレーションなどの点法とは異なり、区間演算法では、解領域のどの部分も見落とされることがありません。ただし、他の確率に基づく分布は考慮されないため、結果として得られる誤差分布は常に最悪のケースとなります。

区間演算は、ファジィ論理で使用されるように、ファジィ量のアフィリエーション関数にも使用できます。厳密なステートメントx ∈ [ x ]およびx ∉ [ x ]の他に、中間値も可能であり、これには実数μ ∈ [ 0, 1 ]が割り当てられます。μ = 1 は明確なメンバーシップに対応し、μ = 0は非メンバーシップに対応します。分布関数は不確実性を割り当て、これはさらに別の区間として理解できます。
ファジー算術[ 9 ]では、有限個の離散的な所属段階μ i ∈ [ 0, 1 ]のみが考慮されます。このような分布の曖昧な値に対する形式は、区間のシーケンスで表すことができます。
区間[ x ( i ) ]は、ステージμiの変動範囲に正確に対応します。
不明確な値x 1 , …, x nおよび対応する数列に関する関数f ( x 1 , …, x n )の適切な分布
数列で近似できる
どこ
そして、区間法によって計算できます。値[ y (1) ]は区間計算の結果に対応します。
ウォーウィック・タッカーは、スメールの14番目の問題、つまりローレンツ・アトラクターがストレンジ・アトラクターであることを示すために、区間演算を使用した。[ 10 ]トーマス・ヘイルズは、ケプラー予想を解決するために区間演算を使用した。
Fast Library for Number Theoryのウェブサイトには、FLINT/Arbボール算術ライブラリが発表論文やプレプリントで使用されている例がいくつか掲載されています。[ 11 ]
区間演算は数学において全く新しい現象というわけではなく、歴史の中で様々な名称で何度も登場してきました。例えば、紀元前3世紀にはアルキメデスが223/71 < π < 22/7という下限と上限を計算しています。区間を用いた実際の計算は、他の数値計算手法ほど普及したわけでも、完全に忘れ去られたわけでもありません。
区間や実数の他の部分集合を用いた計算規則は、1931 年に Rosalind Cicely Young の著作で発表されました。[ 12 ]デジタルシステムの信頼性を向上させるための範囲数に関する算術的研究は、1951 年にPaul S. Dwyerによる線形代数の教科書で発表されました。[ 13 ]区間は浮動小数点数に関連する丸め誤差を測定するために使用されました。数値解析における区間代数に関する包括的な論文は、Teruo Sunaga (1958) によって発表されました。[ 14 ]
現代の区間演算の誕生は、 1966年にラモン・E・ムーアによる『区間解析』という本の出版によって特徴づけられた。[ 15 ] [ 16 ]彼は1958年の春にこのアイデアを思いつき、1年後にコンピュータ区間演算に関する論文を発表した。[ 17 ]その功績は、単純な原理から出発して、丸め誤差だけでなく、自動誤差解析のための一般的な方法を提供した点にある。
1956年にミエチスワフ・ワルムスは独立して区間を用いた計算の公式を提案したが[ 18 ]、ムーアが最初の非自明な応用例を発見した。
その後の20年間、ドイツの研究者グループは、カールスルーエ大学、そして後にヴッパータールのベルギッシェ大学で、ウルリッヒ・W・クリッシュ[ 19 ] [ 20 ]とゲッツ・アレフェルト[ 21 ]を中心に先駆的な研究を行った。例えば、カール・ニッケルはより効率的な実装を探求し、方程式系の解集合に対する改良された包含手順は、アーノルド・ノイマイヤーらによるものであった。1960年代には、エルドン・R・ハンセンが線形方程式の区間拡張に取り組み、その後、現在ハンセン法として知られる、おそらく最も広く使用されている区間アルゴリズムを含む、グローバル最適化に重要な貢献をした。[ 7 ]この分野の古典的な方法は、しばしば最大(または最小)のグローバル値を決定するという問題を抱えているが、局所最適解しか見つけることができず、より良い値を見つけることはできなかった。ヘルムート・ラチェクとジョン・ジョージ・ロクネは、それまで整数値にしか適用できなかった分枝限定法を、区間を用いることで連続値にも適用できるように発展させた。
1988年、ルドルフ・ローナーは常微分方程式を用いた初期値問題の信頼性の高い解を求めるためのFortranベースのソフトウェアを開発した。[ 22 ]
ジャーナル「Reliable Computing」(元々は「Interval Computations」)は、コンピュータ支援計算の信頼性に特化して1990年代から発行されています。主任編集者であるR. Baker Kearfottは、グローバル最適化に関する研究に加えて、区間演算で使用される表記法と用語の統一に大きく貢献しました。[ 23 ]
近年、フランスのソフィア・アンティポリスにあるINRIAのCOPRINワーキンググループでは、特にパラメータ化された関数の逆像の推定とロバスト制御理論に研究が集中している。 [ 24 ]
区間演算を使用した数値アプリケーションの開発を可能にするソフトウェアパッケージは多数存在します。[ 25 ]これらは通常、プログラムライブラリの形で提供されます。また、区間データ型と適切な演算を言語拡張として扱うC++およびFortranコンパイラもあり、区間演算が直接サポートされています。
1967 年以来、カールスルーエ大学では、C++、Fortran、Pascalなどのさまざまなプログラミング言語向けに、科学計算拡張機能(XSC) が開発されてきました。[ 26 ]最初のプラットフォームはZuse Z23で、適切な基本演算子を備えた新しい区間データ型が利用可能になりました。1976 年に、Zilog Z80上の Pascal の派生版であるPascal-SC が登場し、自動結果検証用の高速で複雑なルーチンを作成できるようになりました。次に、System/370アーキテクチャ (FORTRAN-SC) 用のFortran 77ベースの ACRITH-XSCが登場し、後に IBM によって提供されました。1991 年以降、Pascal-XSCを使用してCコンパイラ用のコードを作成できるようになり、1 年後には、C++ クラスライブラリがさまざまなコンピュータシステムで C-XSC をサポートするようになりました。1997 年に、すべての XSC 派生版がGNU General Public Licenseの下で利用可能になりました。 2000年初頭、改良されたC++標準に準拠するため、ヴッパータール・ベルギッシェ大学の科学計算ワーキンググループの主導の下、C-XSC 2.0がリリースされた。
1993年には、ハンブルク工科大学でProfil/BIAS (Programmer's Runtime Optimized Fast Interval Library, Basic Interval Arithmetic)と呼ばれる別のC++クラスライブラリが開発されました。これは、通常の区間演算をよりユーザーフレンドリーにするもので、ハードウェアの効率的な利用、移植性、および区間の特定の表現方法に依存しないことを重視していました。
Boostコレクションの C++ ライブラリには、区間用のテンプレートクラスが含まれています。その作者たちは、標準 C++ 言語に区間演算を組み込むことを目指しています。[ 27 ]
Frinkプログラミング言語には、任意精度数を扱う区間演算の実装が備わっています。Frinkで書かれたプログラムは、書き換えや再コンパイルなしに区間演算を使用できます。
GAOL [ 28 ]は、区間制約プログラミングで使用される関係区間演算子を提供するという点でユニークな別の C++ 区間算術ライブラリです。
Mooreライブラリ[ 29 ]は、C++における区間演算の効率的な実装です。任意の精度のエンドポイントを持つ区間を提供し、C++の概念機能に基づいています。
Juliaプログラミング言語[ 30 ]は、パッケージ[ 31 ]を介して、実数値関数と複素数値関数の両方の根の探索や区間制約プログラミングなどの高レベル機能とともに、区間演算を実装していますValidatedNumerics.jl。
さらに、Euler Mathematical Toolbox、FriCAS、Maple、Mathematica、Maxima [ 32 ]、MuPADなどのコンピュータ代数システムは、区間を扱うことができます。Matlab拡張機能Intlab [ 33 ]はBLASルーチンに基づいて構築されており、ツールボックスはProfil/BIAS インターフェースを作成します。[ 33 ] [ 34 ]b4m
関数型言語OCamlのライブラリはアセンブリ言語とC言語で書かれた。[ 35 ]
区間演算の標準規格であるIEEE Std 1788-2015は、2015年6月に承認されました。[ 37 ] 2つのリファレンス実装が無料で利用可能です。[ 38 ]これらは、標準規格のワーキンググループのメンバーによって開発されたもので、C++用のlibieeep1788ライブラリ[ 39 ]と、 GNU Octave用のintervalパッケージ[ 40 ]です。
標準規格の最小限のサブセットであるIEEE Std 1788.1-2017は、2017年12月に承認され、2018年2月に公開されました。実装が容易になり、実装の生産が加速する可能性があります。[ 41 ]
世界では毎年、数多くの国際会議やワークショップが開催されています。主要な会議はおそらくSCAN(科学計算、コンピュータ算術、検証済み数値計算に関する国際シンポジウム)でしょうが、その他にもSWIM(区間法に関する小規模ワークショップ)、PPAM(並列処理と応用数学に関する国際会議)、REC(信頼性のある工学計算に関する国際ワークショップ)などがあります。
我々は主に、我々が「ボール算術」と呼ぶ区間算術の変種に基づいて、高品質の誤差範囲を自動的かつ効率的に計算することに重点を置いている。
従来の (inf–sup) 区間演算では、区間
[
a
,
b
]の両端が完全精度
数であるため、区間演算は浮動小数点演算の 2 倍のコストがかかります。ボール演算では、
区間
[
m
±
r
]の中点
m
のみが完全精度数であり、半径
r
には数ビットで十分です。したがって、高精度では、ボール演算は通常の浮動小数点演算よりもコストがかかりません。