Windows installer: Update Gnuplot to 6.0.2.
[maxima.git] / doc / info / ja / orthopoly.texi
blob66baca9e7a36e334ec0ff4c4db70d490436cb926
1 @menu
2 * Introduction to orthogonal polynomials::
3 * Functions and Variables for orthogonal polynomials::
4 @end menu
6 @node Introduction to orthogonal polynomials, Functions and Variables for orthogonal polynomials, orthopoly, orthopoly
7 @section Introduction to orthogonal polynomials
9 @code{orthopoly}は、
10 Chebyshev, Laguerre, Hermite, Jacobi, Legendre, 超球(Gegenbauer)
11 多項式を含むいくつかの種類の直交多項式のシンボリックな評価と数値評価のためのパッケージです。
12 さらに、@code{orthopoly}には球Bessel, 球Hankel, 球調和関数のサポートが含まれます。
14 ほとんどの部分に関して、
15 @code{orthopoly}は
16 Abramowitz and Stegunの@i{Handbook of Mathematical Functions}, Chapter 22 (10th printing, December 1972)の慣例に従います;
17 加えて、
18 Gradshteyn and Ryzhikの@i{Table of Integrals, Series, and Products} (1980 corrected and enlarged edition)と
19 Eugen Merzbacherの@i{Quantum Mechanics} (2nd edition, 1970)を使います。
21 @c INSTALLATION INSTRUCTIONS NO LONGER RELEVANT
22 @c BUT MAYBE SOME OF THESE FILES SHOULD BE MENTIONED IN ANOTHER CONTEXT
23 @c This will create a directory @code{orthopoly_x} (again x is the release 
24 @c identifier) that contains the source file @code{orthopoly.lisp}, user 
25 @c documentation in html and texi formats, a sample maxima initialization file 
26 @c @code{orthopoly-init.lisp}, a README file, a testing routine 
27 @c @code{test_orthopoly.mac}, and two demonstration files.
29 @c Start Maxima and compile orthopoly. To do this, use the command
30 @c 
31 @c (c1) compile_file("orthopoly.lisp");
33 University of Nebraska at Kearney (UNK)のBarton Willisが
34 @code{orthopoly}パッケージとドキュメンテーションを書きました。
35 パッケージはGNU General Public License (GPL)の下で公開されています。
37 @opencatbox
38 @category{Orthogonal polynomials}
39 @category{Share packages}
40 @category{Package orthopoly}
41 @closecatbox
43 @subsection Getting Started with orthopoly
45 @code{load ("orthopoly")}は@code{orthopoly}パッケージをロードします。
47 3次のLegendre多項式を見つけるには、
49 @c ===beg===
50 @c legendre_p (3, x);
51 @c ===end===
52 @example
53 (%i1) legendre_p (3, x);
54                       3             2
55              5 (1 - x)    15 (1 - x)
56 (%o1)      - ---------- + ----------- - 6 (1 - x) + 1
57                  2             2
58 @end example
60 これを@var{x}の冪の和として表すには、
61 @var{ratsimp}か@var{rat}を結果に適用してください。
63 @c CONTINUING PREVIOUS EXAMPLE HERE
64 @c ===beg===
65 @c [ratsimp (%), rat (%)];
66 @c ===end===
67 @example
68 (%i2) [ratsimp (%), rat (%)];
69                         3           3
70                      5 x  - 3 x  5 x  - 3 x
71 (%o2)/R/            [----------, ----------]
72                          2           2
73 @end example
75 あるいはまた、
76 @code{legendre_p}の第二引数 (「主」変数)を正準有理形(CRE)にしてください。
78 @c ===beg===
79 @c legendre_p (3, rat (x));
80 @c ===end===
81 @example
82 (%i1) legendre_p (3, rat (x));
83                               3
84                            5 x  - 3 x
85 (%o1)/R/                   ----------
86                                2
87 @end example
89 浮動小数点評価に関して、
90 @code{orthopoly}はランニング誤差解析を使って
91 誤差の上限を推定します。
92 例えば、
94 @c ===beg===
95 @c jacobi_p (150, 2, 3, 0.2);
96 @c ===end===
97 @example
98 (%i1) jacobi_p (150, 2, 3, 0.2);
99 (%o1) interval(- 0.062017037936715, 1.533267919277521E-11)
100 @end example
102 区間(interval)は形式form @code{interval (@var{c}, @var{r})}を取ります。
103 ここで、@var{c}は中央値、@var{r}は区間の半径です。
104 Maximaは区間上の算術をサポートしていないので、
105 グラフィックスなどいくつかの状況では
106 誤差を抑制し、区間の中央値だけ出力したいでしょう。
107 これをするには、オプション変数@code{orthopoly_returns_intervals}を
108 @code{false}に設定してください。
110 @c ===beg===
111 @c orthopoly_returns_intervals : false;
112 @c jacobi_p (150, 2, 3, 0.2);
113 @c ===end===
114 @example
115 (%i1) orthopoly_returns_intervals : false;
116 (%o1)                         false
117 (%i2) jacobi_p (150, 2, 3, 0.2);
118 (%o2)                  - 0.062017037936715
119 @end example
121 更に知るにはセクション@pxref{Floating point Evaluation}を参照してください。
123 @code{orthopoly}のほとんどの関数は@code{gradef}プロパティを持ちます;
124 例えば、
126 @c ===beg===
127 @c diff (hermite (n, x), x);
128 @c diff (gen_laguerre (n, a, x), x);
129 @c ===end===
130 @example
131 (%i1) diff (hermite (n, x), x);
132 (%o1)                     2 n H     (x)
133                                n - 1
134 (%i2) diff (gen_laguerre (n, a, x), x);
135               (a)               (a)
136            n L   (x) - (n + a) L     (x) unit_step(n)
137               n                 n - 1
138 (%o2)      ------------------------------------------
139                                x
140 @end example
143 二番目の例の単位階段関数は、
144 @var{n}が0で評価することによって、そうでなければ生じる誤差を抑制します。
146 @c CONTINUING PREVIOUS EXAMPLE HERE
147 @c ===beg===
148 @c ev (%, n = 0);
149 @c ===end===
150 @example
151 (%i3) ev (%, n = 0);
152 (%o3)                           0
153 @end example
155 @code{gradef}プロパティは「主」変数にのみ適用されます;
156 他の引数に関する導関数は、普通、エラーメッセージに帰着します;
157 例えば、
159 @c ===beg===
160 @c diff (hermite (n, x), x);
161 @c diff (hermite (n, x), n);
162 @c ===end===
163 @example
164 (%i1) diff (hermite (n, x), x);
165 (%o1)                     2 n H     (x)
166                                n - 1
167 (%i2) diff (hermite (n, x), n);
169 Maxima doesn't know the derivative of hermite with respect the first
170 argument
171  -- an error.  Quitting.  To debug this try debugmode(true);
172 @end example
174 一般に、@code{orthopoly}の関数はリストや行列上に写像します。
175 写像を完全に評価するには、
176 オプション変数@code{doallmxops}と@code{listarith}はともに
177 @code{true}(デフォルト値)でなければいけません。
178 行列上への写像を見るには、以下を考えてください。
180 @c ===beg===
181 @c hermite (2, x);
182 @c m : matrix ([0, x], [y, 0]);
183 @c hermite (2, m);
184 @c ===end===
185 @example
186 (%i1) hermite (2, x);
187                                      2
188 (%o1)                    - 2 (1 - 2 x )
189 (%i2) m : matrix ([0, x], [y, 0]);
190                             [ 0  x ]
191 (%o2)                       [      ]
192                             [ y  0 ]
193 (%i3) hermite (2, m);
194                [                             2  ]
195                [      - 2        - 2 (1 - 2 x ) ]
196 (%o3)          [                                ]
197                [             2                  ]
198                [ - 2 (1 - 2 y )       - 2       ]
199 @end example
201 二番目の例では、値の@code{i, j}要素は@code{hermite (2, m[i,j])}です;
202 次の例で見るように、これは、
203 計算@code{-2 + 4 m . m}と同じではありません。
205 @c CONTINUING PREVIOUS EXAMPLE HERE
206 @c ===beg===
207 @c -2 * matrix ([1, 0], [0, 1]) + 4 * m . m;
208 @c ===end===
209 @example
210 (%i4) -2 * matrix ([1, 0], [0, 1]) + 4 * m . m;
211                     [ 4 x y - 2      0     ]
212 (%o4)               [                      ]
213                     [     0      4 x y - 2 ]
214 @end example
216 定義域外の点で関数を評価すると、
217 一般に、@code{orthopoly}は未評価関数を返します。
218 例えば、
220 @c ===beg===
221 @c legendre_p (2/3, x);
222 @c ===end===
223 @example
224 (%i1) legendre_p (2/3, x);
225 (%o1)                        P   (x)
226                               2/3
227 @end example
229 @code{orthopoly}はTexへの翻訳をサポートします;
230 端末上での2次元出力も行います。
232 @c ===beg===
233 @c spherical_harmonic (l, m, theta, phi);
234 @c tex (%);
235 @c jacobi_p (n, a, a - b, x/2);
236 @c tex (%);
237 @c ===end===
238 @example
239 (%i1) spherical_harmonic (l, m, theta, phi);
240                           m
241 (%o1)                    Y (theta, phi)
242                           l
243 (%i2) tex (%);
244 $$Y_@{l@}^@{m@}\left(\vartheta,\varphi\right)$$
245 (%o2)                         false
246 (%i3) jacobi_p (n, a, a - b, x/2);
247                           (a, a - b) x
248 (%o3)                    P          (-)
249                           n          2
250 (%i4) tex (%);
251 $$P_@{n@}^@{\left(a,a-b\right)@}\left(@{@{x@}\over@{2@}@}\right)$$
252 (%o4)                         false
253 @end example
255 @subsection Limitations
257 式がいくつかの直交多項式を記号順で含む時、
258 式が実際に0になる可能性がありますが、
259 まだMaximaはそれを零に整理することができません。
260 もしそんな量で割るなら、困ったことになるでしょう。
261 例えば、
262 以下の式は
263 1より大きな整数 @var{n}で零になりますが、
264 まだMaximaはそれを零に整理することができません。
266 @c ===beg===
267 @c (2*n - 1) * legendre_p (n - 1, x) * x - n * legendre_p (n, x) 
268 @c       + (1 - n) * legendre_p (n - 2, x);
269 @c ===end===
270 @example
271 (%i1) (2*n - 1) * legendre_p (n - 1, x) * x - n * legendre_p (n, x)
272       + (1 - n) * legendre_p (n - 2, x);
273 (%o1)  (2 n - 1) P     (x) x - n P (x) + (1 - n) P     (x)
274                   n - 1           n               n - 2
275 @end example
277 特定の @var{n}では式を零に換算できます。
279 @c CONTINUING PREVIOUS EXAMPLE HERE
280 @c ===beg===
281 @c ev (% ,n = 10, ratsimp);
282 @c ===end===
283 @example
284 (%i2) ev (% ,n = 10, ratsimp);
285 (%o2)                           0
286 @end example
288 一般に、直交多項式の多項式形は
289 浮動小数点評価に関しては不適当です。
290 以下は例です。
292 @c ACTUALLY NEEDS load("orthopoly"); BEFORE ANYTHING ELSE
293 @c ===beg===
294 @c p : jacobi_p (100, 2, 3, x)$
295 @c subst (0.2, x, p);
296 @c jacobi_p (100, 2, 3, 0.2);
297 @c float(jacobi_p (100, 2, 3, 2/10));
298 @c ===end===
299 @example 
300 (%i1) p : jacobi_p (100, 2, 3, x)$
302 (%i2) subst (0.2, x, p);
303 (%o2)                3.4442767023833592E+35
304 (%i3) jacobi_p (100, 2, 3, 0.2);
305 (%o3)  interval(0.18413609135169, 6.8990300925815987E-12)
306 (%i4) float(jacobi_p (100, 2, 3, 2/10));
307 (%o4)                   0.18413609135169
308 @end example
310 真値は約0.184です;
311 この計算は
312 極端な減算消去誤差に苦しみます。
313 多項式を展開し評価すると、よりよい結果を与えます。
314 @c CONTINUING PREVIOUS EXAMPLE HERE
315 @c ===beg===
316 @c p : expand (p)$
317 @c subst (0.2, x, p);
318 @c ===end===
319 @example
320 (%i5) p : expand(p)$
321 (%i6) subst (0.2, x, p);
322 (%o6) 0.18413609766122982
323 @end example
325 これは一般的な規則ではありません;
326 多項式を展開することはいつも、
327 数値評価により適した式を生じるわけではありません。
328 数値評価する最もよい方法は
329 断然、1つ以上の関数引数を浮動小数点数にすることです。
330 それをすることで、
331 特別な浮動小数点アルゴリズムが評価に使われます。
333 Maximaの @code{float}関数は幾分でたらめです;
334 もし
335 @code{float}を記号次数や順序パラメータを持つ直交多項式を含む式に適用するなら、
336 これらのパラメータは
337 浮動小数点に変換されるかもしれません;
338 その後、式は完全には評価されません。
339 以下を考えてください。
341 @c ===beg===
342 @c assoc_legendre_p (n, 1, x);
343 @c float (%);
344 @c ev (%, n=2, x=0.9);
345 @c ===end===
346 @example
347 (%i1) assoc_legendre_p (n, 1, x);
348                                1
349 (%o1)                         P (x)
350                                n
351 (%i2) float (%);
352                               1.0
353 (%o2)                        P   (x)
354                               n
355 (%i3) ev (%, n=2, x=0.9);
356                              1.0
357 (%o3)                       P   (0.9)
358                              2
359 @end example
361 (%o3)の式は浮動小数点に評価されません;
362 @code{orthopoly}は
363 整数を要求するところで浮動小数点値を認識しません。
364 同様に、
365 数値評価
366 recognize floating point values where it requires an integer. Similarly, 
367 numerical evaluation of the 
368 @code{pochhammer_max_index}を越える位数の
369 @code{pochhammer}関数は迷惑かもしれません;
370 以下を考えてください。
372 @c ===beg===
373 @c x :  pochhammer (1, 10), pochhammer_max_index : 5;
374 @c ===end===
375 @example
376 (%i1) x :  pochhammer (1, 10), pochhammer_max_index : 5;
377 (%o1)                         (1)
378                                  10
379 @end example
381 @code{float}を適用することは
382 @var{x}を浮動小数点に評価しません。
384 @c CONTINUING PREVIOUS EXAMPLE HERE
385 @c ===beg===
386 @c float (x);
387 @c ===end===
388 @example
389 (%i2) float (x);
390 (%o2)                       (1.0)
391                                  10.0
392 @end example
394 @var{x}を浮動小数点に評価するには、
395 @code{pochhammer_max_index}を11以上にバインドして、
396 @code{float}を @var{x}に適用する必要があります。
398 @c CONTINUING PREVIOUS EXAMPLE HERE
399 @c ===beg===
400 @c float (x), pochhammer_max_index : 11;
401 @c ===end===
402 @example
403 (%i3) float (x), pochhammer_max_index : 11;
404 (%o3)                       3628800.0
405 @end example
407 @code{pochhammer_max_index}のデフォルト値は100です;
408 @code{orthopoly}をロードした後、値を変えてください。
410 最後に、参考書は直交多項式の定義を変えることを承知してください;
411 一般的にAbramowitz and Stegunの慣例を使っています。
413 orhtopolyのバグを疑う前に、
414 いくつかの特殊なケースをチェックして、
415 あなたの定義が@code{orthopoly}が使っているものと一致しているかを明らかにしてください。
417 定義はしばしば規格化について異なります;
418 時々、著者は
419 @math{(-1, 1)}以外の区間上で直交な族を作る関数の「シフト」版を使います。
420 例えば、
421 @math{(0, 1)}上で直交するLegendre多項式を定義するのに、
422 以下を定義します。
424 @c ===beg===
425 @c shifted_legendre_p (n, x) := legendre_p (n, 2*x - 1)$
426 @c shifted_legendre_p (2, rat (x));
427 @c legendre_p (2, rat (x));
428 @c ===end===
429 @example
430 (%i1) shifted_legendre_p (n, x) := legendre_p (n, 2*x - 1)$
432 (%i2) shifted_legendre_p (2, rat (x));
433                             2
434 (%o2)/R/                 6 x  - 6 x + 1
435 (%i3) legendre_p (2, rat (x));
436                                2
437                             3 x  - 1
438 (%o3)/R/                    --------
439                                2
440 @end example
442 @anchor{Floating point Evaluation}
443 @subsection Floating point Evaluation
445 @code{orthopoly}の関数のほとんどは
446 浮動小数点評価中の誤差を見積もるのに、
447 ランニング誤差解析を使います;
448 例外は球Bessel関数と第二種Legendreの陪多項式です。
449 数値評価のため、
450 球Bessel関数はSLATEC関数をコールします。
451 第二種Legendreの陪多項式の数値評価のために特別な方法は使われません。
453 ランニング誤差解析は
454 (丸め単位としても知られている)計算機イプシロンの二次か高次の
455 誤差を無視します。
456 2,3の他の誤差も無視します。
457 (ありそうにありませんが、)実際の誤差は推定を越える可能性があります。
459 区間は形式 @code{interval (@var{c}, @var{r})}を持ちます。
460 ここで、
461 @var{c}は区間の中心で、
462 @var{r}は半径です。
463 区間の中心は複素数であり得ますし、
464 半径はいつも正の実数です。
466 以下は例です。
468 @c ===beg===
469 @c fpprec : 50$
470 @c y0 : jacobi_p (100, 2, 3, 0.2);
471 @c y1 : bfloat (jacobi_p (100, 2, 3, 1/5));
472 @c ===end===
474 @example
475 (%i1) fpprec : 50$
477 (%i2) y0 : jacobi_p (100, 2, 3, 0.2);
478 (%o2) interval(0.1841360913516871, 6.8990300925815987E-12)
479 (%i3) y1 : bfloat (jacobi_p (100, 2, 3, 1/5));
480 (%o3) 1.8413609135168563091370224958913493690868904463668b-1
481 @end example
483 実際の誤差が誤差推定よりも小さいことをテストしましょう。
485 @c CONTINUING PREVIOUS EXAMPLE HERE
486 @c ===beg===
487 @c is (abs (part (y0, 1) - y1) < part (y0, 2));
488 @c ===end===
489 @example
490 (%i4) is (abs (part (y0, 1) - y1) < part (y0, 2));
491 (%o4)                         true
492 @end example
494 なるほど、この例では、
495 誤差推定は真の誤差の上限です。
497 Maximaは区間の算術をサポートしていません。
499 @c ===beg===
500 @c legendre_p (7, 0.1) + legendre_p (8, 0.1);
501 @c ===end===
502 @example
503 (%i1) legendre_p (7, 0.1) + legendre_p (8, 0.1);
504 (%o1) interval(0.18032072148437508, 3.1477135311021797E-15)
505         + interval(- 0.19949294375000004, 3.3769353084291579E-15)
506 @end example
508 ユーザーは区間算数を行う計算をする演算子を定義できます。
509 区間の足し算を定義するには、
510 以下を定義できます。
512 @c ===beg===
513 @c infix ("@+")$
514 @c "@+"(x,y) := interval (part (x, 1) + part (y, 1), part (x, 2) 
515 @c       + part (y, 2))$
516 @c legendre_p (7, 0.1) @+ legendre_p (8, 0.1);
517 @c ===end===
518 @example
519 (%i1) infix ("@@+")$
521 (%i2) "@@+"(x,y) := interval (part (x, 1) + part (y, 1), part (x, 2)
522       + part (y, 2))$
524 (%i3) legendre_p (7, 0.1) @@+ legendre_p (8, 0.1);
525 (%o3) interval(- 0.019172222265624955, 6.5246488395313372E-15)
526 @end example
528 引数が複素数の時、特殊な浮動小数点ルーチンがコールされます。
529 例えば、
531 @c ===beg===
532 @c legendre_p (10, 2 + 3.0*%i);
533 @c ===end===
534 @example
535 (%i1) legendre_p (10, 2 + 3.0*%i);
536 (%o1) interval(- 3.876378825E+7 %i - 6.0787748E+7, 
537                                            1.2089173052721777E-6)
538 @end example
540 これを真値と比較しましょう。
542 @c ===beg===
543 @c float (expand (legendre_p (10, 2 + 3*%i)));
544 @c ===end===
545 @example
546 (%i1) float (expand (legendre_p (10, 2 + 3*%i)));
547 (%o1)          - 3.876378825E+7 %i - 6.0787748E+7
548 @end example
550 更に、
551 引数が多倍長浮動小数点の時、
552 特殊な浮動小数点ルーチンがコールされます;
553 しかしながら、多倍長浮動小数点は
554 倍精度浮動小数点に変換され、最終結果は倍精度です。
556 @c ===beg===
557 @c ultraspherical (150, 0.5b0, 0.9b0);
558 @c ===end===
559 @example
560 (%i1) ultraspherical (150, 0.5b0, 0.9b0);
561 (%o1) interval(- 0.043009481257265, 3.3750051301228864E-14)
562 @end example
564 @subsection Graphics and @code{orthopoly}
566 直交多項式を含む式をプロットするには、
567 2つのことをしなければいけません:
568 @enumerate
569 @item 
570 オプション変数 @code{orthopoly_returns_intervals}を @code{false}に設定する。
571 @item
572 @code{orthopoly}関数のすべてのコールをクォートする。
573 @end enumerate
574 もし関数コールがクォートされていないなら、
575 Maximaはプロットする前にそれらを多項式に評価します;
576 結果として、
577 特殊な浮動小数点コードはコールされません。
578 以下は、Legendre多項式を含む式をどうやってプロットするかの例です。
580 @c ===beg===
581 @c plot2d ('(legendre_p (5, x)), [x, 0, 1]), 
582 @c                         orthopoly_returns_intervals : false;
583 @c ===end===
584 @example
585 (%i1) plot2d ('(legendre_p (5, x)), [x, 0, 1]),
586                         orthopoly_returns_intervals : false;
587 (%o1)
588 @end example
590 @ifnotinfo
591 @image{@value{figuresfolder}/orthopoly1,8cm}
592 @end ifnotinfo
594 式 @code{legendre_p (5, x)}@i{全体}をクォートします;
595 これは
596 @code{'legendre_p (5, @var{x})}を使って関数名をクォートするだけとは違います。
598 @opencatbox
599 @category{Plotting}
600 @closecatbox
603 @subsection Miscellaneous Functions
605 @code{orthopoly}パッケージは
606 Pochhammerシンボルと単位階段函数を定義します。
607 @code{orthopoly}は@code{gradef}文の中で
608 Kroneckerのデルタ函数と単位階段函数を使います。
610 Pochhammerシンボルをガンマ函数の商に変換するには、
611 @code{makegamma}を使ってください。
613 @c ===beg===
614 @c makegamma (pochhammer (x, n));
615 @c makegamma (pochhammer (1/2, 1/2));
616 @c ===end===
617 @example
618 (%i1) makegamma (pochhammer (x, n));
619                           gamma(x + n)
620 (%o1)                     ------------
621                             gamma(x)
622 (%i2) makegamma (pochhammer (1/2, 1/2));
623                                 1
624 (%o2)                       ---------
625                             sqrt(%pi)
626 @end example
628 Pochhammerシンボルの導函数は
629 @code{psi}函数を使って与えられます。
631 @c ===beg===
632 @c diff (pochhammer (x, n), x);
633 @c diff (pochhammer (x, n), n);
634 @c ===end===
635 @example
636 (%i1) diff (pochhammer (x, n), x);
637 (%o1)             (x)  (psi (x + n) - psi (x))
638                      n     0             0
639 (%i2) diff (pochhammer (x, n), n);
640 (%o2)                   (x)  psi (x + n)
641                            n    0
642 @end example
644 (%o1)の式に注意する必要があります;
645 @code{psi}函数の差分は
646 @code{@var{x} = -1, -2, .., -@var{n}}の時
647 多項式です。
648 これらの多項式は
649 @var{n}が正の整数の時、
650 導函数を@code{@var{n} - 1}次多項式にするように、
651 @code{pochhammer (@var{x}, @var{n})}の因子を相殺します。
653 Pochhammerシンボルは
654 ガンマ函数の商としての表現を通して
655 負の位数で定義されます。
656 以下を考えてください。
658 @c ===beg===
659 @c q : makegamma (pochhammer (x, n));
660 @c sublis ([x=11/3, n= -6], q);
661 @c ===end===
662 @example
663 (%i1) q : makegamma (pochhammer (x, n));
664                           gamma(x + n)
665 (%o1)                     ------------
666                             gamma(x)
667 (%i2) sublis ([x=11/3, n= -6], q);
668                                729
669 (%o2)                        - ----
670                                2240
671 @end example
673 代わりに、この結果を直接得ることができます。
675 @c ===beg===
676 @c pochhammer (11/3, -6);
677 @c ===end===
678 @example
679 (%i1) pochhammer (11/3, -6);
680                                729
681 (%o1)                        - ----
682                                2240
683 @end example
685 単位階段函数は左連続です;
686 従って、
688 @c ===beg===
689 @c [unit_step (-1/10), unit_step (0), unit_step (1/10)];
690 @c ===end===
691 @example
692 (%i1) [unit_step (-1/10), unit_step (0), unit_step (1/10)];
693 (%o1)                       [0, 0, 1]
694 @end example
696 もし零で左連続でも右連続でもない単位階段函数が必要なら、
697 @code{signum}を使って自分のものを定義してください;
698 例えば、
700 @c ===beg===
701 @c xunit_step (x) := (1 + signum (x))/2$
702 @c [xunit_step (-1/10), xunit_step (0), xunit_step (1/10)];
703 @c ===end===
704 @example
705 (%i1) xunit_step (x) := (1 + signum (x))/2$
707 (%i2) [xunit_step (-1/10), xunit_step (0), xunit_step (1/10)];
708                                 1
709 (%o2)                       [0, -, 1]
710                                 2
711 @end example
713 @code{unit_step}自身を再定義しないでください;
714 @code{orthopoly}の中のあるコードは
715 単位階段函数が左連続であることを要求します。
718 @subsection Algorithms
720 一般的に、
721 @code{orthopoly}は
722 直交多項式の超幾何表現を使うことで記号評価をします
723 超幾何函数は
724 (ドキュメント化されていない)関数 @code{hypergeo11}と @code{hypergeo21}を使って
725 評価されます。
726 例外は半整数Bessel函数と第二種Legendreの陪函数です。
727 半整数Bessel函数は明示的な表現を使って評価されます。
728 第二種Legendreの陪函数は再帰を使って評価されます。
730 浮動小数点評価のために、
731 函数のほとんどを超幾何形式に再び変換します;
732 順方向再帰を使って超幾何函数を評価します。
733 ここでも、
734 例外は半整数Bessel函数と第二種Legendreの陪函数です。
735 数値的に、
736 半整数Bessel函数はSLATECコードを使って評価されます。
739 @node Functions and Variables for orthogonal polynomials,  , Introduction to orthogonal polynomials, orthopoly
740 @section Functions and Variables for orthogonal polynomials
742 @deffn {関数} assoc_legendre_p (@var{n}, @var{m}, @var{x})
743 次数 @var{n}と位数 @var{m}の第一種Legendre陪函数。
745 参考文献: Abramowitz and Stegun, equations 22.5.37, page 779, 8.6.6
746 (second equation), page 334, and 8.2.5, page 333.
748 @opencatbox
749 @category{Package orthopoly}
750 @closecatbox
752 @end deffn
754 @deffn {関数} assoc_legendre_q (@var{n}, @var{m}, @var{x})
755 次数 @var{n}と位数 @var{m}の第二種Legendre陪函数。
757 参考文献: Abramowitz and Stegun, equation 8.5.3 and 8.1.8.
759 @opencatbox
760 @category{Package orthopoly}
761 @closecatbox
763 @end deffn
765 @deffn {関数} chebyshev_t (@var{n}, @var{x})
766 第一種Chebyshev函数。
768 参考文献: Abramowitz and Stegun, equation 22.5.47, page 779.
770 @opencatbox
771 @category{Package orthopoly}
772 @closecatbox
774 @end deffn
776 @deffn {関数} chebyshev_u (@var{n}, @var{x})
777 第二種Chebyshev函数。
779 参考文献: Abramowitz and Stegun, equation 22.5.48, page 779.
781 @opencatbox
782 @category{Package orthopoly}
783 @closecatbox
785 @end deffn
787 @deffn {関数} gen_laguerre (@var{n}, @var{a}, @var{x})
788 次数 @var{n}の一般化Laguerre多項式。
790 参考文献: Abramowitz and Stegun, equation 22.5.54, page 780.
792 @opencatbox
793 @category{Package orthopoly}
794 @closecatbox
796 @end deffn
798 @deffn {関数} hermite (@var{n}, @var{x})
799 Hermite多項式。
801 参考文献: Abramowitz and Stegun, equation 22.5.55, page 780.
803 @opencatbox
804 @category{Package orthopoly}
805 @closecatbox
807 @end deffn
809 @deffn {関数} intervalp (@var{e})
810 もし入力が区間なら @code{true}を、
811 そうでないなら @code{false}を返します。
813 @opencatbox
814 @category{Package orthopoly}
815 @category{Predicate functions}
816 @closecatbox
818 @end deffn
820 @deffn {関数} jacobi_p (@var{n}, @var{a}, @var{b}, @var{x})
821 Jacobiの多項式。
823 Jacobiの多項式は実際には
824 @var{a}と @var{b}すべてに対して定義されます;
825 しかし、Jacobi多項式の重み
826 @code{(1 - @var{x})^@var{a} (1 + @var{x})^@var{b}}は
827 @code{@var{a} <= -1}か @code{@var{b} <= -1}で可積分でありません。
829 参考文献: Abramowitz and Stegun, equation 22.5.42, page 779.
831 @opencatbox
832 @category{Package orthopoly}
833 @closecatbox
835 @end deffn
837 @deffn {関数} laguerre (@var{n}, @var{x})
838 Laguerre多項式。
840 参考文献: Abramowitz and Stegun, equations 22.5.16 and 22.5.54, page 780.
842 @opencatbox
843 @category{Package orthopoly}
844 @closecatbox
846 @end deffn
848 @deffn {関数} legendre_p (@var{n}, @var{x})
849 第一種Legendre多項式。
851 参考文献: Abramowitz and Stegun, equations 22.5.50 and 22.5.51, page 779.
853 @opencatbox
854 @category{Package orthopoly}
855 @closecatbox
857 @end deffn
859 @deffn {関数} legendre_q (@var{n}, @var{x})
860 第二種Legendre多項式。
862 参考文献: Abramowitz and Stegun, equations 8.5.3 and 8.1.8.
864 @opencatbox
865 @category{Package orthopoly}
866 @closecatbox
868 @end deffn
870 @deffn {関数} orthopoly_recur (@var{f}, @var{args})
871 引数 @var{args}を持つ直交函数族 @var{f}の漸化式を返します。
872 再帰は多項式次数に関してです。
874 @c ===beg===
875 @c orthopoly_recur (legendre_p, [n, x]);
876 @c ===end===
877 @example
878 (%i1) orthopoly_recur (legendre_p, [n, x]);
879                 (2 n - 1) P     (x) x + (1 - n) P     (x)
880                            n - 1                 n - 2
881 (%o1)   P (x) = -----------------------------------------
882          n                          n
883 @end example
885 @code{orthopoly_recur}の二番目の引数は
886 関数 @var{f}の正しい数の引数のリストでなければいけません;
887 もしそうでないなら、Maximaはエラーをシグナルします。
889 @c ===beg===
890 @c orthopoly_recur (jacobi_p, [n, x]);
891 @c ===end===
892 @example
893 (%i1) orthopoly_recur (jacobi_p, [n, x]);
895 Function jacobi_p needs 4 arguments, instead it received 2
896  -- an error.  Quitting.  To debug this try debugmode(true);
897 @end example
899 更に、
900 @var{f}が直交多項式族の1つの名前でないなら、
901 エラーがシグナルされます。
903 @c ===beg===
904 @c orthopoly_recur (foo, [n, x]);
905 @c ===end===
906 @example
907 (%i1) orthopoly_recur (foo, [n, x]);
909 A recursion relation for foo isn't known to Maxima
910  -- an error.  Quitting.  To debug this try debugmode(true);
911 @end example
913 @opencatbox
914 @category{Package orthopoly}
915 @closecatbox
917 @end deffn
919 @defvr {変数} orthopoly_returns_intervals
920 デフォルト値: @code{true}
922 @code{orthopoly_returns_intervals}が @code{true}の時、
923 浮動小数点の結果が形式 @code{interval (@var{c}, @var{r})}
924 で返されます。
925 ここで、 @var{c}は区間の中心で、
926 @var{r}は半径です。
927 中心は複素数であり得ます;
928 その場合、区間は複素平面上の円です。
930 @opencatbox
931 @category{Package orthopoly}
932 @closecatbox
934 @end defvr
936 @deffn {関数} orthopoly_weight (@var{f}, @var{args})
938 3つの要素のリストを返します;
939 一番目の要素は
940 リスト @var{args}が与える引数を持つ直交多項式族 @var{f}の重みの公式です;
941 二番目と三番目の要素は
942 直交性の区間の下限と上限を与えます。
943 例えば、
945 @c ===beg===
946 @c w : orthopoly_weight (hermite, [n, x]);
947 @c integrate (w[1] * hermite (3, x) * hermite (2, x), x, w[2], w[3]);
948 @c ===end===
949 @example
950 (%i1) w : orthopoly_weight (hermite, [n, x]);
951                             2
952                          - x
953 (%o1)                 [%e    , - inf, inf]
954 (%i2) integrate(w[1]*hermite(3, x)*hermite(2, x), x, w[2], w[3]);
955 (%o2)                           0
956 @end example
958 @var{f}の主変数はシンボルでなければいけません;
959 そうでないなら、Maximaはエラーをシグナルします。
961 @opencatbox
962 @category{Package orthopoly}
963 @closecatbox
965 @end deffn
967 @deffn {関数} pochhammer (@var{n}, @var{x})
968 Pochhammerシンボル。
969 @code{@var{n} <= pochhammer_max_index}の非負整数 @var{n}に対して、
970 式 @code{pochhammer (@var{x}, @var{n})}は
971 @code{@var{n} > 0}の時、
972 積 @code{@var{x} (@var{x} + 1) (@var{x} + 2) ... (@var{x} + n - 1)}
973 を評価します。
974 @code{@var{n} = 0}の時は1です。
975 負の @var{n}に対しては、
976 @code{pochhammer (@var{x}, @var{n})}は
977 @code{(-1)^@var{n} / pochhammer (1 - @var{x}, -@var{n})}として定義されます。
978 従って、
980 @c ===beg===
981 @c pochhammer (x, 3);
982 @c pochhammer (x, -3);
983 @c ===end===
984 @example
985 (%i1) pochhammer (x, 3);
986 (%o1)                   x (x + 1) (x + 2)
987 (%i2) pochhammer (x, -3);
988                                  1
989 (%o2)               - -----------------------
990                       (1 - x) (2 - x) (3 - x)
991 @end example
993 Pochhammerシンボルをガンマ函数の商に変換するには、
994 (Abramowitz and Stegun, equation 6.1.22を参照してください)
995 @code{makegamma}を使ってください;
996 例えば、
998 @c ===beg===
999 @c makegamma (pochhammer (x, n));
1000 @c ===end===
1001 @example
1002 (%i1) makegamma (pochhammer (x, n));
1003                           gamma(x + n)
1004 (%o1)                     ------------
1005                             gamma(x)
1006 @end example
1008 @var{n}が @code{pochhammer_max_index}を越えるか、
1009 @var{n}が記号の時、
1010 @code{pochhammer}は名詞形を返します。
1012 @c ===beg===
1013 @c pochhammer (x, n);
1014 @c ===end===
1015 @example
1016 (%i1) pochhammer (x, n);
1017 (%o1)                         (x)
1018                                  n
1019 @end example
1021 @opencatbox
1022 @category{Package orthopoly}
1023 @category{Gamma and factorial functions}
1024 @closecatbox
1026 @end deffn
1028 @defvr {変数} pochhammer_max_index
1029 デフォルト値: 100
1031 @code{pochhammer (@var{n}, @var{x})}は
1032 @code{@var{n} <= pochhammer_max_index}の時だけ
1033 積を展開します。
1035 例:
1037 @c ===beg===
1038 @c pochhammer (x, 3), pochhammer_max_index : 3;
1039 @c pochhammer (x, 4), pochhammer_max_index : 3;
1040 @c ===end===
1041 @example
1042 (%i1) pochhammer (x, 3), pochhammer_max_index : 3;
1043 (%o1)                   x (x + 1) (x + 2)
1044 (%i2) pochhammer (x, 4), pochhammer_max_index : 3;
1045 (%o2)                         (x)
1046                                  4
1047 @end example
1049 参考文献: Abramowitz and Stegun, equation 6.1.16, page 256.
1051 @opencatbox
1052 @category{Package orthopoly}
1053 @category{Gamma and factorial functions}
1054 @closecatbox
1056 @end defvr
1058 @deffn {関数} spherical_bessel_j (@var{n}, @var{x})
1059 第一種球Bessel函数。
1061 参考文献: Abramowitz and Stegun, equations 10.1.8, page 437 and 10.1.15, page 439.
1063 @opencatbox
1064 @category{Package orthopoly}
1065 @category{Bessel functions}
1066 @closecatbox
1068 @end deffn
1070 @deffn {関数} spherical_bessel_y (@var{n}, @var{x})
1071 第二種球Bessel函数。
1073 参考文献: Abramowitz and Stegun, equations 10.1.9, page 437 and 10.1.15, page 439.
1075 @opencatbox
1076 @category{Package orthopoly}
1077 @category{Bessel functions}
1078 @closecatbox
1080 @end deffn
1082 @deffn {関数} spherical_hankel1 (@var{n}, @var{x})
1083 第一種球Hankel函数。
1085 参考文献: Abramowitz and Stegun, equation 10.1.36, page 439.
1087 @opencatbox
1088 @category{Package orthopoly}
1089 @category{Bessel functions}
1090 @closecatbox
1092 @end deffn
1094 @deffn {関数} spherical_hankel2 (@var{n}, @var{x})
1095 第二種球Hankel函数。
1097 参考文献: Abramowitz and Stegun, equation 10.1.17, page 439.
1099 @opencatbox
1100 @category{Package orthopoly}
1101 @category{Bessel functions}
1102 @closecatbox
1104 @end deffn
1106 @deffn {関数} spherical_harmonic (@var{n}, @var{m}, @var{x}, @var{y})
1107 球調和函数。
1109 参考文献: Merzbacher 9.64.
1111 @opencatbox
1112 @category{Package orthopoly}
1113 @closecatbox
1115 @end deffn
1117 @deffn {関数} unit_step (@var{x})
1118 左連続の単位階段函数;なので
1119 @code{unit_step (@var{x})}は@code{@var{x} <= 0}で0であり、
1120 @code{@var{x} > 0}で1です。
1122 もし0で値1/2を取る単位階段函数が欲しいなら、
1123 @code{(1 + signum (@var{x}))/2}を使ってください。
1125 @opencatbox
1126 @category{Package orthopoly}
1127 @category{Mathematical functions}
1128 @closecatbox
1130 @end deffn
1132 @deffn {関数} ultraspherical (@var{n}, @var{a}, @var{x})
1133 (Gegenbauer多項式としても知られている)超球多項式。
1135 参考文献: Abramowitz and Stegun, equation 22.5.46, page 779.
1137 @opencatbox
1138 @category{Package orthopoly}
1139 @closecatbox
1141 @end deffn