数理解析研究所講究録920 巻 1995 年 165-172

165

18.
陰関数描画に関する –つの試み近藤祐史 (詫間電波高専)
三好善彦 (埼玉女子短大)
齋藤友克 (上智大学)

18.1 はじめに計算機を用いて様々な問題を解決しようとする場合計算の結果を可視化することは、 現象の理解、背景の洞察もしくは新しい課題の発見等のために欠くべからざるプロセスになっている。特に数式で与えられた結果の幾何的イメージを把握出来れば、解の存在範囲や交点の個数配置などが容易に見る事が出来、最終的な答えを導き出すことに役にたつ場合がある。

関数描画としては、基本的な出発点として大別して追跡法と全画面検索法がある。我々の基本となる方針は全画面検索法を前提として考察する。本稿では関数の描画に対する基本的な出発点を提起したい。

18.2 関数の描画とは関数の描画とは、 与えられた領域 $D$ での関数 $f=0$ の解を必要とされる出力装置 (ディスプレイ、プリンター等) に出力することとする。

与えられた関数を表現する場合、 関数の計算精度、描画精度は描画する装置の解像度に依存する。
そのため描画とは、 関数と定義域および解像度と呼ばれるものにによって定められる描画関数を計算することである。以下描画に対する基本的な定義として解像度ならびに描画関数$\chi$の定義を述べる。

166

18.2.1 定義
以下ここで扱う関数 $f$ は、$R^{n}$の連結部分集合 $D$ 上で定義された関数であって $D$ 上連続な関数とする。

$\blacksquare$

解像度

画像の解像度とは定義域$.D$の部分集合の族 $S=$ {$S\mathrm{i},$|S, 連結 $i=1,$$\cdot\cdot,$$,$$m$} であって次のものをいう。
定義 182.1. 集合$S$が $D$ 上定義された関数 $f$ の解像度とは$D= \bigcup_{i=1}s:$$\blacksquare$,$S:\cap S_{j}=\emptyset i\neq j$

描画関数

描画関数として領域、解像度、非描画関数によって定められる様々な特性関数、 character$\lambda’(D, S)$と呼ばれるものを定義する。
定義 1822.

1.

2.

$\chi$

2.

上の解像度$\chi(S.)=0$$\chi$$S$による character $\chi(D, S)(f)$ とは、: $Sarrow\{0,1\}$

定義 1823.

1.

$D$

$D$

ならば

$S_{1}$の任意の元$x$に対し $f(x)\neq 0$

上の $S$ における faithful character

は関数 $f$ の$\chi(S.)=1$$S$$\chi$とはにおける character

ならば $S$ : のある元

$x$が存在し$f(x\rangle$$=0$である

関数の描画としては、 この faithful character を計算できれば問題は、 解決している。 しかし、 関数が代数関数に限っても現在のところ万能な計算アルゴリズムは存在しない。 そこで、 十分実用に耐える character として条件をを弱めた次のような boundary character を提唱したい。

定義 1824.

1.
2.

$\chi$$D$

上の $S$ による boundary character $\chi(D, S)(f)$ とは: $Sarrow\{0,1\}$$\chi(S.)=0$

ここで瓦は集合$S_{i}$

ならば双の任意の元$x$に対し $f(x)\neq 0$ である。の境界からなる集合である。

167

18.3 ifplot
18.3.1 First Stepifplot は、 平面領域を小さな矩形に分割しその–つ–つを解像度$S$.と捉えることにより、 描画関数

boundary character を求め関数描画を行っている。 ifplot の基本的な考え方は次の中間値の定理に基づいている。
定理 183.1. 中間値の定理ある区間において連続な関数 $f(x)$ が、 この区間に属する点 $a,$て相異なる値 $f(a)=\alpha,$ $f(b)=\beta$ をとるとき、$a,$$b$の中間のある点において、 この値$c$解像度に対応する矩形の境界点することによって解像度

例えば、

定理により

$f(x\mathrm{o}, y\mathit{0})$$x\mathrm{o}$と$x_{1}$と$S_{i}$$\mu$$(x\mathrm{o}, y\mathit{0}),$$\alpha,$$\beta$$\mu$においとすれば、 $f(x)$ はをとる。
$(x\mathit{0}, y_{1}),$の boundary character$f(x_{1}, y\mathrm{O})$の中間にある任意の値を$b$の符号が異なれば$(x_{1}, y\mathit{0}),$$(x_{1}, y_{1})$の関数値 $f(x, y)$ の符号を判定を求めている。
$(f(x_{\mathrm{O}}, y\mathrm{o})<0$の区間内で必ず $f(x, y\mathit{0})=0$ となる。

ifplot の出力例 1$x^{5}-2x^{2}y+y^{5}$と $f(x_{1,y}\mathit{0})>0$ など)

、中間値の

168

18.3.2 Second Stepboundary character を求める時に中間値の定理を用いているが、 その時の区間内に奇数個の解が関数に存在すれば良いのであるが (奇数個の解を持てば必ず区間の端の点の関数の符号は異なる) 、偶数個の解が関数に存在する時が問題となる。 すなわち、偶数個の解を持てば区間の端の点の関数値の符号は同じとなってしまい、 中間値の定理を利用したこの方法では解を持たないと判断してしまうからである。

実際問題として、解像度に依存する$S$: は出力装置の最小の単位であるため、視覚上はそれほど問題にならないと言えるが、 数学的に考えた場合は問題となるであろう。

$\blacksquare$

Sturm の定理の利用

中間値の定理のみでは解決できない場合の問題点を解決するための方法として、 boundary characterを求める時に、 Sturm 列を用いれば正確に区間内の解の個数を判定することが可能である。
定義 18 .3.2. Sturm 列 $f(x)$ を実係数方程式とする。 ただし、 $f(x)=0$ は重根を持たないとする。
従って、 $f(x)$ とその導関数 $f’(x)$ は共通因子を持たない。にユークリッドの互除法を行ってその最大公約数を求める。

$f(x)$ と $f’(x)$ここで、$f_{m}$は$0$$f(x)$$=$$q1(X)f’(x)-f_{2}(X)$$f’(_{X)}$$=$$q_{2}(_{X})f_{2()}x-f_{3(X)}$$f_{2}(x)$$=$$q_{3}(x)f_{3}(X)-f_{4}(X)$$f_{m-2}(x)$$=$$q_{m-}\iota(x)f_{m}-\cdot \mathrm{l}(x)-f_{m}$でない定数を表し、 このようにして得られた整式の列$fo(x),$ $f_{1}(x),$ $f_{2}(X),$ $\cdots,$ $f_{m}$ (ただし、 $fo(x)=f(X),$ $f_{1}(x)=f’(x)$のことを多項式の Sturm 列と定義する。
定理 18 .3.3. Sturm の定理 $a<b$ で $a,$$b$

は $f(x)$ の根でないならば、実根の個数は $V(a)-V(b)$ に等しい。 ただし、 $V(a)$ は Sturm 列$f_{0}(a),$ $f_{1}(a),$の符号の変化の数とする。

$f_{2}(\mathit{0}),$$\cdots,$$f_{m}$$a$と$b$の間にある $f(x)$ の169

中間値の定理の場合は、 ある区間の端の点の関数値の符号が異なればその区間内に必ず存在することが言えるが、 この定理の場合は、 Sturm 列を求めることにより “ その区間内の解の個数までも判定することが出来るという” ことである。

18.4 領域内の零点判定
領域 $D$ において零点が存在するか否やの判定を行うアルゴリズムは、 一般的には極めて困難な問題である。本アルゴリズムは、領域内部に零点が存在する必要条件を求める。 とくに、孤立特異点を表現する方法は現在一般的なアルゴリズムは提案されていない。

18.5 区間演算アルゴリズム描画
領域 $D$ を $D=\{(x, y)|a_{0}<x<a_{n}, b_{0}<y<b_{m}\}$ によって与えられているとする。解像度を定義する$S_{i.j}$た、$b\mathrm{l},$$b_{0},$のとき$X_{1},$

は、. 区間$\cdots,$$Y_{J}$$b_{m}$$(a_{0}.’O_{\mathfrak{n}})$を$\mathrm{n}$個に$\mathrm{a}\backslash .\text{割した_{、}}$$a\mathit{0},$$a_{1},$$\cdot,$$,$$,$$a_{n}$

列と区間 $(b_{0}, b_{m})$ を$\ln$個に分割しにより Si $j=\{(x, y)|a:-\iota<x<a., b_{j-}\mathrm{l}<y, b_{j}\}$ と与えられているとする。

を各々区間数$X_{i}=(a_{\mathfrak{i}-}\iota, a.),$$Y_{j}=(b_{j-1}, b_{j})$ことすれば、 つぎの定理が成り立つ。

定理 185.1. 領域 $\{(x, y)|ai-1 \leq x \leq a:, b_{j-l} \leq y\leq b_{j}\}$ 内において関数 $f(x, y)$ が零点を持てば、 $f(X., Y_{j})$ はゼロを含む区間数である。

このことを利用する事により比較的容易に領域内の零点の存在を推定することが出来る。特に孤立特異点を推定するアルゴリズムとしては現在このアルゴリズムのみである。 しかしこのアルゴリズム
は、 計算量が増大するてんが問題ではある。

18.5.1 区間演算利用の例
例 1 で計算した図を区間演算を利用した方法で表示すると

170

この場合は、孤立特異点が無いため通常の ifplot と同程度のグラフが求まる。 しかし、 孤立特異点が存在する場合は、 次の例の様になる。 表示する関数は heart 型関数の式$93392896/15625*x^{6}+(94359552/625*y^{2}+91521024/625*y-249088/125)*x^{4}+$$(1032192/25*y^{4}-36864*y^{3}-7732224/25*y^{2}-207360*y+770048/25)*x^{2}+$$65536*y^{6}+49152*y^{5}-135168*y^{4}-72704*y^{3}+101376*y2+27648*y-27648$である。

171

ifplot による出刀172

区間演算による出力
この図より孤立点が 4 個存在する可能性がある。 Gr\"obner Base を用いて計算すると。

$76*y+41=0$$351*y+386=0$$\{$$\{$$123201*x^{2}-17150=0$$2888*x^{2}-8575$ $=0$の各々の解が孤立特異点であることが判明する。竹島卓 (富士通情報研)