Sólo con el ordenador no es suficiente

Introducción

En los tiempos que corren los programas informáticos de Matemáticas son fundamentales para el trabajo de cualquier persona relacionada con ellas: estudiante, profesor, investigador…Los paquetes informáticos de los que disponemos en la actualidad (Matlab y Mathematica por ejemplo) son realmente buenos y completos. Con ellos podemos realizar todo tipo de operaciones, ya sean numéricas, simbólicas, gráficas…El potencial de estos programas es inmenso.

Visto esto mucha gente puede llegar a pensar que de una forma u otra los conocimientos matemáticos pierden importancia frente a estos programas. ¿Para qué necesitamos realizar cálculos numéricos largos y engorrosos si el programa nos los hace en muy poco tiempo y sin rechistar? ¿Por qué realizar operaciones simbólicas complicadas si el programa las resuelve con gran facilidad? ¿Por qué dibujar gráficas que siempre quedarán imperfectas cuando el programa las representa a la perfección?

Los conocimientos matemáticos son fundamentales

Pues sí, por desgracia nos equivocamos. Los conocimientos matemáticos son fundamentales aun con la existencia de estos programas. ¿La razón? Muy sencilla: porque, como todos los programas, tienen fallos. Sí, los tienen. No son perfectos. Y algunos diréis: si te refieres a los fallos numéricos (los errores lógicos que se cometen al realizar aproximaciones) no sigas, esos fallos siempre estarán. Sí, cierto. Y en realidad generalmente para nuestros cálculos esos fallos tampoco son tan importantes ya que estos programas suelen realizar aproximaciones realmente buenas. El problema viene cuando los fallos que encontramos son de concepto: a veces el ordenador no es capaz de realizar ciertas operaciones que en la práctica son relativamente sencillas y te las devuelve sin hacer; otras directamente las hace mal. Y en ocasiones hasta nos muestra auténticas barbaridades totalmente inexplicables. Lo primero es malo, pero en cierto modo se puede vivir con ello. Las otras dos opciones no son asumibles se mire por donde se mire.

Y tampoco la cosa depende de la versión del programa. Generalmente en las versiones nuevas se arreglan errores que se cometían en las antiguas, como en cualquier programa informático: cosas que antes se hacían mal ahora se hacen bien y cosas que antes no se podían hacer ahora sí se pueden al añadir funciones nuevas. Lo que no tiene mucho sentido es que en versiones nuevas se cometan errores que no aparecían en las antiguas: cosas que antes no se podían hacer o que se hacían bien ahora se hacen mal.

¿Cómo pueden ayudar los usuarios?

¿Qué podrían hacer los usuarios de estos programas para ayudar? Pues la verdad es que bien poco. Los grandes paquetes informáticos de Matemáticas no son de código abierto y por tanto los usuarios no tienen acceso al código fuente. Puede que el programador haya cometido un fallo en alguna línea de código que ocasione alguno de los errores que se producen, pero por desgracia los usuarios nunca tendrán la posibilidad ni siquiera de intentar buscar ese error. Debemos confiar a ciegas en que el programa no tenga errores. En los ejemplos siguientes veremos que no podemos tener tanta confianza, que tenemos que estar alerta y que nuestro conocimientos sobre Matemáticas serán fundamentales para no comernos ninguna pifia del programa.

Ejemplos

Este estudio se ha realizado utilizando el paquete Mathematica, de Wolfram Research. Por tanto será este programa el que se lleve las críticas, aunque ésto no signifique ni mucho menos que sea el único que tiene estos fallos. Vamos a ver unos cuantos ejemplos de cómo Mathematica comete fallos en ciertos procedimientos:

1.- Cálculo de límites

Cualquier persona con nivel de Matemáticas de Bachillerato debe saber que para que exista el límite de una función de una variable en un punto deben existir los dos límites laterales y además deben ser iguales. Mathematica afirma que:

Límite mal calculado

Pero como todos sabemos esto es falso. Ese límite no existe ya que aunque los dos límites laterales existen son distintos: el límite por la izquierda vale -1 y el límite por la derecha vale 1. Lo extraño del caso es que con Mathematica podemos calcular los límites laterales por separado y éstos sí los hace bien. Conclusión: el programa nos da un resultado falso de nuestra operación.

2.- Gráficos ficticios

Mathematica realiza las gráficas dando un cierto número fijo de valores a la función que nosotros le indiquemos. Para funciones de una variable la cosa ha mejorado bastante con las nuevas versiones, pero los algoritmos utilizados para ellas son muy complicados de usar para funciones de dos variables, por lo que los desarrolladores del programa optaron por no usarlos. ¿Cuál es el problema? Pues muy sencillo: puede que por esa asignación de un número fijo de valores obtengamos gráficas que no correspondan con la realidad. Por ejemplo: si le damos una función f(x,y) cualquiera con una cierta oscilación y se da el caso de que esta función f coincide en todos los puntos usados por Mathematica con otra cierta función g(x,y) que no tenga oscilaciones obtendremos una gráfica que no corresponderá a la de la función f. Veamos un ejemplo:

Si escribimos la sentencia Plot3D[y^2+Sin[23*x],{x,0,2Pi},{y,-1,1}] Mathematica nos devuelve la siguiente gráfica:

Gráfica sin oscilaciones

¿No la veis rara? Pues lo es. El término Sin[23*x] debería producir oscilaciones en la gráfica, pero no las produce. Al parecer esto ocurre porque los puntos que utiliza Mathematica para representar la función están casualmente sobre una superficie con bastantes menos oscilaciones que la real. Este problema se soluciona pidiéndole a Mathematica que utilice un número distinto de puntos. Por ejemplo, con Plot3D[y^2+Sin[23*x],{x,0,2Pi},{y,-1,1},PlotPoints->50] obtenemos una gráfica más lógica:

Gráfica con oscilaciones

Por tanto, aunque no parece que sea demasiado coherente teniendo en cuenta la potencia de este programa, lo mejor es probar varios valores de PlotPoints en cada caso para asegurarnos de que la gráfica es correcta. Pero, ¿y si no lo sabíamos?

3.- Simplificar

Mathematica suele ser muy cuidadoso a la hora de simplificar. Para ello dispone de dos órdenes: Simplify y FullSimplify. La primera de ellas usa ciertos métodos y no tarda mucho tiempo; la segunda utiliza más métodos que la primera pero tarda más. Un ejemplo: cualquiera de nosotros hemos utilizado muchas veces la simplificación Arcsen(sen(x))=x. Pero ésto sólo es cierto cuando:

Rango de x

Y Mathematica lo hace bien, devuelve la expresión sin simplificar y para que lo haga debemos indicarle que x pertenece a ese intervalo. Pero en otras ocasiones pasan cosas poco comprensibles. Veamos un par de casos:

  • Cualquier persona familiarizada con las propiedades de los logaritmos puede ver de una forma muy sencilla que:

    Cociente de logaritmos

    Pero al escribir en Mathematica Simplify[Log[8]/Log[2]] el programa devuelve la expresión sin simplificar. Para obtener el resultado debemos utilizar la otra orden: FullSimplify[Log[8]/Log[2]]. Sí, al final el programa es capaz de simplificar, pero en una expresión tan sencilla sería esperable que Simplify lo hiciera.

  • Por desgracia FullSimplify no es infalible. Mathematica es capaz de calcular factoriales y también de simplificarlos. Por ejemplo, FullSimplify[(n+1)!/n!] devuelve n+1. Perfecto, lo hace de maravilla. Entonces no se entiende cómo no es capaz de resolver FullSimplify[12345678901!/12345678900!]. Es sencillo ver que esta expresión vale 12345678901, pero Mathematica no es capaz de resolverlo. Intenta calcular los factoriales y como ve que son números demasiado grandes no los hace, pero no es capaz de cambiar de opción y simplificar primero. Como se puede ver no parece lógico.

En el artículo original hay más ejemplo sobre simplificaciones erróneas.

4.- Tratamiento de casos

Viendo lo cuidadoso que es generalmente Mathematica al simplificar extraña que otras veces no tenga en cuenta ciertos casos. Por ejemplo, es relativamente sencillo calcular la siguiente integral:

Integral de producto de cosenos

Pero Mathematica, incomprensiblemente, no valora la posibilidad de que n y m puedan ser iguales ni que puedan ser cero. Las respuestas dadas varían según la versión del programa que usemos, pero en ninguna de ellas lo hace bien.

Otro más de este tipo: Mathematica dispone del comando Solve para resolver ecuaciones y sistemas. Pero si le pedimos que nos resuelva un sistema dependiente de un parámetro no tiene en cuenta los valores del parámetro que hacen que el sistema sea compatible indeterminado o incompatible. Ni siquiera con el comando LinearSolve, específico para resolver sistemas lineales, arreglamos el problema. Necesitamos el comando Reduce para ello. No parece coherente que los desarrolladores de Mathematica esperen que los usuarios conozcamos todos los comandos relacionados con cada operación, sobre todo cuando lo que le estamos pidiendo al programa es que resuelva un sistema muy sencillo.

5.- Una gran pifia

Las integrales no se salvan de los errores. Mathematica 5.0,utilizando el comando Integrate, afirma que:

Integral con el resultado mal

Eso es claramente imposible, ya que el integrando es siempre mayor o igual que cero y por tanto la integral no puede dar un resultado negativo. Esto se soluciona utilizando el comando NIntegrate, que nos da un valor numérico correcto:

Integral con el resultado bien

De todas formas sigue sin ser lógico, ya que lo mejor que podía hacer el programa es devolvernos la integral sin calcular antes que darnos un valor falso. En la versión 5.1 este error está corregido.

Otras complicaciones sobre integrales:

  • Hay casos en los que es capaz de calcular una integral indefinida, pero si le planteamos otra que se convertiría en la primera mediante un cambio de variable sencillo la devuelve sin calcular.
  • Hay casos en los que la primitiva obtenida por el programa es muchísimo más enrevesada que la que podría calcular cualquier persona con conocimientos de integrales a mano.
  • Y el error más gordo: hay casos en los que hasta llega a darnos como resultado una raíz cuadrada con un radicando negativo. Podríamos pensar que tomando la variable como compleja solucionaríamos el problema. En algunos casos es cierto, pero qué menos que el programa nos avisara de ello.

6.- Otros errores

Para terminar con los ejemplos vamos a enumerar unos cuantos más:

  • Teniendo varios comandos para calcular el mismo valor en ocasiones el programa da resultados distintos en función del comando utilizado.
  • A veces falla al aproximar una tabla de datos a través de ciertos conjuntos de funciones (interpolación polinómica).
  • Hay casos en los que coloca las raíces de ciertas ecuaciones muy lejos de los valores reales. ¿Usa mal los métodos numéricos? ¿Le faltan algunos?
  • Al calcular las raíces n-ésimas complejas de la unidad falla estrepitosamente para ciertos n conforme la versión del programa es más actual. Las versiones 3.0 y 4.1 lo suelen hacer bien, pero por ejemplo la versión 5.1 las coloca fuera de la circunferencia unidad (recordemos: las raíces n-ésimas complejas de la unidad tienen módulo 1, y por tanto deben estar sobre la circunferencia unidad).

Conclusión

Como hemos podido ver en los ejemplos anteriores los errores que pueden llegar a cometer estos programas son, en muchas ocasiones, de auténtico bulto. Además en la mayoría de los casos no recibimos ninguna señal sobre la posibilidad de que se esté cometiendo un error. Por tanto, como dijimos anteriormente, los conocimientos matemáticos del usuario que esté usando el programa en ese momento son esenciales para detectar esos errores y poder, si es posible, solventarlos. Los matemáticos podemos estar tranquilos, nuestro trabajo sigue siendo necesario.

Esta entrada se ha basado en el artículo ¿Podemos fiarnos de los cálculos efectuados con ordenador? escrito por Óscar Ciaurri y Juán Luis Varona y publicado en La Gaceta de la Real Sociedad Matemática Española correspondiente al cuatrimestre mayo-agosto de 2006.

Autor: ^DiAmOnD^

Miguel Ángel Morales Medina. Licenciado en Matemáticas y autor de Gaussianos y de El Aleph. Puedes seguirme en Twitter o indicar que te gusta mi página de Facebook.

21 Comentarios

  1. Esta claro que estos programas estan hechos para gente que YA sabe matemáticas. Aún asi estoy de acuerdo en que se pueden encontrar a menudo pifias. Matlab es más participativo que mathematica y esta bastante lleno de pifias teóricas.

    Publica una respuesta
  2. Buen buen artículo, pero creo que se debería de menscionar un cosa fundamental en este escrito, aunque sólo sea de pasada. Es un “error” (o más bien problema) que tienen (y tendrán) todo software, la complejidad algoritmica. Hay problemas que por muy buenos que sean lo programas / algoritmos no va ha ser posible resolverlos en un tiempo digamos “aceptable”. De hecho hay incluso problemas que directamente NO se pueden resolver, pero bueno.

    Siendo un problema tan genérico (y central en las matemáticas) pienso que debería de hacerse al menos una mención al principio del artículo.

    Publica una respuesta
  3. Excelente artículo, pero sólo reafirma lo que todos los usuarios de software sabemos (o deberíamos saber): hay que tener los suficientes conocimientos (teóricos y prácticos), como para poder evaluar los resultados que nos entrega un programa. Es sorprendente la gran cantidad de Empresas que tienen problema por “creer” ciegamente lo que les dice cualquier simple programa de control de inventarios, con mayor razón hemos de ser críticos con estos programas de Matemáticas tan potentes (ni hablar de los programas de Estadística).

    Publica una respuesta
  4. En cuanto a los problemas con las graficas pasan en todos los paquetes informaticos. Tiene que ver con el teorema de muestreo e interpolacion. En Matematica no es tan visible porque el solito elige el numero de puntos para dibujar la funcion pero en MATLAB tienes que saberlo ya eres tu el que elige los puntos a dibujar.

    Publica una respuesta
  5. El problema del código abierto se puede solucionar si utilizamos octave (http://www.gnu.org/software/octave/), no es tan potente como Matlab, pero con ayuda de todos sí que podría llegar a serlo. Respecto al resto del artículo, me ha gustado bastante. saludos.

    Publica una respuesta
  6. Muy buen artículo. ¿Cuantas veces no habré escuchado para que sirve aprende las matemáticas si un ordenador puede hacerlo por mí?
    Como tu bien comentas, el usuario del programa debe de ser capaz de interpretar la solución aportada por un programa.

    Publica una respuesta
  7. Existen muy buenos programas libres para el trabajo matemático, entre los que pueden destacar: Maxima, Octave, R y Gnuplot. Todos estos programas tienen su código fuente disponible y pueden ser modificados y mejorados por los usuarios. Con el uso de software libre se terminan las cajas negras en los programas para matemática.

    Publica una respuesta
  8. cojin puedes usar la interfaz grafica de maxima wxmaxima http://wxmaxima.sf.net y te vas a dar cuenta que el uso de maxima es mas sencillo de lo que crees, además la sintaxis de maxima es muy sencilla a la de Maple

    Publica una respuesta
  9. mmm no estoy totalmente de acuerdo con lo escrito… en primer lugar, creo que la matematica simplemente sirve si uno quiere darle utilidad. Yo personalmente la disfruto, y no le cuestiono si sirve o no, simplemente la uso cuando veo que puedo aplicarla, y cuando no, me entretengo resolviendo algun problema o razonando algo que tenga que ver con ella.
    Los programas están hechos para solucionar problemas mecánicos, que siguen un algoritmo definido. La matemática, al ser así de determinística, permite ser usada para modelar tales programas y asimismo, para modelarse a sí misma a través de ellos. Sin embargo, la informática presenta un problema, que más que nada implica una limitación física: en la matemática las cantidades suelen ser continuas e infinitas, cuando en computación la memoria es finita. Esto lleva a nunca poder operar con el valor exacto de Pi, no poder resolver ciertos problemas -aunq algunos ni con memoria infinita se podrían resolver :P- o aproximar el cálculo diferencial a través de deltas pequeños en ves de usar infinitésimos. Estos son típicos problemas del análisis numérico, estudiado en las carreras informáticas.
    Por otro lado, los “bugs” o errores de programación de los que hablás son algo tan mundano y típico en un programa como los errores de cálculos ocasionados al realizar la cuenta a mano por un ser humano. Esta es una limitación humana, no somos perfectos, y por lo tanto nos confundimos. Y, considerando que el SW es probado por científicos, grupos de testeo, y muchísimas personas antes de ser liberado, en comparación al cálculo manual de una sola persona que no tiene a todo un equipo para verificar sus calculos… creo que el programa sigue teniendo cierta ventaja.
    Por supuesto, tienen errores, pero la causa de esos errores es la misma que la que produce que las cuentas nos salgan mal.
    Además, convengamos que sin computadoras algunos cálculos se nos harían inconcebibles…

    cuánto tiempo podés tardar en decirme, sin usar computadora alguna -obviamente que tampoco calculadoras, que tb son computadoras-, cuánto vale…

    ln(√2*)-^√3 = ??

    … con una precisión de 15 decimales??

    No es por subestirmarlos, pero creo que mi PC les gana con creces, ya que en menos de un parpadeo me enteré que sería más o menos:

    -4.160930197904719

    Entrar en la discusión de si la importancia de saber matemática disminuye debido a la existencia de estas herramientas me parece totalmente absurdo, y al contrario, creo que permiten un mayor acceso y facilidad de aprendizaje a conocimientos que son difícilmente trasmitibles de otra manera (como por ejemplo, entender la forma de un paraboloide hiperbólico).

    Lo importante es entender que las herramientas no tienen la obligación -y qué bueno que sea así- de hacer todo el trabajo: el factor humano, el investigador, estudiante o quien lo necesite, siempre debe saber utilizarla y entender que no está ante una fuente de “la verdad”, sino ante una humilde creación de otros seres humanos.

    Por eso, nunca va a dejar de ser útil saber matemática y, aunque las herramientas lo permitieran…
    serían capaces de no interesarse nunca más por ella y dejar de disfrutar de aprender algo nuevo?

    Publica una respuesta
  10. Yo encuentro que esta muy bien lo que planteas, pero en todo quehacer profesional hay un conocimiento experto que te permite validar opiniones o resultados, es como cuando el físico debe descartar las raíces negativas de una ecuación, cuando esta resolviendo en función del tiempo. Así el matemático que usa herramientas de software también necesita hacer un análisis de sus resultados, muchas veces las computadoras se equivocan enormemente.

    Publica una respuesta
  11. De acuerdo, con el ordenador no alcanza.

    Pero por otro lado la matemática no es sólo manipilación de símbolos en papel, eso no alcanza. Es necesario el ordenador en la enseñanza de matemáticas. (Porque es necesario en la práctica de matemáticas de la vida real).

    Publica una respuesta
  12. cuando empecé a leer el post pensé ‘tengo que pasarle el link al artículo de Varona’, pero cuando vi el 23 en el seno, me di cuenta que ya lo conocías 🙂

    Publica una respuesta
  13. Que buen artículo, felicidades. Pienso que lo mejor es siempre usar software libre, ahí tienes estabilidad, ademas mira que Maxima tiene un tutoria con màs de 60 capítulos si no más recuerdo o algo de mil páginas. O tienes Octave. Antes era un fan de MatLab pero cuando encontré las alternativas libres, sumadas a python, déjenme decirles que MatLab no es buen programa. prque es código cerrado. Además todo lo que se ha hablado en el artículo es cierto también en muchas ramas de la ingeniería como en la Ingeniería Civil, muchos técnicos creen que el SAP2000, Etabs, etc lo hacen todo cuando ni siquiera se han dado cuenta del gran fondo matemático que encierra el analizar una estructura de concreto o acero. Saludos

    Publica una respuesta
  14. Yo tambien estoy de acuerdo con lo mencionado en el artículo. Pero…es como si estuvieras resolviendo un problema en papel. Cuando llegas al resultado final, lo analizas y compruebas si es coherente. Si no lo es,vuelves hacia atrás y buscas los fallos. Saber lo que estás haciendo es imprescindible, utilices un ordenador o no. A pesar de estos errores, hay que reconocer que siguen siendo enormemente útil.

    Por cierto , creo que la primera demostración matemática hecha con ayuda de un computador fuela que del teorema de los 4 colores hecha por Appel y Haken en 1976¿estoy en lo cierto?

    Publica una respuesta
  15. Pues yo lo que creo es que el artículo no refleja realmente lo difícil que es programar un Mathematica o un Maple.

    Es decir, enseñarle a integrar a un ordenador es dificilísimo! Así que es de esperar que los programas de integración disten mucho de ser perfectos. Por otra parte en el ejemplo del Plot3D “se hace trampa” todo el mundo sabe que al plotear una función la frecuencia de muestreo debería ser al menos el doble de la frecuencia intrinseca de la función a representar. Si bien Mathematica podía implementar esta función es responsabilidad del usuario ver el sin(23·x) y pedir al menos 47 puntos por unidad gráfica

    He estado programando para Casio y no os hacéis una idea de lo difícil que es preveer todos los casos y depurar los programas hasta conseguir que funcione al menos en los casos “normales”

    Publica una respuesta
  16. respecto a esta frase:LOS MATEMATICOS PODEMOS ESTAR TRANQUILOS,NUESTRO TRABAJO SIGUE SIENDO NECESARIO…pues estoy convencido que siempre los matematicos seran necesarios cualquier instrumento,maquina,etc que se cree solo podra hacer lo que ya esta hecho(en escencia)por los matematicos ,asi es y siempre tendremos que estar alerta (sobre todo los que amplian la matematica,y usan estas herramientas rapidas si eso es todo lo que significan para mi,pero porsupuesto que son muy importantes )ya que nada es perfecto ,y la matematica?

    Publica una respuesta
  17. A mí me dijeron que para integrar se utiliza un algoritmo que resuelve cualquier integral con primitiva conocida…

    De hecho me lo dijeron más o menos así: “eso que dicen en los primeros cursos de cálculo acerca que derivar es mecánico e integrar es un arte es falso, pues existe un algoritmo que es el que se programa en las computadoras para obtener las primitivas…”

    Voy a preguntar por el nombre del algoritmo, el cual me dijeron dijeron, pero olvidé.

    Publica una respuesta
  18. Muchas veces utilizan más bien aproximaciones, ya que cuando al primitiva no se puede obtener explicitamente, debiera ser más simple para un computador iterar haciendo un gran número de sumas para encontrar la integral.

    Publica una respuesta
  19. ¿Que los programas fallan? Anda ya… eso es que no has multiplicado 141.48 por 100 en Java (valores de tipo double) 😉

    Publica una respuesta
  20. Tengo poca experienia con Mathematica pero he observado algunas cosas:

    Los límites los calcula siempre por defecto por la derecha, de ahi que el límite expuesto arriba de como valor 1

    Los símbolos los maneja como números. Por ejemplo si le pides la inversa de una matriz cuadrada cuyos elementos sean símbolos y cuyo determinante sea nulo, te la calcula.

    Calcula mal primitivas. Por ejemplo si le pides calcular la primitiva de la función uno partido por a al cuadrado por seno dex al cuadrado, más b al cuadrado por coseno de x al cuadrado; esta función es continua en R luego tiene primitiva en R, pero Mathematica y los libros con el método que te aconsejan no te dan primitiva en R. Ahora bien con la primitiva obtenida con Mathmatica o con el método que aconsejan los libros se pueden construir las primitivas en R, pero lo debes hacer tú.

    Publica una respuesta

Trackbacks/Pingbacks

  1. meneame.net - Sólo con el ordenador no es suficiente... [c&p] En los tiempos que corren los programas informáticos de Matemáticas son…
  2. Fresqui.com - Sólo con el ordenador no es suficiente... En los tiempos que corren los programas informáticos de Matemáticas son fundamentales…

Puedes utilizar código LaTeX para insertar fórmulas en los comentarios. Sólo tienes que escribir
[latex]código-latex-que-quieras-insertar[/latex]
o
$latex código-latex-que-quieras-insertar$.

Si tienes alguna duda sobre cómo escribir algún símbolo puede ayudarte la Wikipedia.

Y si los símbolos < y > te dan problemas al escribir en LaTeX te recomiendo que uses los códigos html & lt; y & gt; (sin los espacios) respectivamente.

Envía un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *