1ff337e5ed66677d30b426289f9374ba87541631
[scilab.git] / scilab / modules / elementary_functions / help / ja_JP / searchandsort / dsearch.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="dsearch" xml:lang="ja">
3     <refnamediv>
4         <refname>dsearch</refname>
5         <refpurpose>二分探索法</refpurpose>
6     </refnamediv>
7     <refsynopsisdiv>
8         <title>呼び出し手順</title>
9         <synopsis>[ind, occ, info] = dsearch(X, val [, ch ])</synopsis>
10     </refsynopsisdiv>
11     <refsection>
12         <title>パラメータ</title>
13         <variablelist>
14             <varlistentry>
15                 <term>X</term>
16                 <listitem>
17                     <para>実数ベクトルまたは行列</para>
18                 </listitem>
19             </varlistentry>
20             <varlistentry>
21                 <term>val</term>
22                 <listitem>
23                     <para>
24                         厳密に昇順(val(1) &lt; val(2) &lt; ... &lt; val(n))のn個の要素を有する
25                         実数 (行または列) ベクトル
26                     </para>
27                 </listitem>
28             </varlistentry>
29             <varlistentry>
30                 <term>ch</term>
31                 <listitem>
32                     <para>(オプションの) 文字 "c" または "d" (デフォルト値 "c")</para>
33                 </listitem>
34             </varlistentry>
35             <varlistentry>
36                 <term>ind</term>
37                 <listitem>
38                     <para>Xと同じ次元の実数ベクトルまたは行列</para>
39                 </listitem>
40             </varlistentry>
41             <varlistentry>
42                 <term>occ</term>
43                 <listitem>
44                     <para>
45                         val と同じ形式の実数のベクトル
46                         (しかし, ch="c"の場合には n-1 個の要素となります)
47                     </para>
48                 </listitem>
49             </varlistentry>
50             <varlistentry>
51                 <term>info</term>
52                 <listitem>
53                     <para>整数</para>
54                 </listitem>
55             </varlistentry>
56         </variablelist>
57     </refsection>
58     <refsection>
59         <title>説明</title>
60         <para>この関数は,
61             ソートされたテーブルを探索したり,
62             いくつかのクラス(間隔または値のクラス)に散らばっている
63             ベクトルの要素の数を数える際に有用です.
64         </para>
65         <para>
66             デフォルトで,または <literal>ch="c"</literal>の時,
67             これは区間の場合で, n-1 個の間隔で
68             各 X(i) の探索が行われます.
69             区間は次のように定義されます: 
70         </para>
71         <programlisting role=""><![CDATA[ 
72 I1 = [val(1), val(2)]
73 Ik = (val(k), val(k+1)] for 1 < k <= n-1 ; 
74  ]]></programlisting>
75         <para>そして:</para>
76         <variablelist>
77             <varlistentry>
78                 <term>ind(i)</term>
79                 <listitem>
80                     <para>はX(i)の区間番号です.
81                         (X(i)が [val(1),val(n)] の範囲にない場合は 0)
82                     </para>
83                 </listitem>
84             </varlistentry>
85             <varlistentry>
86                 <term>occ(k)</term>
87                 <listitem>
88                     <para>はIkの中にあるXの要素の数です.</para>
89                 </listitem>
90             </varlistentry>
91             <varlistentry>
92                 <term>info</term>
93                 <listitem>
94                     <para>[val(1),val(n)]の範囲にないXの要素の数</para>
95                 </listitem>
96             </varlistentry>
97         </variablelist>
98         <para>
99             <literal>ch="d"</literal> の場合, これは離散値の時で,
100             各 X(i) に関して val(k) と等しいかどうかの検索となります :
101         </para>
102         <variablelist>
103             <varlistentry>
104                 <term>ind(i)</term>
105                 <listitem>
106                     <para>は,値がX(i) (X(i)=val(k)の場合, ind(i) = k) に一致する要素の添字と等しくなります.
107                         X(i) が val に含まれない場合は 0 となります.
108                     </para>
109                 </listitem>
110             </varlistentry>
111             <varlistentry>
112                 <term>occ(k)</term>
113                 <listitem>
114                     <para>val(k)に等しい X の要素の数</para>
115                 </listitem>
116             </varlistentry>
117             <varlistentry>
118                 <term>info</term>
119                 <listitem>
120                     <para>
121                         集合{val(1),...,val(n)}の中にない X の要素の数
122                     </para>
123                 </listitem>
124             </varlistentry>
125         </variablelist>
126     </refsection>
127     <refsection>
128         <title>例</title>
129         <programlisting role="example"><![CDATA[ 
130 // 例 #1 (elementary stat for U(0,1))
131 m = 50000 ; n = 10;
132 X = grand(m,1,"def");
133 val = linspace(0,1,n+1)';
134 [ind, occ] = dsearch(X, val);
135 clf() ; plot2d2(val, [occ/m;0])  // no normalisation : y must be near 1/n
136
137
138 // 例 #2 (elementary stat for B(N,p))
139 N = 8 ; p = 0.5; m = 50000;
140 X = grand(m,1,"bin",N,p); val = (0:N)';
141 [ind, occ] = dsearch(X, val, "d");
142 Pexp = occ/m; Pexa = binomial(p,N); 
143 clf() ; hm = 1.1*max(max(Pexa),max(Pexp));
144 plot2d3([val val+0.1], [Pexa' Pexp],[1 2],"111",  ...
145         "Pexact@Pexp", [-1 0 N+1 hm],[0 N+2 0 6])
146 xtitle(  "binomial distribution B("+string(N)+","+string(p)+") :" ...
147         +" exact probability versus experimental ones")
148
149
150 // 例 #3 (piecewise Hermite polynomial)
151 x = [0 ; 0.2 ; 0.35 ; 0.5 ; 0.65 ; 0.8 ;  1];
152 y = [0 ; 0.1 ;-0.1  ; 0   ; 0.4  ;-0.1 ;  0];
153 d = [1 ; 0   ; 0    ; 1   ; 0    ; 0   ; -1];
154 X = linspace(0, 1, 200)';
155 ind = dsearch(X, x);
156
157 // Hermite base 関数を定義
158 deff("y=Ll(t,k,x)","y=(t-x(k+1))./(x(k)-x(k+1))")   // Lagrange left on Ik
159 deff("y=Lr(t,k,x)","y=(t-x(k))./(x(k+1)-x(k))")     // Lagrange right on Ik
160 deff("y=Hl(t,k,x)","y=(1-2*(t-x(k))./(x(k)-x(k+1))).*Ll(t,k,x).^2")
161 deff("y=Hr(t,k,x)","y=(1-2*(t-x(k+1))./(x(k+1)-x(k))).*Lr(t,k,x).^2")
162 deff("y=Kl(t,k,x)","y=(t-x(k)).*Ll(t,k,x).^2")
163 deff("y=Kr(t,k,x)","y=(t-x(k+1)).*Lr(t,k,x).^2")
164
165 // 曲線をプロット
166 Y = y(ind).*Hl(X,ind) + y(ind+1).*Hr(X,ind) + d(ind).*Kl(X,ind) + d(ind+1).*Kr(X,ind);
167 clf(); plot2d(X,Y,2) ; plot2d(x,y,-9,"000") 
168 xtitle("an Hermite piecewise polynomial")
169 // NOTE : you can verify by adding these ones : 
170 // YY = interp(X,x,y,d); plot2d(X,YY,3,"000")
171  ]]></programlisting>
172     </refsection>
173     <refsection role="see also">
174         <title>参照</title>
175         <simplelist type="inline">
176             <member>
177                 <link linkend="find">find</link>
178             </member>
179             <member>
180                 <link linkend="tabul">tabul</link>
181             </member>
182         </simplelist>
183     </refsection>
184 </refentry>