Práctica I: Introducción a Wolfram Mathematica Generalidades Wolfram Mathematica es un sistema computacional técnico cuyo kernel opera interpretando el lenguaje Wolfram y la interfaz gráfica funciona como Notebook Documents. Los Notebook Documents son trabajados en divisiones conocidas como celdas que ejecutan comandos de programación literaria. Cada Corchete resaltado en gris y ubicado a la izquierda representa una celda del nb (notebook). Y podemos ver que incluso tenemos Celdas que contienen a otras, esto se debe a jerarquías, que veremos mas adelante. Cada celda nueva que se crea de forma automática será una celda de Lenguaje Wolfram, fácilmente identificable porque cada letra o palabra sin valor asignado será resaltada en color azul. Las celdas pueden ser de varias formas, entrada de texto, de comando. Incluso las entradas de texto vienen separadas para mayor facilidad (Título, Subtítulo, etc.) 1 En una celda a operar bajo Wolfram, lo que se coloca es: comandos, operaciones, o asignaciones de variables. 2 Mientras la variable que se introduce, no tenga valor asignado, estará resaltada en azul, de lo contrario lo que se ingreso, o tiene un valor, o es una palabra reservada del lenguaje. 3 Una vez tenemos una instrucción colocada en la celda, hacemos que dicha instrucción sea efectuada por el sistema utilizando las teclas Shift + Enter. Una vez hemos puesto a “correr” una celda, podemos observar a la izquierda de la celda, el prefijo In de cuando se introdujo al sistema una instrucción, y un Out con lo que la instrucción retorna. Algo a tener en cuenta, Wolfram diferencia entre minúsculas y mayúsculas, por lo tanto, se tiene que especificar bien cuando se asigne o llame a una variable o comando. Los comandos en wólfram, requieren que se les introduzcan sus respectivos parámetros, por lo tanto en su sintaxis, luego de llamar al comando a usar, lo común es que los parámetros se coloquen dentro de corchetes “[ ]”. Por defecto, Wolfram opera en Radianes. Las letras griegas también pueden ser usadas como variables, no tienen comportamiento “especial” solo por ser un carácter diferente En Wolfram se pueden introducir letras griegas de diversas formas, pero así como se menciono antes, no solo tenemos palabras como reservadas para el lenguaje, también hay letras reservadas. Valor Numérico y Simplificación Podemos también reducir o simplificar diferentes expresiones ya sea que el sistema nos retorno como alguna evaluación o cálculo, o una expresión que nosotros tenemos externamente y deseamos reducir. Podemos Simplificar el ultimo valor obtenido, simplificar una expresión o incluso el resultado que se obtendrá de alguna operación usando el comando FullSimplify. Por defecto, Wolfram siempre busca dar una solución analítica a todo cálculo que se le pida efectuar, pero si deseamos obtener el resultado numerico de cualquier operación tenemos dos formas para hacerlo: Encontrando el valor de la ultima salida del software o usando el comando en la operación a realizar. Operaciones Básicas Las operaciones pueden realizarse directamente con el teclado o haciendo uso de las paletas del programa. Suma Resta Multiplicación División La multiplicación también puede expresarse con solo un espacio. Sin embargo este puede crear confusión a veces. Una misma operación puede realizarse de varias maneras equivalentes. Potencias Raíces Teclado Paletas Comando Todo comando que utilice tendrá la siguiente estructura básica: El nombre del comando • Siempre iniciará con mayúscula. • Siempre será color negro. El argumento • Siempre estará contenido entre corchetes. • Su formato específico dependerá del comando. Herramientas 1 Entre herramientas que la interfaz de Wolfram pone a nuestra disposición, quizás de las mas útiles cuando se viene empezando e incluso teniendo experiencia, vienen a ser las Paletas de Ayudante. Contamos con 3 tipos de “Ayudantes”: Ayudante de Clase, Ayudante de Escritura y Ayudante de Matematica Básica. Probablemente, el de mayor utilidad para nosotros en estos momentos, es el Ayudante de Escritura. 2 A continuación tenemos el Ayudante de Escritura, esta paleta cuenta con 3 diferentes menús: 1. Escribir y Formatear 2. Composición Tipográfica 3. Ayuda y Opciones En cuanto al primer menú, tenemos opciones para cuando las celdas que estamos manipulando son celdas de texto. 2.1 2.2 2.3 2.4 2.1 Podemos modificar la celda actual en la que estamos o tirar una nueva, como una celda con características definidas por defecto, como ser cierto tamaño y color de fuente para separar títulos y subtítulos. 2.2 En celdas de Sección, no solo implica un tamaño y color de fuente, también se coloca una separación visible en el caso de Sección, y una sangría en el caso de subsecciones. Esto para mantener definidas las jerarquías, por lo que es posible ocultar todo el texto en una sección y solo mostrar su encabezado (en casos de notebooks largos). 2.3 Las celdas de texto, principalmente ayudan para definir donde colora texto plano en el notebook, o si desea agregar viñetas. Pero también, le permite crear celdas dentro o fuera de jerarquías. 2.4 Las celdas matemáticas traen configuraciones para escribir con mejor estética texto matemático, como alinear ecuaciones para separar pasos en demostraciones. (Ojo, sigue siendo texto, no comandos). Ejemplo de Notebook Celdas de Titulo, Sección y Jerarquías En este caso, tenemos el mismo notebook que en la izquierda, excepto que podemos tanto ocultar como mostrar lo que se encierra en cada sección. Ademas, también podemos extender una sección y ocultar las subsecciones. Referente al menú de Composición Tipográfica, lo que este nos ayuda principalmente con texto matemático sea para correr los comandos o para escribir texto plano. Tenemos diferentes opciones, como ser superíndices(potencias), subíndices, fracciones, radicales. El punto relleno indica donde estaría nuestra ingreso de texto actual, y el recuadro sin relleno, donde nos va a permitir añadir escritura. Y es bastante útil también cuando se quieren definir matrices y se dificulta entender como funciona la escritura en código, por lo que podemos añadir una ayuda visual y colocar nuestros elementos manualmente. Como bien se observa, el menú de composición tipográfica tiene múltiples pestañas. No hablaremos de todas, pero si es bueno mencionar la segunda pestaña, la de Cáracteres Especiales. No hay mucho que decir aca, excepto que nos muestra multiples símbolos y letras griegas que pueden ayudar a desarrollar un notebook con mejor estética y legibilidad. Ademas que no necesitamos mencionar las demás pestañas, dado que en esta, al final, observamos una opción extra que dice “Todos los caracteres y símbolos especiales” en dicha opción, están contenidos los elementos de las demás pestañas. Entre los demás elementos, son de bastante utilidad cuando se tienen teclados cuya configuración de idioma, no permite que se utilicen operadores matemáticos como “mayor o menor que” y además incluyo el resto de operadores matemáticos y lógicos. Evaluación Algo a tener en cuenta, es que muchas veces cerramos y volvemos a abrir un notebook, y tenemos un trabajo sin finalizar. Lo primero que notamos, es que todas nuestras variables que habíamos definido, han sido limpiadas. Obviamente, volver a evaluar cada celda usando Shift + Enter sería algo tedioso. Por eso Wolfram trae una opción en su menú de “Evaluación” que nos ayuda en este caso. Dicha opción es “Evaluar Cuaderno” y como su nombre indica, evalúa todas las casillas que ingresan datos para que Wolfram las corra. Considerar también, “Anular Evaluación” esto nos viene a bien cuando por algún motivo, se esta evaluando una celda con algún problema en su definición, de forma que la evaluación tardara demasiado o no terminara. Limpiar Variables Algo importante es considerar, dado que inventamos variables y les asignamos valores, es si es posible reutilizar las variables, o asignarles otros valores. Lo cierto es que si podemos, fácilmente podemos reescribir la misma variable y asignarle un valor nuevo. Pero a veces, tras múltiples evaluaciones de celdas, la variable suele entrar en un conflicto de memoria y no estar seguro de cual es su valor asignado, lo que suele guiar a obtener valores erróneos en nuestros cálculos. Acá es donde, tenemos un comando que viene a servir de maravilla en este tipo de situaciones, el comando Clear[ ], con este comando, podemos borrar cualquier valor que asignamos a nuestra variable, y así dejarla libre para asignarle un valor nuevo sin peligro de ningún conflicto de memoria. Ahora, también puede venir a resultar tedioso, tener que escribir todas las variables a las que les asignamos valor e ir limpiado los valores de cada una de ellas. Aquí, es donde tenemos una extensión de el comando Clear, y ese es: ClearAll [“Global`*”] usando este comando, limpiamos los valores asignados a todas nuestras variables. Documentación de Wolfram Una de las grandes herramientas que tenemos los usuarios de Wolfram, es su Documentación, en muchos casos no se le presta la suficiente atención, pero es bastante completa y muy bien realizada, contiene múltiples ejemplos en los que desarrolla sus comandos además de explicar cada parámetro que este posee y ejemplos en los que es utilizado. La forma mas común de usar la documentación es colocar el comando del cual se desea conocer su funcionamiento en el buscador. Lo primero que se nos muestra, es las diferentes formas en que podemos correr el comando, según los parámetros que disponemos para definir. Luego, nos muestra ejemplos corriendo el comando bajo diferentes parámetros y podemos observar el comportamiento del comando según lo que le es ingresado Además que tenemos a nuestra disposición bastante información para escoger sobre el funcionamiento de cualquier comando. Funciones Para una función dependiente de dos o más variables, simplemente colocar las variables entre corchetes, separándolas por comas: Para evaluar la función, sustituimos entre los corchetes el valor(es) para el que queremos evaluar: La función no necesariamente tiene que evaluarse en un valor numérico: Recuerde: El guión bajo se utiliza solo cuando se define la función inicialmente, no cuando se está evaluando. Resolución de sistemas de ecuaciones Vectores Para definir los vectores en Wolfram, colocamos cada componente separada por comas, dentro de llaves Algo importante a tener en cuenta, es que el producto escalar lo podemos expresar de dos formas diferentes, una es, llamando las variables involucradas y utilizar el símbolo del punto ( . ) y la otra, es usando el comando Dot [ ]. Respecto al producto vectorial o producto cruz, se tiene una similitud con el producto escalar, tenemos un comando para efectuarlo, Cross [ ] y también hay una forma utilizando símbolo, solo que no suele usarse con regularidad puesto que el símbolo debe añadirse desde la paleta o llamándolo. Para calcular gradientes, lo hacemos con el comando Grad donde primero ingresamos la función que nos interesa, sea colocándola manualmente o en una variable donde fue guardada, y los parámetros son las dimensiones de dicha funcion Podemos a los vectores que hemos definido, calcular el rotacional de estos. Para ello usamos el comando Curl, donde el primer parámetro que ingresamos es nuestro vector, y seguido, cuales son sus coordenadas. Algo a tomar en cuenta, es que si trabajamos en otro sistema de coordenadas, podemos especificar el mismo al momento de ejecutar el comando, como en el caso mostrado, usando coordenadas Polares. Finalmente, tenemos el caso de la Divergencia, su calculo es idéntico al del rotacional, nada mas que el comando a emplear es Div. Por defecto, Wolfram trabaja bajo coordenadas cartesianas, pero si vamos a trabajar todo un desarrollo en otro sistema de coordenadas, podemos definir dichos sistema como el base utilizando el comando SetCoordinates [ ] y usamos como parámetro el sistema que deseamos Si tenemos coordenadas de un sistema, y deseamos convertirlas a otro, tenemos para ello, el comando CoordinateTransform con los parámetros “Coord. Inicial” -> “Coord. Deseada”, {variables} Gráficas Valor mínimo y máximo de la variable independiente. Función a graficar en términos de la variable independiente. La gráfica, por defecto, será mostrada en azul. Nombre de los ejes Color del gráfico Leyenda Nombre del gráfico Los puntos deben guardarse como una lista de pares ordenados agrupados por llaves y separados por comas. Controla el tamaño de los puntos La leyenda se mostrará automáticamente para aquellas gráficas que ya tenían leyenda. No puede definirse en el comando Show. Show mostrará varios gráficos superpuestos, sean estos funciones, puntos, o una combinación de ambos. Se puede personalizar la gráfica de la misma manera como se hace con los gráficos individuales. Cualquier parámetro que no haya sido redefinido en Show, será mostrado de acuerdo a como fue definido en la gráfica del primer argumento (Gr0 en este caso). Función que depende de dos variables Puede rotar la vista de la gráfica para comprenderla mejor. Paleta de colores del gráfico Nombre del gráfico Leyenda Un Gráfico de Contorno es una representación bidimensional de una superficie tridimensional en “tajadas,” como curvas de nivel. Los contornos unen puntos con el mismo valor de la función. Nombre de los ejes Observación: Vemos que si rotamos la gráfica en 3D de este función que habíamos realizado anteriormente, de manera que la veamos directamente desde arriba, ésta coincide con ContourPlot. De manera, que es evidente que las curvas de contorno no son más que curvas de nivel que usan tonalidades de colores para mostrar en dos dimensiones un comportamiento que realmente es tridimensional. Ya que en electomagnetismo se trata con campos vectoriales, tales como el campo eléctrico y magnético, es importante poder graficarlos. Para ello, utilizamos el comando StreamPlot, siguiendo los mismo principios que en las gráficas anteriores. Tema del Gráfico El tema del gráfico en realidad abarca mucho más que el color. En este caso, genera la leyenda también. Para entender lo que abarca el tema que desea seleccionar, consulte la documentación del programa. Gráficos de Discrepancia Ajustes de Datos Ahora, para lo principal que vamos a utilizar wólfram, es para encontrar Ajustes a nuestros Datos Lo primero, es que debemos saber como transcribir los datos que tenemos recopilados de nuestras mediciones. El formato es { {X1,Y1, {X2,Y2}, {X3,Y3} …. } El comando que usaremos para encontrar nuestro ajuste es: LinearModelFit este comando es si deseamos encontrar un ajuste Lineal. Bajo sus parámetros tenemos: nuestros datos, los coeficientes, y la variable de la que depende dicha función Si nuestro ajuste linear, será uno sin intercepto, agregamos una opción mas al comando, la opción IncludeConstantBasis –> False Ahora, algo a tener encuenta, es que el comando LinearModelFit retorna mucha mas información que solo el polinomio de ajuste. Podemos obtener mas información de lo que se obtuvo usando el comando [“ParameterTable”] De momento, lo que nos interesa de la tabla de parámetros, son las primeras dos columnas, estas son los valores estimados de el ajuste, y el error asociado a cada uno. Como LinearModelFit nos da mucha mas información, también entonces, debemos usar comandos para aislar las partes que nos interesan, en este caso, la forma de la función de ajuste. Para ello usamos el comando Normal a la variable en la que hemos guardado la información del ajuste Ahora, en Wolfram, no podemos calcular solamente ajustes lineales, también podemos encontrar funciones de ajuste de cualquier otra forma Tenemos dos formas para encontrar ajustes, uno de ellos es el comando FindFit. Variable que almacena los datos Forma del ajuste que deseo, en este caso un polinomio cuadrático. Coeficientes de la función de ajuste Variable de la que depende la función de ajuste Y el otro comando NonlinearModelFit que disponemos, es Variable que almacena los datos Forma del ajuste que deseo, en este caso un polinomio cuadrático. Coeficientes de la función de ajuste De igual forma que el comando LinearModelFit este también retorna mucha mas información de lo que muestra originalmente, por ello es que siempre retorna un resultado encerrado en un recuadro. Y podemos usar los mismos comandos para extraer mas información de lo que retorno. Variable de la que depende la función de ajuste Cálculo Se puede derivar e integrar ya sea usando comandos o las paletas. Derivadas En el caso de querer derivar una función que ya hemos definido, dependiente de una sola variable, colocamos “ ‘ " Integrales Variable respect a la cual se está integrando. En el caso de una integral definida, agregamos al segundo argumento el intervalo para el cual estamos integrando: Se puede escribir la función directamente o llamar por su nombre una función que ya se había definido. En algunos casos, Mathematica puede indicarnos que si no establecemos condiciones al problema, éste puede no estar definido: En este caso, el mensaje nos indica que el problema solo tiene solución si n es un valor real menor que cero. Para evitar este problema y para agilizar el tiempo de procesamiento para funciones más complejas, establecemos de antemano las condiciones del problema: Para integrales múltiples definidas e indefinidas, lo más sencillo es realizarlas con las paletas: Todo esto también lo podemos aplicar a vectores: