7.4.7 演算

すべての標準の演算子は区間に対しても利用できる (拡張されている、ということだ)。 オペランドの一つが区間であれば、すべての演算は区間演算される。

>> y=3*midrad(3.14,0.01)^2

>> A=midrad(rand(100),1e-4);
>> tic; B=rad(A*A); disp(max(B(:))); toc;

デフォールトでは、行列の演算は中心/半径形式で行われる。 これは効率的であるが、半径が最悪 $ 1.5$倍 overestimate される。 intvalinit('sharpivmult') とすると、 シャープな幅を持つ区間を計算する。
>> intvalinit('sharpivmult')
>> tic; B=rad(A*A); disp(max(B(:))); toc;
なお、中心/半径形式に戻すには、 intvalinit('fastivmult') を実行する。

現在のモードを表示するには、 intvalinit('ivmult') を実行する。

Hargreaves [1] には、 標準関数の評価に関するモード (approximatestdfcts, rigorousstdfcts) の使い方が書いてあるが、 現在の INTLAB (Version 9) にはそういうモードはないようである。 Intlab_V9/intlabsetting.m
% modified 09/10/07 S.M. Rump approximate std fcts removed
と書いてある。

区間 x, y に対して、 交わり $ \texttt{x}\cap \texttt{y}$, 区間包 $ [\inf\{\texttt{x},\texttt{y}\},\sup\{\texttt{x},\texttt{y}\}]$ は それぞれ intersect(x,y), hull(x,y) で計算できる。

(Hargreaves [1] には、 “union” (合併) と書いてあるが、 正確には、合併の区間包 (interval hull) というべきであろう。 そのことは交わりが空である2つの区間の hull() を計算してみると分かる。)
>> x=infsup(-1,2); y=infsup(1.5,3);
>> intersect(x,y)
>> hull(x,y)

abss() は obsolete (廃語) で、 mag() になったとか。 mag(x) は、 $ \dsp\max_{y\in\texttt{x}}\left\vert y\right\vert$ を計算するのかな?

mig() は mignitute というけれど、一体何? こういうのは普通の数学語で書けば良いのに。 mig(x) $ \dsp\min_{y\in\texttt{x}}\vert y\vert$ を計算するのかな?

$\displaystyle \mathop{\mathrm{mig}}\nolimits (\bm{x})=
\left\{
\begin{array}[...
...t)&
\text{if $0\not\in\bm{x}$}\\
0 & \text{otherwise}
\end{array} \right.
$

in(x,y) $ \texttt{x}\subset\texttt{y}$ が成り立つかどうか。 真のとき $ 1$, 偽のとき 0 を返す。

in0(x,y) $ \texttt{x}\subset\texttt{y}^\circ$ (xy の内部に含まれる。 すなわち $ \inf y<\inf x$ かつ $ \sup x<\sup y$) が成り立つかどうか。 真のとき $ 1$, 偽のとき 0 を返す。

桂田 祐史
2020-09-03