Merge branch 'master' into bug-4403-remove-polyfill
[maxima.git] / doc / info / ja / romberg.texi
blobe0bb1d9389fea824ddb728e1bed0338b70f59340
1 @menu
2 * Functions and Variables for romberg::
3 @end menu
5 @node Functions and Variables for romberg, , Top, Top
6 @section Functions and Variables for romberg
8 @deffn {関数} romberg (@var{expr}, @var{x}, @var{a}, @var{b})
9 @deffnx {関数} romberg (@var{F}, @var{a}, @var{b})
11 Romberg法による数値積分を計算します。
13 @code{romberg(@var{expr}, @var{x}, @var{a}, @var{b})}は
14 積分@code{integrate(@var{expr}, @var{x}, @var{a}, @var{b})}の概算を返します。
16 @var{expr}は、
17 @var{x}が浮動小数点値にバインドされた時
18 浮動小数点値に評価される
19 式でなければいけません。
21 @code{romberg(@var{F}, @var{a}, @var{b})}は
22 積分@code{integrate(@var{F}(x), x, @var{a}, @var{b})}の概算を返します。
23 ここで、@code{x}は@var{F}の名付けられない唯一の引数を表します;
24 実際の引数は@code{x}と名付けられません。
25 @var{F}は、
26 引数が浮動小数点値の時、浮動小数点値を返す
27 MaximaかLispの関数でなければいけません。
28 @var{F}は翻訳またはコンパイルされたMaxima関数を指定することができます。
30 @code{romberg}の精度は
31 グローバル変数@code{rombergabs}と@code{rombergtol}によって決定されます。
32 @code{romberg}は
33 連続する近似の間の絶対差が@code{rombergabs}よりも小さい時か、
34 連続する近似に関する相対差が@code{rombergtol}よりも小さい時、
35 成功のうちに終了します。
36 従って、
37 @code{rombergabs}が0.0 (デフォルト)の時、
38 相対誤差テストだけが@code{romberg}に効果を持ちます。
40 @code{romberg}は
41 あきらめる前に、せいぜい@code{rombergit}回、ステップサイズを半分にします;
42 それゆえ、関数評価の最大回数は@code{2^rombergit}です。
43 もし
44 @code{rombergabs}や@code{rombergtol}によって確立される誤差基準が満たされないなら、
45 @code{romberg}はエラーメッセージを印字します。
46 @code{romberg}はいつも、少なくとも@code{rombergmin}回の繰り返しを行います;
47 これは、被積分関数が振動的な時、見せかけの終了を防ぐつもりの発見的方法です。
49 @code{romberg}は、
50 積分変数を特定の値にバインド(する前ではなく)した後、
51 被積分関数を繰り返し評価します。
52 この評価ポリシーは、多次元積分を計算するための
53 @code{romberg}の入れ子のコールを可能にします。
54 しかしながら、誤差計算は
55 入れ子の積分の誤差を考慮しないので、エラーは過小評価されるかもしれません。
56 また、多次元問題のために特別に工夫された方法はより少ない関数評価で同じ精度をもたらす可能性があります。
58 @code{load("romberg")}はこの関数をロードします。
60 @code{QUADPACK}、数値積分関数のコレクションも参照してください。
62 例:
64 1次元積分。
65 @c ===beg===
66 @c load ("romberg");
67 @c f(x) := 1/((x - 1)^2 + 1/100) + 1/((x - 2)^2 + 1/1000) 
68 @c               + 1/((x - 3)^2 + 1/200);
69 @c rombergtol : 1e-6;
70 @c rombergit : 15;
71 @c estimate : romberg (f(x), x, -5, 5);
72 @c exact : integrate (f(x), x, -5, 5);
73 @c abs (estimate - exact) / exact, numer;
74 @c ===end===
76 @example
77 (%i1) load ("romberg");
78 (%o1)    /usr/share/maxima/5.11.0/share/numeric/romberg.lisp
79 (%i2) f(x) := 1/((x - 1)^2 + 1/100) + 1/((x - 2)^2 + 1/1000)
80               + 1/((x - 3)^2 + 1/200);
81                     1                 1                1
82 (%o2) f(x) := -------------- + --------------- + --------------
83                      2    1           2    1            2    1
84               (x - 1)  + ---   (x - 2)  + ----   (x - 3)  + ---
85                          100              1000              200
86 (%i3) rombergtol : 1e-6;
87 (%o3)                 9.9999999999999995E-7
88 (%i4) rombergit : 15;
89 (%o4)                          15
90 (%i5) estimate : romberg (f(x), x, -5, 5);
91 (%o5)                   173.6730736617464
92 (%i6) exact : integrate (f(x), x, -5, 5);
93 (%o6) 10 sqrt(10) atan(70 sqrt(10))
94  + 10 sqrt(10) atan(30 sqrt(10)) + 10 sqrt(2) atan(80 sqrt(2))
95  + 10 sqrt(2) atan(20 sqrt(2)) + 10 atan(60) + 10 atan(40)
96 (%i7) abs (estimate - exact) / exact, numer;
97 (%o7)                7.5527060865060088E-11
98 @end example
100 @code{romberg}の入れ子のコールで実装された
101 2次元積分。
102 @c ===beg===
103 @c load ("romberg");
104 @c g(x, y) := x*y / (x + y);
105 @c rombergtol : 1e-6;
106 @c estimate : romberg (romberg (g(x, y), y, 0, x/2), x, 1, 3);
107 @c assume (x > 0);
108 @c integrate (integrate (g(x, y), y, 0, x/2), x, 1, 3);
109 @c exact : radcan (%);
110 @c abs (estimate - exact) / exact, numer;
111 @c ===end===
113 @example
114 (%i1) load ("romberg");
115 (%o1)    /usr/share/maxima/5.11.0/share/numeric/romberg.lisp
116 (%i2) g(x, y) := x*y / (x + y);
117                                     x y
118 (%o2)                   g(x, y) := -----
119                                    x + y
120 (%i3) rombergtol : 1e-6;
121 (%o3)                 9.9999999999999995E-7
122 (%i4) estimate : romberg (romberg (g(x, y), y, 0, x/2), x, 1, 3);
123 (%o4)                   0.81930239628356
124 (%i5) assume (x > 0);
125 (%o5)                        [x > 0]
126 (%i6) integrate (integrate (g(x, y), y, 0, x/2), x, 1, 3);
127                                           3
128                                     2 log(-) - 1
129                     9                     2        9
130 (%o6)       - 9 log(-) + 9 log(3) + ------------ + -
131                     2                    6         2
132 (%i7) exact : radcan (%);
133                     26 log(3) - 26 log(2) - 13
134 (%o7)             - --------------------------
135                                 3
136 (%i8) abs (estimate - exact) / exact, numer;
137 (%o8)                1.3711979871851024E-10
138 @end example
140 @opencatbox
141 @category{Package romberg}
142 @category{Numerical methods}
143 @closecatbox
145 @end deffn
147 @defvr {オプション変数} rombergabs
148 デフォルト値: 0.0
150 @code{romberg}の精度は、
151 グローバル変数@code{rombergabs}と@code{rombergtol}で決定されます。
152 @code{romberg}は
153 連続する近似の間の絶対差が@code{rombergabs}よりも小さい時か、
154 連続する近似に関する相対差が@code{rombergtol}よりも小さい時、
155 成功のうちに終了します。
156 従って、
157 @code{rombergabs}が0.0 (デフォルト)の時、
158 相対誤差テストだけが@code{romberg}に効果を持ちます。
160 @code{rombergit}と@code{rombergmin}も参照してください。
162 @opencatbox
163 @category{Package romberg}
164 @closecatbox
166 @end defvr
168 @defvr {オプション変数} rombergit
169 デフォルト値: 11
171 @code{romberg}は
172 あきらめる前に、せいぜい@code{rombergit}回、ステップサイズを半分にします;
173 それゆえ、関数評価の最大回数は@code{2^rombergit}です。
174 @code{romberg}はいつも、少なくとも@code{rombergmin}回の繰り返しを行います;
175 これは、被積分関数が振動的な時、見せかけの終了を防ぐつもりの発見的方法です。
177 @code{rombergabs}と@code{rombergtol}も参照してください。
179 @opencatbox
180 @category{Package romberg}
181 @closecatbox
183 @end defvr
185 @defvr {オプション変数} rombergmin
186 デフォルト値: 0
188 @code{romberg}はいつも、少なくとも@code{rombergmin}回の繰り返しを行います;
189 これは、被積分関数が振動的な時、見せかけの終了を防ぐつもりの発見的方法です。
191 @code{rombergit}, @code{rombergabs}, @code{rombergtol}も参照してください。
193 @opencatbox
194 @category{Package romberg}
195 @closecatbox
197 @end defvr
199 @defvr {オプション変数} rombergtol
200 デフォルト値: 1e-4
202 @code{romberg}の精度は
203 グローバル変数@code{rombergabs}と@code{rombergtol}によって決定されます。
204 @code{romberg}は
205 連続する近似の間の絶対差が@code{rombergabs}よりも小さい時か、
206 連続する近似に関する相対差が@code{rombergtol}よりも小さい時、
207 成功のうちに終了します。
208 従って、
209 @code{rombergabs}が0.0 (デフォルト)の時、
210 相対誤差テストだけが@code{romberg}に効果を持ちます。
212 @code{rombergit}と@code{rombergmin}も参照してください。
214 @opencatbox
215 @category{Package romberg}
216 @closecatbox
218 @end defvr