7.4.9 非線形方程式

verifynlss() は、“Verified solution of nonlinear system”, つまり非線形方程式の精度保証した解を求める。 アルゴリズムは、Krawczyk 法に基づく (Krawczyk [2], Moore [18])。

$ \texttt{f}\colon\Omega\to\mathbb{R}^n$, $ \Omega\subset\mathbb{R}^n$ のとき、 verifynlss(f,xs) とすると、 方程式 $ \texttt{f}(x)=0$xs の近くの解を求める。 解の存在が検証できた場合は、解を包み込む区間を返す。 検証できなかった場合は、NaN を返す 1

関数 f が1変数関数の場合、 変数 x の式 f(x) を表す文字列で入力する。

$ \dfrac{2x}{e}-2e^{-x}+1=0$$ 1$ の近くの解を求める
verifynlss('2*x*exp(-1)-2*exp(-x)+1',1)
これで $ [0.4224,0.4225]$ という結果が得られるが、 $ -3$ の近くの解を求めさせようとすると NaN を返した。

$ \texttt{f}\colon\Omega\to\mathbb{R}$, $ \Omega\subset\mathbb{R}^n$ のとき、 verifynlss(f,xs,'h') とすると、 方程式 $ \texttt{f}'(x)=0$xs の近くの解を求める。 $ n>1$ の場合は、f を定義する M-ファイルを用意する。

関数の名前は g にするなら
>> edit g
関数 g を定義する M-ファイル g.m
function y=g(x)
  y=x
  y(1)=3*x(1)^2-x(1)+3*x(2)-5;
  y(2)=4*x(1)+2*x(1)^2+x(2)-7;
$ \texttt{g}(x)=0$ の点 $ (2,3)$ の近くの解を求める
>> verifynlss(@g,[2,3])
intval ans =
[    0.9999,    1.0001]
[    0.9999,    1.0001]

桂田 祐史
2020-09-03