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