Resolviendo sistemas grandes de ecuaciones lineales con la

Anuncio
Resolviendo sistemas grandes de ecuaciones lineales
con la calculadora gráfica casio fx-cg20*
Pablo Guerrero Garcı́a
e-mail: pablito@ctima.uma.es
Departamento de Matemática Aplicada, Universidad de Málaga
Complejo Tecnológico, ETSI Telecomunicación
Campus de Teatinos s/n, 29010 Málaga (España)
31 de marzo de 2012
Resumen
En este artı́culo se trata de ilustrar cómo podemos resolver sistemas grandes de ecuaciones lineales con
la calculadora gráfica casio fx-cg20 (CG20). Se utiliza para ello el mismo ejemplo que se usó en [5, 6]
para poner de manifiesto un fallo en la programación de la forma escalonada reducida por filas (en inglés,
reduced row echelon form (rref)) para la calculadora CAS casio ClassPad 330 (CP330), y se muestra la
gran mejora que en el comportamiento numérico de la rref se ha producido en la CG20 con respecto al de
la CP330, junto con otras caracterı́sticas de la CG20 necesarias para poder reproducir esta experiencia.
Palabras clave: álgebra lineal; sistema de ecuaciones lineales; método directo; forma escalonada reducida
por filas; calculadora; casio fx-cg20; técnicas para el aula.
Códigos MSC 2000: primario 97U70; secundarios 97D40, 65C20.
1.
Introducción
Es bien sabido [1, §6.3] que, a la hora de resolver un sistema de ecuaciones lineales Ay = c con A ∈ Rn×n
regular y c ∈ Rn , no es numéricamente una buena forma de proceder primero calcular A−1 para luego
premultiplicar c. Ası́ pues, se suele recurrir a técnicas directas como la eliminación gaussiana para obtener
la solución del sistema. En una de sus variantes se calcula la forma escalonada reducida por filas (en inglés,
reduced row echelon form (rref)) de la matriz ampliada para después obtener la solución en la columna más
a la derecha sin necesidad de sustitución alguna. Dicha forma de proceder es un método numéricamente
estable (con respecto al crecimiento de los errores de redondeo) si la matriz A de coeficientes del sistema es
de cierto tipo; e.g. lo es (cf. [1, §6.6]) para los que A es estrictamente diagonal dominante y para los que A
es simétrica definida positiva.
En este artı́culo analizamos el comportamiento numérico de la implementación de rref en la calculadora
gráfica casio fx-cg20 (CG20) con un sistema de ecuaciones lineales que ya ponı́a en aprietos a la de rref
en la calculadora CAS casio ClassPad 330 (CP330). Aunque algún lector pueda ya estar al corriente
de dicho fallo, para aquéllos que no lo estén y para describirlo de manera sencilla se trata de resolver el
sistema de ecuaciones lineales (sin dificultades numéricas subyacentes, i.e., bien condicionado y con matriz
de coeficientes simétrica definida positiva y estrictamente diagonal dominante) en el que


 2 + 9h2 , si i = j

−1,
si |i − j| = 1 ó (i = 1 y j = n) ó (i = n y j = 1)
aij =
, ci = 12h2 sin(ti ), ∀i, j ∈ 1: n,


0,
en otro caso
*
Inf. Técnico MA-12/02 (http://www.matap.uma.es/investigacion/tr.html), Dept. Matemática Aplicada, Univ. Málaga,
31 de marzo de 2012. Este trabajo ha sido aceptado para su publicación online en un monográfico que Aula Casio
(http://www.aulacasio.com) dedicará a la calculadora gráfica casio fx-cg20.
Página 1 de 5
Pablo Guerrero Garcı́a
Sistemas grandes de ecuaciones lineales con la CG20
Página 2 de 5
donde n ∈ N+ es un valor prefijado, h = 2π/n y ti = ih. El lector interesado puede consultar en [5, 6]
el problema diferencial del que surge dicho sistema de ecuaciones lineales, ası́ como el resto de detalles
numéricos sobre el comportamiento de rref en la CP330.
Además de poner de manifiesto la gran mejora que en el comportamiento numérico de la rref se ha
producido en la CG20 con respecto al de la CP330, aprovecharemos para ilustrar el manejo integrado de
listas, matrices, gráficas y programación en la CG20, ası́ como el reseteado de la memoria principal, la
exportación/importación de programas como ficheros de texto y la comprobación de la versión del OS
utilizada. Para ello, se va a detallar paso a paso el manejo de la CG20 para ejecutar dicho ejemplo, y a modo
de apéndice se proporcionan treinta y seis capturas de pantalla para facilitar al lector el procedimiento a
seguir para que pueda reproducir la experiencia aquı́ descrita, en la que se trata de responder a la pregunta
natural sobre cuál es el máximo valor de n que la CG20 puede soportar.
2.
Procedimiento
Desde el Main Menu accedemos primero al modo
G:System, luego pulsando F5:Reset, F2:Main Memory y
F1:Yes reseteamos la memoria principal para que los posibles valores almacenados previamente no hagan disminuir la
capacidad de almacenamiento disponible para esta experiencia. Ahora volvemos al Main Menu y accedemos al modo
B:Program (donde no habrá ahora ningún programa) y pulsando F3:New podremos teclear el nombre (e.g., TOMASNXN) a
asignarle al programa que vamos a teclear y que mostramos
en la columna de la derecha.
Tras unos comentarios iniciales, el programa procede a
borrar los textos, gráficos, listas y matrices existentes (para
no interferir de una ejecución a otra), pide el valor de n al
usuario y calcula h. A continuación inicializa la matriz A y
mediante el comando Seq calcula los valores ci , que quedan
almacenados en una lista para después con List->Mat convertirlos a una matriz con una sola columna. El doble bucle
For anidado inicializa los aij para después hacer lo propio
con los elementos de las esquinas inferior izquierda y superior derecha de A. Ahora sólo falta construir dos listas, la
primera de las cuales con los ti y la segunda con los yi que
se obtienen tras usar Rref de Augment y quedarse con la
columna de más a la derecha usando Mat->List. Ambas listas se combinan usando List->Mat en una sola matriz de
dos columnas para visualizar el resultado del cómputo, pero
ambas interesa que queden disponibles para poder representar gráficamente el resultado (una vez acabado el cómputo y
pulsado Exe, y aprovechando la gestión integrada que de los
elementos de datos hace la CG20) accediendo a través del
Main Menu al modo 2:Statistics y pulsando F1:Graph,
F6:Set, F2:xyline en Graph Type, Exit y F1:Graph.
Por último, para comprobar qué versión del OS estamos ejecutando, volvemos al Main Menu y accedemos nuevamente al modo G:System para pulsar F4:Version.
’ProgramMode:RUN
’THOMASNXN RREF BUG
’PABLITO@CTIMA.UMA.ES
’13//12//2011 MANAGER+
’FX-CG10//20 V1.02.02
’N_<=_44 OK, BUT
’N_>=_45 MEMORY ERROR
’------------------ClrText
ClrGraph
ClrList
ClrMat
"N"?->N
2pi/N->H
{N,N}->Dim Mat A
Seq(12H^<2>sin (IH),I,1,N,1)->List 1
List->Mat(List 1)->Mat C
For 1->I To N
For 1->J To N
If I=J
Then 2+9H^<2>->Mat A[I,J]
Else
If Abs (I-J)=1
Then -1->Mat A[I,J]
IfEnd
IfEnd
Next
Next
-1->Mat A[N,1]
-1->Mat A[1,N]
Seq(IH,I,1,N,1)->List 1
Rref Augment(Mat A,Mat C)
Mat->List(Mat Ans,N+1)->List 2
List->Mat(List 1,List 2)Disps
Antes de proceder a ejecutar el programa es conveniente pulsar F6 y luego F3:Save-as para obtener el
fichero TOMASNXN.txt. Dicho fichero sigue los convenios indicados en [2, §8.8] y puede servir para incorporarlo
a otra CG20 fı́sica conectándola via USB a un PC como si de un pendrive se tratara, es decir, accedemos a
la carpeta @MainMem/Program de la unidad asignada a la CG20 y copiamos (o salvamos) allı́ (o desde allı́)
el fichero en cuestión, tal y como se describe en [2, §13.1]. De esta manera, el lector puede experimentar con
el programa facilitado sin ni siquiera tener que teclearlo.
Pablo Guerrero Garcı́a
Sistemas grandes de ecuaciones lineales con la CG20
Página 3 de 5
Figura 1: Tiempo de ejecución en segundos en función de n para la CG20 fı́sica
Si lo que vamos a manejar es el emulador fx-CG10/20 Manager PLUS [3] de la CG20, la carga del
programa en el mismo también es tarea sencilla. Desde el Main Menu se accede al modo F:Memory y se
pulsa F3, F1, se busca el fichero TXT en el PC y F1. Después volvemos al Main Menu para acceder al modo
B:Program y se pulsa F6, F4, F1 y Exit, con lo que ya podremos ejecutar el programa con F1.
3.
Resultados
Para cada valor de n ≥ 10 hemos ido cronometrando el tiempo en segundos que tardaba la CG20 fı́sica
en mostrarnos la solución, pero cuando hemos probado el valor n = 45 se obtiene el mensaje “Memory
ERROR” a los 33 segundos, posicionándose el cursor tras el comando Rref al pulsar Exit (si el error se
obtiene para n = 44 basta volverlo a ejecutar tras entrar y salir al y del modo 2:Statistics). Los tiempos
de cómputo obtenidos se muestran en la variable runtimesec de la siguiente receta Matlab v6.1:
dimensions = 10:44;
runtimesec = [ 3.94 5.12 6.75 8.59 10.84 13.62 16.97 20.85 25.34 30.53 ...
36.62 43.68 51.78 60.75 71.06 82.56 95.40 109.84 125.75 143.31 ...
162.87 184.41 207.59 233.28 261.43 291.91 325.07 360.84 399.53 441.66 ...
486.47 534.78 587.19 642.01 702.28];
format compact; format long; phi = polyfit(dimensions,runtimesec,3); phi
format rat; phi = [0.01868 -0.6757 10.78 -57.56], format long;
phi, 1-(std(runtimesec-polyval(phi,dimensions),1)/std(runtimesec,1))^2
plot(dimensions,runtimesec,’o’); hold on; grid
plot(dimensions,polyval(phi,dimensions),’r-’); xlabel(’dimension (n)’);
ylabel(’tiempo ejecucion (segs) CG20 fisica’); hold off;
Con dicha receta Matlab v6.1 (que denominaremos TomasnxnCG20runtimes) se pretende ajustar de forma
mı́nimo-cuadrática un polinomio de grado 3 a dichos tiempos de cómputo (cf. Fig. 1), con objeto de tener
una estimación de cuántos segundos puede tardar la CG20 fı́sica para un cierto valor de n. Dicho polinomio
ha resultado ser, con prácticamente 1 como coeficiente de determinación R2 del ajuste no lineal y con cuatro
dı́gitos significativos redondeados correctos a la hora de facilitar sus coeficientes,
ϕ(n) ≈
467 3
748 2 539
1439
n −
n +
n−
= 0.01868n3 − 0.6757n2 + 10.78n − 57.56,
25000
1107
50
25
como queda de manifiesto en la siguiente salida obtenida:
Pablo Guerrero Garcı́a
Sistemas grandes de ecuaciones lineales con la CG20
>> TomasnxnCG20runtimes
phi =
0.01867688632201 -0.67568837611990
phi =
467/25000
-748/1107
539/50
phi =
0.01868000000000 -0.67570000000000
ans =
0.99996661271554
Página 4 de 5
10.77678629491007 -57.55549196122871
-1439/25
10.78000000000000 -57.56000000000000
Una vez que hemos actualizado la CG20 fı́sica para el OS v1.03.02 (siguiendo las instrucciones facilitadas
en [4] pero además teniendo en cuenta que con la calculadora apagada debe conectarse primero el terminal
USB al PC y luego el terminal USB a la CG20 fı́sica pues si no se procede ası́ se obtiene un fallo durante el
procedimiento de actualización), hemos repetido la experiencia y hemos obtenido prácticamente los mismos
tiempos de cómputo.
Merece la pena resaltar que el emulador fx-CG10/20 Manager PLUS [3] de la CG20, tanto en su v1.00
para el OS v1.02.02 como en su v1.01 para el OS v1.03.02, funciona exactamente igual que la calculadora fı́sica
(obviamente con tiempos de cómputo mucho menores) en el sentido de que también finaliza correctamente
el cálculo para n ≤ 44. Esto no ocurrı́a en la CP330, pues su emulador tanto para la v3.04.5 (May 2010)
como para la v3.05 (Dec 2010) como para la actual v3.06.1 (Nov 2011) del OS seguı́a dando “Overflow”
como mensaje de error para n ≥ 8 a pesar de que la CP330 fı́sica daba “Insufficient Memory” como mensaje
de error para n ≥ 27 (e incoherencias numéricas para 20 ≤ n ≤ 26) con la v3.04.5 y para n ≥ 34 tanto para
la v3.05 como para la actual v3.06.1 del OS.
Por último, dejaremos como ejercicio para el lector interesado determinar cuál es el máximo valor de
n que la CG20 fı́sica con OS v1.04.02 (que casio acaba de proporcionar a mediados de este mes) puede
soportar, y comprobar si su correspondiente emulador (que casio aún no ha proporcionado pero que se
espera no tarde mucho en hacerlo) sigue funcionando exactamente igual que la calculadora fı́sica.
Agradecimientos
Este trabajo ha sido parcialmente financiado dentro del marco del Proyecto de Investigación de Excelencia
de la Junta de Andalucı́a (España) cuya referencia es P10-TIC-06083.
Referencias
[1] Richard L. Burden and J. Douglas Faires. Numerical Analysis, 8th edition. International Thomson
Publishing, Belmont (CA, USA), 2005.
[2] CASIO. fx-CG10/20 Software User’s Guide. Casio, Aug 2010 (v1.02.02), Oct 2011 (v1.03.02) and Mar
2012 (v1.04.02).
[3] CASIO. fx-CG10/20 Manager PLUS User’s Guide. Casio, Sep 2010 (v1.00) and Nov 2011 (v1.01).
[4] CASIO. OS Update Application User’s Guide for fx-CG Series. Casio, Oct 2011 (v1.03.02) and Mar
2012 (v1.04.02).
[5] Pablo Guerrero-Garcı́a. A bug in my hand-held CAS calculator (and a bag of solvers). Proceedings of the APLIMAT 2011 Conference (ISBN 9788089313518), pp. 1339–1349, Feb 2011,
http://archiv.aplimat.com/2011/Proceedings/New trends in education/Guerrero-Garcia.pdf
[6] Pablo Guerrero-Garcı́a. A bug in my hand-held CAS calculator (and a bag of solvers). Aplimat-Journal
of Applied Mathematics (ISSN 1337-6365, Bratislava (Eslovaquia)), Vol. 4, No. 1, pp. 357–367, Dec 2011,
http://www.journal.aplimat.com/volume 4 2011/Journal volume 4/Number 1/Guerrero-Garcia.pdf
Apéndice
En la siguiente página se proporcionan treinta y seis capturas de pantalla para facilitar al lector el
procedimiento a seguir para que pueda reproducir la experiencia aquı́ descrita.
Pablo Guerrero García
Sistemas grandes de ecuaciones lineales con la CG20
Página 5 de 5
Descargar