1 @c English version: 2008-03-28
3 * Funciones y variables para romberg::
6 @node Funciones y variables para romberg, , Top, Top
7 @section Funciones y variables para romberg
9 @deffn {Función} romberg (@var{expr}, @var{x}, @var{a}, @var{b})
10 @deffnx {Función} romberg (@var{F}, @var{a}, @var{b})
12 Integra numéricamente por el método de Romberg.
14 La llamada @code{romberg(@var{expr}, @var{x}, @var{a}, @var{b})}
15 devuelve una estimación de la integral @code{integrate(@var{expr}, @var{x}, @var{a}, @var{b})}.
16 El argumento @var{expr} debe ser una expresión reducible a un valor decimal
17 en coma flotante cuando @var{x} es a su vez un número decimal.
19 La llamada @code{romberg(@var{F}, @var{a}, @var{b})} devuelve una estimación
20 de la integral @code{integrate(@var{F}(x), x, @var{a}, @var{b})}, siendo
21 @code{x} el único argumento de @var{F}. El argumento @var{F} debe ser
22 una función en Lisp o en Maxima que devuelva un valor decimal
23 en coma flotante cuando @var{x} es a su vez un número decimal; @var{F}
24 puede ser el nombre de una función de Maxima traducida o compilada.
26 La exactitud de @code{romberg} se controla con las variables globales
27 @code{rombergabs} y @code{rombergtol}. La función @code{romberg}
28 termina con éxito su cálculo cuando la diferencia absoluta entre
29 sucesivas aproximaciones es menor que @code{rombergabs},
30 o cuando la diferencia relativa de sucesivas aproximaciones es menor que
31 @code{rombergtol}. Así, cuando @code{rombergabs} vale 0.0
32 (su valor por defecto) sólo tiene efecto el test del error relativo basado
35 La función @code{romberg} reduce a mitades sucesivas la amplitud del paso un máximo de
36 @code{rombergit} veces antes de abandonar el cómputo; el número máximo de
37 evaluaciones del integrando es, por consiguiente, igual a @code{2^rombergit}.
38 De no satisfacerse el criterio de error establecido por @code{rombergabs} y
39 @code{rombergtol}, @code{romberg} devuelve un mensaje de error.
40 La función @code{romberg} hace siempre al menos @code{rombergmin}
41 iteraciones; se trata de una heurística para evitar
42 la finalización prematura cuando el integrando oscila mucho.
44 La función @code{romberg} evalúa el integrando repetidamente tras asignarle
45 a la variable de integración un valor específico. Este criterio
46 permite anidar llamadas a @code{romberg} para calcular integrales múltiples.
47 Sin embargo, los errores de cálculo no tienen en cuenta los errores de
48 las integraciones anidadas, por lo que tales errores pueden subestimarse.
49 Por otro lado, métodos especialmente desarrollados para integraciones
50 múltiples pueden dar la misma exactitud con menos evaluaciones
53 Para hacer uso de esta función ejecútese primero @code{load("romberg")}.
55 Véase también @code{QUADPACK}, un conjunto de funciones para
60 Una integración unidimensional.
63 @c f(x) := 1/((x - 1)^2 + 1/100) + 1/((x - 2)^2 + 1/1000)
64 @c + 1/((x - 3)^2 + 1/200);
67 @c estimate : romberg (f(x), x, -5, 5);
68 @c exact : integrate (f(x), x, -5, 5);
69 @c abs (estimate - exact) / exact, numer;
73 (%i1) load ("romberg");
74 (%o1) /usr/share/maxima/5.11.0/share/numeric/romberg.lisp
75 (%i2) f(x) := 1/((x - 1)^2 + 1/100) + 1/((x - 2)^2 + 1/1000)
76 + 1/((x - 3)^2 + 1/200);
78 (%o2) f(x) := -------------- + --------------- + --------------
80 (x - 1) + --- (x - 2) + ---- (x - 3) + ---
82 (%i3) rombergtol : 1e-6;
83 (%o3) 9.9999999999999995E-7
86 (%i5) estimate : romberg (f(x), x, -5, 5);
87 (%o5) 173.6730736617464
88 (%i6) exact : integrate (f(x), x, -5, 5);
89 (%o6) 10 sqrt(10) atan(70 sqrt(10))
90 + 10 sqrt(10) atan(30 sqrt(10)) + 10 sqrt(2) atan(80 sqrt(2))
91 + 10 sqrt(2) atan(20 sqrt(2)) + 10 atan(60) + 10 atan(40)
92 (%i7) abs (estimate - exact) / exact, numer;
93 (%o7) 7.5527060865060088E-11
96 Una integración bidimensional, implementada mediante llamadas anidadas a @code{romberg}.
99 @c g(x, y) := x*y / (x + y);
100 @c rombergtol : 1e-6;
101 @c estimate : romberg (romberg (g(x, y), y, 0, x/2), x, 1, 3);
103 @c integrate (integrate (g(x, y), y, 0, x/2), x, 1, 3);
104 @c exact : radcan (%);
105 @c abs (estimate - exact) / exact, numer;
109 (%i1) load ("romberg");
110 (%o1) /usr/share/maxima/5.11.0/share/numeric/romberg.lisp
111 (%i2) g(x, y) := x*y / (x + y);
113 (%o2) g(x, y) := -----
115 (%i3) rombergtol : 1e-6;
116 (%o3) 9.9999999999999995E-7
117 (%i4) estimate : romberg (romberg (g(x, y), y, 0, x/2), x, 1, 3);
118 (%o4) 0.81930239628356
119 (%i5) assume (x > 0);
121 (%i6) integrate (integrate (g(x, y), y, 0, x/2), x, 1, 3);
125 (%o6) - 9 log(-) + 9 log(3) + ------------ + -
127 (%i7) exact : radcan (%);
128 26 log(3) - 26 log(2) - 13
129 (%o7) - --------------------------
131 (%i8) abs (estimate - exact) / exact, numer;
132 (%o8) 1.3711979871851024E-10
137 @defvr {Variable opcional} rombergabs
138 Valor por defecto: 0.0
140 La exactitud de @code{romberg} se controla con las variables globales
141 @code{rombergabs} y @code{rombergtol}. La función @code{romberg}
142 termina con éxito su cálculo cuando la diferencia absoluta entre
143 sucesivas aproximaciones es menor que @code{rombergabs},
144 o cuando la diferencia relativa de sucesivas aproximaciones es menor que
145 @code{rombergtol}. Así, cuando @code{rombergabs} vale 0.0
146 (su valor por defecto) sólo tiene efecto el test del error relativo basado
149 Véanse también @code{rombergit} y @code{rombergmin}.
153 @defvr {Variable opcional} rombergit
154 Valor por defecto: 11
156 La función @code{romberg} reduce a mitades sucesivas la amplitud del paso un máximo de
157 @code{rombergit} veces antes de abandonar el cómputo; el número máximo de
158 evaluaciones del integrando es, por consiguiente, igual a @code{2^rombergit}.
159 La función @code{romberg} hace siempre al menos @code{rombergmin}
160 iteraciones; se trata de una heurística para evitar
161 la finalización prematura cuando el integrando oscila mucho.
164 Véanse también @code{rombergabs} y @code{rombergtol}.
168 @defvr {Variable opcional} rombergmin
171 La función @code{romberg} hace siempre al menos @code{rombergmin}
172 iteraciones; se trata de una heurística para evitar
173 la finalización prematura cuando el integrando oscila mucho.
175 Véanse también @code{rombergit}, @code{rombergabs} y @code{rombergtol}.
179 @defvr {Variable opcional} rombergtol
180 Valor por defecto: 1e-4
182 La exactitud de @code{romberg} se controla con las variables globales
183 @code{rombergabs} y @code{rombergtol}. La función @code{romberg}
184 termina con éxito su cálculo cuando la diferencia absoluta entre
185 sucesivas aproximaciones es menor que @code{rombergabs},
186 o cuando la diferencia relativa de sucesivas aproximaciones es menor que
187 @code{rombergtol}. Así, cuando @code{rombergabs} vale 0.0
188 (su valor por defecto) sólo tiene efecto el test del error relativo basado
191 Véanse también @code{rombergit} y @code{rombergmin}.