[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23. Métodos numéricos


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.1 Introducción a los métodos numéricos


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.2 Series de Fourier

El paquete fft contiene funciones para el cálculo numérico (no simbólico) de la transformada rápida de Fourier. La instrucción load ("fft") carga el paquete. Véase fft.

El paquete fourie contiene funciones para el cálculo simbólico de series de Fourier. La instrucción load ("fourie") carga el paquete. Hay funciones en el paquete fourie para calcular los coeficientes de Fourier y para la transformación de expresiones. Véase Funciones y variables para las series de Fourier.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.3 Funciones y variables para los métodos numéricos

Función: polartorect (magnitude_array, phase_array)

Transforma valores complejos de la forma r %e^(%i t) a la forma a + b %i. La instrucción load ("fft") carga esta función en Maxima. Véase también fft.

El módulo y la fase, r y t, se toman de magnitude_array y phase_array, respectivamente. Los valores originales de los arreglos de entrada se reemplazan por las partes real e imaginaria, a y b. Los resultados se calculan como

a: r cos (t)
b: r sin (t)

Los arreglos de entrada deben ser de igual tamaño y de dimensión 1. El tamaño del arreglo no necesita ser potencia de 2.

La función polartorect es la inversa de recttopolar.

Función: recttopolar (real_array, imaginary_array)

Transforma valores complejos de la forma a + b %i a la forma r %e^(%i t). La instrucción load ("fft") carga esta función en Maxima. Véase también fft.

Las partes real e imaginaria, a y b, se toman de real_array y imaginary_array, respectivamente. Los valores originales de los arreglos de entrada se reemplazan por el módulo y el argumento, r y t. Los resultados se calculan como

r: sqrt (a^2 + b^2)
t: atan2 (b, a)

El ángulo calculado está en el rango entre -%pi y %pi.

Los arreglos de entrada deben ser de igual tamaño y de dimensión 1. El tamaño del arreglo no necesita ser potencia de 2.

La función recttopolar es la inversa de polartorect.

Función: ift (real_array, imaginary_array)

Tranformada discreta inversa de Fourier. La instrucción load ("fft") carga esta función en Maxima.

La función ift calcula la transformada rápida inversa compleja de Fourier de arreglos unidimensionales de números decimales en coma flotante. La transformada inversa se define como

x[j]: sum (y[j] exp (+2 %i %pi j k / n), k, 0, n-1)

Véase fft para más detalles.

Función: fft (real_array, imaginary_array)
Función: ift (real_array, imaginary_array)
Función: recttopolar (real_array, imaginary_array)
Función: polartorect (magnitude_array, phase_array)

Transformada rápida de Fourier y funciones asociadas. La instrucción load ("fft") carga estas funciones en Maxima.

Las funciones fft y ift calculan la transformada rápida compleja de Fourier y su inversa de arreglos unidimensionales de números decimales en coma flotante. El tamaño de imaginary_array debe ser igual al de real_array.

Los resultados devueltos por las funciones fft y ift sustituyen al contenido original de los arreglos de entrada. La función fillarray puede hacer una copia de un array en caso de ser necesario.

La transformada discreta de Fourier y la transformada inversa se definen como sigue. Sea x el arreglo con los datos originales, con

x[i]: real_array[i] + %i imaginary_array[i]

Sea y el arreglo con los datos transformados. Las transformadas directa e inversa son

y[k]: (1/n) sum (x[j] exp (-2 %i %pi j k / n), j, 0, n-1)

x[j]:       sum (y[j] exp (+2 %i %pi j k / n), k, 0, n-1)

Arreglos apropiados se pueden preparar con la función array. Por ejemplo:

array (my_array, float, n-1)$

declara un arreglo unidimensional con n elementos, indexado de 0 a n-1, ambos inclusive. El número de elementos, n, debe ser par.

La función fft se puede aplicar a datos reales (con partes imaginarias nulas) para obtener coeficientes seno y coseno. Después de llamar a la función fft, los coeficientes del seno y coseno, llamémosles a y b, se pueden calcular como

a[0]: real_array[0]
b[0]: 0

y

a[j]: real_array[j] + real_array[n-j]
b[j]: imaginary_array[j] - imaginary_array[n-j]

para j tomando valores de 1 a n/2-1, y

a[n/2]: real_array[n/2]
b[n/2]: 0

La función recttopolar transforma valores complejos de la forma a + b %i a la forma r %e^(%i t). Véase recttopolar.

La función polartorect transforma valores complejos de la forma r %e^(%i t) a la forma a + b %i. Véase polartorect.

La instrucción demo ("fft") presenta una demostarción del paquete fft.

Variable opcional: fortindent

Valor por defecto: 0

La variable fortindent controla el margen izquierdo de las expresiones que escribe la instrucción fortran. El valor 0 escribe con un margen normal de 6 espacios; valores positivos harán que las expresiones se escriban más a la derecha.

Función: fortran (expr)

Escribe expr en código Fortran. La salida se escribe con márgenes, y si ésta es demasiado larga fortran sigue escribiendo en líneas sucesivas. La función fortran escribe el operador de exponenciación ^ como **, e imprime un número complejo a + b %i como (a,b).

El argumento expr puede ser una ecuación. En tal caso, fortran escribe una sentencia de asignación, dándole el valor del miembro derecho de la expresión al miembro izquierdo. En particular, si el miembro derecho de expr es el nombre de una matriz, entonces fortran escribe una sentencia de asignación para cada elemento de la matriz.

Si expr no es reconozida por fortran, la expresión se escribe en formato grind sin avisos. La función fortran no reconoce listas, arreglos ni funciones.

La variable fortindent controla el margen izquierdo de las expresiones que escribe la instrucción fortran. El valor 0 escribe con un margen normal de 6 espacios; valores positivos harán que las expresiones se escriban más a la derecha.

Si fortspaces vale true, fortran rellena las líneas con espacios de 80 columnas.

La función fortran evalúa sus argumentos; un argumento precedido de apóstrofo previene de la evaluación. La función fortran siempre devuelve done.

Ejemplos:

(%i1) expr: (a + b)^12$
(%i2) fortran (expr);
      (b+a)**12                                                                 
(%o2)                         done
(%i3) fortran ('x=expr);
      x = (b+a)**12                                                             
(%o3)                         done
(%i4) fortran ('x=expand (expr));
      x = b**12+12*a*b**11+66*a**2*b**10+220*a**3*b**9+495*a**4*b**8+792        
     1   *a**5*b**7+924*a**6*b**6+792*a**7*b**5+495*a**8*b**4+220*a**9*b        
     2   **3+66*a**10*b**2+12*a**11*b+a**12                                     
(%o4)                         done
(%i5) fortran ('x=7+5*%i);
      x = (7,5)                                                                 
(%o5)                         done
(%i6) fortran ('x=[1,2,3,4]);
      x = [1,2,3,4]                                                             
(%o6)                         done
(%i7) f(x) := x^2$
(%i8) fortran (f);
      f                                                                         
(%o8)                         done
Variable opcional: fortspaces

Valor por defecto: false

Si fortspaces vale true, fortran rellena las líneas con espacios de 80 columnas.

Función: horner (expr, x)
Función: horner (expr)

Cambia el formato de expr según la regla de Horner utilizando x como variable principal, si ésta se especifica. El argumento x se puede omitir, en cuyo caso se considerará como variable principal la de expr en su formato racional canónico (CRE).

La función horner puede mejorar las estabilidad si expr va a ser numéricamente evaluada. También es útil si Maxima se utiliza para generar programas que serán ejecutados en Fortran. Véase también stringout.

(%i1) expr: 1e-155*x^2 - 5.5*x + 5.2e155;
                           2
(%o1)            1.0E-155 x  - 5.5 x + 5.2E+155
(%i2) expr2: horner (%, x), keepfloat: true;
(%o2)            (1.0E-155 x - 5.5) x + 5.2E+155
(%i3) ev (expr, x=1e155);
Maxima encountered a Lisp error:

 floating point overflow

Automatically continuing.
To reenable the Lisp debugger set *debugger-hook* to nil.
(%i4) ev (expr2, x=1e155);
(%o4)                       7.0E+154
Función: find_root (expr, x, a, b)
Función: find_root (f, a, b)
Variable opcional: find_root_error
Variable opcional: find_root_abs
Variable opcional: find_root_rel

Calcula una raíz de la expresión expr o de la función f en el intervalo cerrado [a, b]. La expresión expr puede ser una ecuación, en cuyo caso find_root busca una raíz de lhs(expr) - rhs(expr).

Dado que Maxima puede evaluar expr o f en [a, b], entonces, si expr o f es continua, find_root encuentrará la raíz buscada; o raíces en caso de existir varias.

La función find_root aplica al principio la búsqueda binaria. Si la expresión es lo suficientemente suave, entonces find_root aplicará el método de interpolación lineal.

La precisión del resultado se controla con find_root_abs y find_root_rel. La búsqueda se detiene cuando la función alcanza valores menores o iguales a find_root_abs, o cuando dos soluciones sucesivas x_0 y x_1 se diferencian en una cantidad menor o igual a find_root_rel * max(abs(x_0), abs(x_1)). Los valores por defecto de find_root_abs y find_root_rel son ambos cero.

find_root espera que la función en cuestión tenga signos diferentes en los extremos del intervalo. Si esto no se verifica, el comportamiento de find_root se controla con find_root_error. Cuando find_root_error vale true, find_root devuelve un mensaje de error; en caso contrario, find_root devuelve el valor de find_root_error. El valor por defecto de find_root_error es true.

Si en algún momento del proceso de búsqueda f alcanza un valor no numérico, find_root devuelve una expresión parcialmente evaluada.

Se ignora el orden de a y b; la región de búsqueda es [min(a, b), max(a, b)].

Ejemplos:

(%i1) f(x) := sin(x) - x/2;
                                        x
(%o1)                  f(x) := sin(x) - -
                                        2
(%i2) find_root (sin(x) - x/2, x, 0.1, %pi);
(%o2)                   1.895494267033981
(%i3) find_root (sin(x) = x/2, x, 0.1, %pi);
(%o3)                   1.895494267033981
(%i4) find_root (f(x), x, 0.1, %pi);
(%o4)                   1.895494267033981
(%i5) find_root (f, 0.1, %pi);
(%o5)                   1.895494267033981
(%i6) find_root (exp(x) = y, x, 0, 100);
                            x
(%o6)           find_root(%e  = y, x, 0.0, 100.0)
(%i7) find_root (exp(x) = y, x, 0, 100), y = 10;
(%o7)                   2.302585092994046
(%i8) log (10.0);
(%o8)                   2.302585092994046
Función: newton (expr, x, x_0, eps)

Devuelve una solución aproximada de expr = 0 obtenida por el método de Newton, considerando expr como una función de una variable, x. La búsqueda comienza con x = x_0 y continúa hasta que se verifique abs(expr) < eps, donde expr se evalúa con el valor actual de x.

La función newton permite que en expr haya variables no definidas, siempre y cuando la condición de terminación abs(expr) < eps pueda reducirse a un valor lógico true o false; de este modo, no es necesario que expr tome un valor numérico.

Ejecútese load(newton1) para cargar esta función.

Véanse también realroots, allroots, find_root y mnewton.

Ejemplos:

(%i1) load (newton1);
(%o1) /usr/share/maxima/5.10.0cvs/share/numeric/newton1.mac
(%i2) newton (cos (u), u, 1, 1/100);
(%o2)                   1.570675277161251
(%i3) ev (cos (u), u = %);
(%o3)                 1.2104963335033528E-4
(%i4) assume (a > 0);
(%o4)                        [a > 0]
(%i5) newton (x^2 - a^2, x, a/2, a^2/100);
(%o5)                  1.00030487804878 a
(%i6) ev (x^2 - a^2, x = %);
                                           2
(%o6)                6.098490481853958E-4 a

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

23.4 Funciones y variables para las series de Fourier

Función: equalp (x, y)

Devuelve true si equal (x, y), en otro caso devuelve false. No devuelve el mensaje de error que se obtiene de equal (x, y) en un caso como éste.

Función: remfun (f, expr)
Función: remfun (f, expr, x)

La llamada remfun (f, expr) reemplaza todas las subexpresiones f (arg) por arg en expr.

La llamada remfun (f, expr, x) reemplaza todas las subexpresiones f (arg) por arg en expr sólo si arg contiene a la variable x.

Función: funp (f, expr)
Función: funp (f, expr, x)

La llamada funp (f, expr) devuelve true si expr contiene la función f.

La llamada funp (f, expr, x) devuelve true si expr contiene la función f y la variable x está presente en el argumento de alguna de las presencias de f.

Función: absint (f, x, halfplane)
Función: absint (f, x)
Función: absint (f, x, a, b)

La llamada absint (f, x, halfplane) devuelve la integral indefinida de f con respecto a x en el semiplano dado (pos, neg o both). La función f puede contener expresiones de la forma abs (x), abs (sin (x)), abs (a) * exp (-abs (b) * abs (x)).

La llamada absint (f, x) equivale a absint (f, x, pos).

La llamada absint (f, x, a, b) devuelve la integral definida de f con respecto a x de a a b.

Función: fourier (f, x, p)

Devuelve una lista con los coeficientes de Fourier de f(x) definida en el intervalo [-p, p].

Función: foursimp (l)

Simplifica sin (n %pi) a 0 si sinnpiflag vale true y cos (n %pi) a (-1)^n si cosnpiflag vale true.

Variable opcional: sinnpiflag

Valor por defecto: true

Véase foursimp.

Variable opcional: cosnpiflag

Valor por defecto: true

Véase foursimp.

Función: fourexpand (l, x, p, limit)

Calcula y devuelve la serie de Fourier a partir de la lista de los coeficientes de Fourier l hasta el término limit (limit puede ser inf). Los argumentos x y p tienen el mismo significado que en fourier.

Función: fourcos (f, x, p)

Devuelve los coeficientes de los cosenos de Fourier de f(x) definida en [0, p].

Función: foursin (f, x, p)

Devuelve los coeficientes de los senos de Fourier de f(x) definida en [0, p].

Función: totalfourier (f, x, p)

Devuelve fourexpand (foursimp (fourier (f, x, p)), x, p, 'inf).

Función: fourint (f, x)

Calcula y devuelve la lista de los coeficientes integrales de Fourier de f(x) definida en [minf, inf].

Función: fourintcos (f, x)

Devuelve los coeficientes integrales de los cosenos f(x) en [0, inf].

Función: fourintsin (f, x)

Devuelve los coeficientes integrales de los senos f(x) en [0, inf].


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Robert Dodier on diciembre, 22 2007 using texi2html 1.76.