Update docs to match implementation of $build_and_dump_html_index
[maxima.git] / doc / info / ja / interpol.texi
blobab7582bf72dba42065fbb3e63f2ac4e5f5212d7c
1 @menu
2 * Introduction to interpol::
3 * Functions and Variables for interpol::
4 @end menu
6 @node Introduction to interpol, Functions and Variables for interpol, interpol, interpol
7 @section Introduction to interpol
9 パッケージ@code{interpol}は
10 多項式内挿のためのLagrange、線形、三次スプライン法を定義します。
12 コメント、バグ、提案は@var{'mario AT edu DOT xunta DOT es'}にコンタクトを取ってください。
14 @opencatbox
15 @category{Numerical methods}
16 @category{Share packages}
17 @category{Package interpol}
18 @closecatbox
20 @node Functions and Variables for interpol,  , Introduction to interpol, interpol
21 @section Functions and Variables for interpol
24 @deffn {関数} lagrange (@var{points})
25 @deffnx {関数} lagrange (@var{points}, @var{option})
26 Lagrange法で多項式内挿を計算します。
27 引数 @var{points}は以下のいずれかでなければいけません:
29 @itemize @bullet
30 @item
31 2列行列, @code{p:matrix([2,4],[5,6],[9,3])},
32 @item
33 対のリスト, @code{p: [[2,4],[5,6],[9,3]]},
34 @item
35 数のリスト, @code{p: [4,6,3]},
36 この場合、横座標は自動的に1, 2, 3などに割り当てられます。
37 @end itemize
39 最初の2つの場合には、
40 計算を行う前に、対は最初の座標に関して並び替えられます。
42 @var{option}引数を使って、
43 独立変数の名前を選択することが可能です。
44 デフォルトでは @code{'x}です;
45 別のものを定義するには、 @code{varname='z}のようなものを書いてください。
47 高次多項式を使って計算する時には、浮動小数点評価は不安定なことに注意してください。
49 例:
51 @example
52 (%i1) load("interpol")$
53 (%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
54 (%i3) lagrange(p);
55        (x - 7) (x - 6) (x - 3) (x - 1)
56 (%o3)  -------------------------------
57                      35
58    (x - 8) (x - 6) (x - 3) (x - 1)
59  - -------------------------------
60                  12
61    7 (x - 8) (x - 7) (x - 3) (x - 1)
62  + ---------------------------------
63                   30
64    (x - 8) (x - 7) (x - 6) (x - 1)
65  - -------------------------------
66                  60
67    (x - 8) (x - 7) (x - 6) (x - 3)
68  + -------------------------------
69                  84
70 (%i4) f(x):=''%;
71                (x - 7) (x - 6) (x - 3) (x - 1)
72 (%o4)  f(x) := -------------------------------
73                              35
74    (x - 8) (x - 6) (x - 3) (x - 1)
75  - -------------------------------
76                  12
77    7 (x - 8) (x - 7) (x - 3) (x - 1)
78  + ---------------------------------
79                   30
80    (x - 8) (x - 7) (x - 6) (x - 1)
81  - -------------------------------
82                  60
83    (x - 8) (x - 7) (x - 6) (x - 3)
84  + -------------------------------
85                  84
86 (%i5) /* Evaluate the polynomial at some points */
87       expand(map(f,[2.3,5/7,%pi]));
88                                   4          3           2
89                     919062  73 %pi    701 %pi    8957 %pi
90 (%o5)  [- 1.567535, ------, ------- - -------- + ---------
91                     84035     420       210         420
92                                              5288 %pi   186
93                                            - -------- + ---]
94                                                105       5
95 (%i6) %,numer;
96 (%o6) [- 1.567535, 10.9366573451538, 2.89319655125692]
97 (%i7) load("draw")$  /* load draw package */
98 (%i8) /* Plot the polynomial together with points */
99       draw2d(
100         color      = red,
101         key        = "Lagrange polynomial",
102         explicit(f(x),x,0,10),
103         point_size = 3,
104         color      = blue,
105         key        = "Sample points",
106         points(p))$
107 (%i9) /* Change variable name */
108       lagrange(p, varname=w);
109        (w - 7) (w - 6) (w - 3) (w - 1)
110 (%o9)  -------------------------------
111                      35
112    (w - 8) (w - 6) (w - 3) (w - 1)
113  - -------------------------------
114                  12
115    7 (w - 8) (w - 7) (w - 3) (w - 1)
116  + ---------------------------------
117                   30
118    (w - 8) (w - 7) (w - 6) (w - 1)
119  - -------------------------------
120                  60
121    (w - 8) (w - 7) (w - 6) (w - 3)
122  + -------------------------------
123                  84
124 @end example
126 @opencatbox
127 @category{Package interpol}
128 @closecatbox
130 @end deffn
133 @deffn {関数} charfun2 (@var{x}, @var{a}, @var{b})
134 もし数 @var{x}が区間 @math{[a, b)}に属するなら、@code{true}を返し、
135 そうでないなら、 @code{false}を返します。
137 @opencatbox
138 @category{Package interpol}
139 @closecatbox
141 @end deffn
144 @deffn {関数} linearinterpol (@var{points})
145 @deffnx {関数} linearinterpol (@var{points}, @var{option})
146 線形法で多項式内挿を計算します。
147 引数 @var{points}は以下のいずれかでなければいけません:
149 @itemize @bullet
150 @item
151 2列行列, @code{p:matrix([2,4],[5,6],[9,3])},
152 @item
153 対のリスト, @code{p: [[2,4],[5,6],[9,3]]},
154 @item
155 数のリスト, @code{p: [4,6,3]},
156 この場合、横座標は自動的に1, 2, 3などに割り当てられます。
157 @end itemize
159 最初の2つの場合には、
160 計算を行う前に、対は最初の座標に関して並び替えられます。
162 @var{option}引数を使って、
163 独立変数の名前を選択することが可能です。
164 デフォルトでは @code{'x}です;
165 別のものを定義するには、 @code{varname='z}のようなものを書いてください。
167 例:
168 @example
169 (%i1) load("interpol")$
170 (%i2) p: matrix([7,2],[8,3],[1,5],[3,2],[6,7])$
171 (%i3) linearinterpol(p);
172         13   3 x
173 (%o3)  (-- - ---) charfun2(x, minf, 3)
174         2     2
175  + (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7)
176     5 x
177  + (--- - 3) charfun2(x, 3, 6)
178      3
180 (%i4) f(x):=''%;
181                 13   3 x
182 (%o4)  f(x) := (-- - ---) charfun2(x, minf, 3)
183                 2     2
184  + (x - 5) charfun2(x, 7, inf) + (37 - 5 x) charfun2(x, 6, 7)
185     5 x
186  + (--- - 3) charfun2(x, 3, 6)
187      3
188 (%i5)  /* Evaluate the polynomial at some points */
189        map(f,[7.3,25/7,%pi]);
190                             62  5 %pi
191 (%o5)                 [2.3, --, ----- - 3]
192                             21    3
193 (%i6) %,numer;
194 (%o6)  [2.3, 2.952380952380953, 2.235987755982989]
195 (%i7) load("draw")$  /* load draw package */
196 (%i8)  /* Plot the polynomial together with points */
197        draw2d(
198          color      = red,
199          key        = "Linear interpolator",
200          explicit(f(x),x,-5,20),
201          point_size = 3,
202          color      = blue,
203          key        = "Sample points",
204          points(args(p)))$
205 (%i9)  /* Change variable name */
206        linearinterpol(p, varname='s);
207        13   3 s
208 (%o9) (-- - ---) charfun2(s, minf, 3)
209        2     2
210  + (s - 5) charfun2(s, 7, inf) + (37 - 5 s) charfun2(s, 6, 7)
211     5 s
212  + (--- - 3) charfun2(s, 3, 6)
213      3
214 @end example
216 @opencatbox
217 @category{Package interpol}
218 @closecatbox
220 @end deffn
224 @deffn {関数} cspline (@var{points})
225 @deffnx {関数} cspline (@var{points}, @var{option1}, @var{option2}, ...)
226 三次スプライン法で多項式内挿を計算します。
227 引数 @var{points}は以下のいずれかでなければいけません:
229 @itemize @bullet
230 @item
231 2列行列, @code{p:matrix([2,4],[5,6],[9,3])},
232 @item
233 対のリスト, @code{p: [[2,4],[5,6],[9,3]]},
234 @item
235 数のリスト, @code{p: [4,6,3]},
236 この場合、横座標は自動的に1, 2, 3などに割り当てられます。
237 @end itemize
239 最初の2つの場合には、
240 計算を行う前に、対は最初の座標に関して並び替えられます。
242 特定の必要性に合わせるため3つのオプションがあります:
243 @itemize @bullet
244 @item
245 @code{'d1}, デフォルトは @code{'unknown}, は
246  @math{x_1}での一階導関数です;
247 もし @code{'unknown}なら、
248  @math{x_1}での二階導関数は0に等しいとされます(自然な三次スプライン);
249 もし数字だったら、二階導関数はこの数字に基づいて計算されます。
251 @item
252 @code{'dn}, デフォルトは @code{'unknown}, は
253  @math{x_n}での一階導関数です;
254 もし @code{'unknown}なら、
255  @math{x_n}での二階導関数は0に等しいとされます(自然な三次スプライン);
256 もし数字だったら、二階導関数はこの数字に基づいて計算されます。
258 @item
259 @code{'varname}, デフォルトは @code{'x}, は
260 独立変数の名前です。
261 @end itemize
263 例:
264 @example
265 (%i1) load("interpol")$
266 (%i2) p:[[7,2],[8,2],[1,5],[3,2],[6,7]]$
267 (%i3) /* Unknown first derivatives at the extremes
268          is equivalent to natural cubic splines */
269       cspline(p);
270               3         2
271         1159 x    1159 x    6091 x   8283
272 (%o3)  (------- - ------- - ------ + ----) charfun2(x, minf, 3)
273          3288      1096      3288    1096
274             3         2
275       2587 x    5174 x    494117 x   108928
276  + (- ------- + ------- - -------- + ------) charfun2(x, 7, inf)
277        1644       137       1644      137
278           3          2
279     4715 x    15209 x    579277 x   199575
280  + (------- - -------- + -------- - ------) charfun2(x, 6, 7)
281      1644       274        1644      274
282             3         2
283       3287 x    2223 x    48275 x   9609
284  + (- ------- + ------- - ------- + ----) charfun2(x, 3, 6)
285        4932       274      1644     274
287 (%i4) f(x):=''%$
288 (%i5) /* Some evaluations */
289       map(f,[2.3,5/7,%pi]), numer;
290 (%o5) [1.991460766423356, 5.823200187269903, 2.227405312429507]
291 (%i6) load("draw")$  /* load draw package */
292 (%i7) /* Plotting interpolating function */
293       draw2d(
294         color      = red,
295         key        = "Cubic splines",
296         explicit(f(x),x,0,10),
297         point_size = 3,
298         color      = blue,
299         key        = "Sample points",
300         points(p))$
301 (%i8) /* New call, but giving values at the derivatives */
302       cspline(p,d1=0,dn=0);
303               3          2
304         1949 x    11437 x    17027 x   1247
305 (%o8)  (------- - -------- + ------- + ----) charfun2(x, minf, 3)
306          2256       2256      2256     752
307             3          2
308       1547 x    35581 x    68068 x   173546
309  + (- ------- + -------- - ------- + ------) charfun2(x, 7, inf)
310         564       564        141      141
311          3          2
312     607 x    35147 x    55706 x   38420
313  + (------ - -------- + ------- - -----) charfun2(x, 6, 7)
314      188       564        141      47
315             3         2
316       3895 x    1807 x    5146 x   2148
317  + (- ------- + ------- - ------ + ----) charfun2(x, 3, 6)
318        5076       188      141      47
319 (%i8) /* Defining new interpolating function */
320       g(x):=''%$
321 (%i9) /* Plotting both functions together */
322       draw2d(
323         color      = black,
324         key        = "Cubic splines (default)",
325         explicit(f(x),x,0,10),
326         color      = red,
327         key        = "Cubic splines (d1=0,dn=0)",
328         explicit(g(x),x,0,10),
329         point_size = 3,
330         color      = blue,
331         key        = "Sample points",
332         points(p))$
333 @end example
335 @opencatbox
336 @category{Package interpol}
337 @closecatbox
339 @end deffn
341 @deffn {関数} ratinterpol (@var{points}, @var{numdeg})
342 @deffnx {関数} ratinterpol (@var{points}, @var{numdeg}, @var{option1}, @var{option2}, ...)
343  @var{points}で与えられたデータと@var{numdeg}に等しい分子の次数の関して、
344 有理形内挿を生成します;
345 分子の次数は自動的に計算されます。
346 引数 @var{points}は以下のいずれかでなければいけません:
348 @itemize @bullet
349 @item
350 2列行列, @code{p:matrix([2,4],[5,6],[9,3])},
351 @item
352 対のリスト, @code{p: [[2,4],[5,6],[9,3]]},
353 @item
354 数のリスト, @code{p: [4,6,3]},
355 この場合、横座標は自動的に1, 2, 3などに割り当てられます。
356 @end itemize
358 最初の2つの場合には、
359 計算を行う前に、対は最初の座標に関して並び替えられます。
361 特定の必要性に合わせるため2つのオプションがあります:
362 @itemize @bullet
363 @item
364 @code{'denterm}, デフォルトは @code{1}, は
365 分子の中の多項式の独立項です。
367 @item
368 @code{'varname}, デフォルトは @code{'x}, は
369 独立変数の名前です。
370 @end itemize
372 例:
374 @example
375 (%i1) load("interpol")$
376 (%i2) load("draw")$
377 (%i3) p:[[7.2,2.5],[8.5,2.1],[1.6,5.1],[3.4,2.4],[6.7,7.9]]$
378 (%i4) for k:0 thru length(p)-1 do                                     
379         draw2d(
380           explicit(ratinterpol(p,k),x,0,9),                      
381           point_size = 3,                                        
382           points(p),                                             
383           title = concat("Degree of numerator = ",k),            
384           yrange=[0,10])$
385 @end example
387 @opencatbox
388 @category{Package interpol}
389 @closecatbox
391 @end deffn