ii. EJERCICIOS DE LA PRIMERA FIRMA. Ejercicio resuelto 1. Abra un archivo usando el editor de Matlab, escriba en él una matriz cuadrada de orden 2 y guarde dicho archivo con el nombre “prueba.m”. >> prueba
se creó un archivo (file newM-file) con el nombre prueba.m y fue guardado en el cual se escribió la matriz cuadrada A=[1 2 ; 2 1] y se la guardo en el archivo, para luego en la página principal escribir solo el nombre del archivo para que nos muestre lo que tiene ese archivo
”
”
A= 1 2
Resultado obtenido
“
”
2 1
Ejercicio resuelto 2. Escriba y guarde en un archivo de nombre “datos.m” la matriz cuadrada de orden veinte tal que los elementos de su diagonal son todos iguales a 3 y las dos subdiagonales principales están formadas por unos. Calcule su determinante. Posteriormente cambie la diagonal por el vector cuyas coordenadas son los primeros veinte números naturales y vuelva a calcular el determinante de la nueva matriz. >> datos
creamos un archivo archivo con el nombre datos en donde guardamos la matriz cuadrada de orden 20 con diagonal principal puros 3 y sus dos sub diagonales puros unos “
”
31000000000000000000 13100000000000000000 01310000000000000000 00131000000000000000 00013100000000000000 00001310000000000000 00000131000000000000 00000013100000000000 00000001310000000000 00000000131000000000 00000000013100000000 00000000001310000000 00000000000131000000 00000000000013100000 00000000000001310000 00000000000000131000 00000000000000013100 00000000000000000131 00000000000000000013
>> det(A)
calculamos la determinante de la matriz de orden 20
“
ans = 267914296 >> datos
”
Resultado obtenido
“
”
se realizo el cambio de la diagonal por el vector cuyas coordenadas son los primeros veinte números naturales naturales
“
”
>> det(A) ans = 5.7267e+017
calculamos la determinante de la matriz de orden 20
“
Resultado obtenido
“
”
”
Ejercicio resuelto 3. Diseñe una función que muestre la gráfica de l a función en [−2, 2] ×[−4, 12] y cuyo argumento de entrada sea el número n. La gráfica debe tener un mallado y deben situarse los ejes de coordenadas. función graf(n)
creamos una función con el nombre graf(n) para la expresión
“
”
x=-2:0.01:2; y=x.^n; plot(x,y);axis([-2 2 -4 12]);
para x definimos un intervalo y el tamaño de su paso realizamos la función y lo graficamos ,además de usar la función axis para definir de modo explícito los valores máximo y mínimo según cada eje hold on activamos la función hold plot([-2.2 2.2],[0 0],'w', [0 0], [12 -4],'w'); graficamos la función con la función plot(x,y) y también le designamos color de línea grid; hold off; desactivamos la función hold “
”
“
”
“
”
“
”
“
>> graf(5)
”
“en la ventana principal llamamos la función graf(n)”
Resultado obtenido
“
”
Ejercicio 4. Diseñe una función que devuelva el producto escalar de dos vectores x e y de . Los argumentos de entrada deben ser los vectores x e y. Además, el correspondiente archivo debe incluir algunas líneas de comentario. function productoescalar(X,Y) C=X(1,:).*Y(1,:); sum(C) >> C=[1 2 3 4]; >> B=[1 2 3 4]; >> productoescalar(C,B)
ans = 30
“creamos una función con el nombre productoescalar(x,y)” “en c guardamos el producto de x e y que tienen un valor a partir de 1 , los dos puntos aislados representan "todos los elementos"” “realizamos la sumatoria de lo guardado en c” “guardamos en C un vector ” “guardamos en B un vector” “en la ventana principal llamamos a la función productoescalar para C y B”
Resultado obtenido
“
”
Ejercicio 5. Diseñe una función que calcule el factorial de un número natural n. El argumento de entrada debe ser dicho número n. función fact(n) f=1; for k=1:n f=f*k;
“creamos la función fact(n)” “inicializamos f=1” “realizamos el bucle for para k (que tomara los valores de 1 hasta n)” “realizamos el producto entre f y k, el resultado lo guardamos en la misma f” “terminamos el bucle for” “mostramos f” “en la ventana principal llamamos a la función fact para el valor de n=5”
end f >> fact(5) f= 120
Resultado obtenido
“
”
Ejercicio resuelto 6 . Diseñe una función que devuelva el término n-ésimo de l a iteración function z=iter(n) x=4; for k=1:n x=x^2-2*x; end z=x; >> iter(1),iter(15),iter(50) ans = 8 ans = NaN ans = NaN
“creamos la función iter(n)” “inicializamos z en 4” “utilizamos el bucle for para k (de 1 hasta n)” “realizamos las operaciones de la ecuación dada y lo guardamos en x” “finalizamos el bucle for” “guardamos el valor de x en z” “en la ventana principal llamamos a la función para valores de n=1;n=15;n=50” Resultado obtenido
“
”
Resultado obtenido
“
”
Resultado obtenido
“
”
Ejercicio 7. Dada una matriz cuadrada de orden n, diseñe una función usando la instrucción for, que sume los elementos de mayor módulo de cada una de las columnas de dicha matriz. function may(A) n=length(A); sum=0; for j=1:n max=0; for k=1:n if abs(max)
“creamos una función may(A) ” “ la función length devuelve la longitud de la matriz A y la guarda en n” “inicializa n en 0” “usamos el bucle for para j (de 1 hasta n) este for es para el barrido de la columna” “inicializamos una variable max en 0” “usamos el bucle for para k (de 1 hasta n) este for es para el barrido de la fila” “utilizamos la sentencia if para averiguar el número mayor de cada columna” “guardamos en max el numero mayor obtenido en la sentencia ” “finalizamos la sentencia if” “finalizamos el bucle for” “guardamos la suma de sum +max en sum” “finalizamos el bucle for” “mostramos la suma total de los valores máximos”
>> A=magic(4)
“en la ventana principal sacamos la matriz mágica como ejemplo para el cálculo”
A= 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1
Resultado obtenido
“
>> may(A) sum = 58
”
“llamamos a la función may para la matriz A” Resultado obtenido
“
”
iii. EJERCICIOS DE LA SEGUNDA FIRMA. Ejercicio 8. Usando dos instrucciones for anidadas, genere la matriz cuadrada A, definida por: function matriz for j=1:10 for k=1:10 A(j,k)=j^2*k ; end end A >> matriz
( ) “creamos la función matriz” “usamos el bucle for para j (de 1 hasta 10) para el barrido de la fila” “usamos el bucle for para k(de 1 hasta 10) para el barrido de la columna” “realizamos el producto de jal cuadrado por k y lo guardamos en la posición A(j,k) ” “finalizamos el bucle for” “finalizamos el bucle for” “mostramos A” “llamamos a la función matriz en la ventana principal”
A= 1 4 9 16 25 36 49 64 81 100
2 8 18 32 50 72 98 128 162 200
3 12 27 48 75 108 147 192 243 300
4 16 36 64 100 144 196 256 324 400
5 20 45 80 125 180 245 320 405 500
6 24 54 96 150 216 294 384 486 600
7 28 63 112 175 252 343 448 567 700
8 32 72 128 200 288 392 512 648 800
9 10 36 40 81 90 144 160 225 250 324 360 441 490 576 640 729 810 900 1000
Resultado obtenido
“
”
Ejercicio resuelto 9 . Diseñe una función sobre los números enteros que asigna el valor 1 a los números pares y positivos, el valor -1 a los números impares y positivos y el valor cero a los números restantes. function paridad=paridad(n) if n<=0 paridad=0; elseif rem(n,2)==0
paridad=1; else paridad=-1; end >> paridad(-5),paridad(4),paridad(3) ans = 0 ans = 1 ans = -1
“creamos la función paridad(n)” “usamos la sentencia if para determinar si es negativo” “si es verdad paridad tomara el valor de 0” “utilizamos la sentencia elseif para falso, sacara la división de n/2 si su resto de la división es igual a 0 .rem(x,y) resto de la división (2 argumentos que no tienen que ser enteros) ” “si es falso paridad tomara el valor de 1” “else caso contrario ” “si es caso contrario paridad tomara el valor de -1” “finalización de la sentencia if” “en la ventana principal llamamos a la función paridad para n=5;n=4;n=3” Resultado obtenido
“
”
Resultado obtenido
“
”
Resultado obtenido
“
”
Ejercicio 10. Diseñe una función que calcule todos los divisores de un número natural dado. function divisores(n) j=0; for k=1:n if mod(n,k)==0 j=j+1; A(j)=k; end end A end
“creamos la función divisores(n)” “inicializamos j en 0” “utilizamos el bucle for para k(de 1 a n) ” “utilizamos la sentencia if para averiguar si es verdad, sacamos la división entera de n/k y lo comparamos a 0” “si es verdad j se incrementara en uno” “y en la posición de A(j) se guardara el valor de k” “finaliza la sentencia if” “finaliza el bucle for” “muestra A” “finaliza”
>> divisores(12)
“en la ventana principal llamamos a la función para n=12”
A= 1
2
3
4
6
12
Resultado obtenido
“
”
Ejercicio 11. Diseñe una función que calcule todos los números naturales perfectos menores que uno dado. Un número natural se dice perfecto si dicho número es la suma de todos sus divisores menos él. function perfecto(n) j=0; for i=1:(n-1) s=0; for k=1:(i-1) if mod(i,k)==0 s=s+k; end end if s==i j=j+1; B(j)=i; end end B end >> perfecto(30) B= 6 28
“creamos la función perfecto(n)” “inicializamos j en 0” “utilizamos el bucle for para i(de 1 hasta n-1)” “inicializamos s en 0” “utilizamos el bucle for para k (de 1 hasta i -1)” “utilizamos la sentencia if para saber si es verdad, sacamos el modulo de i/k y lo comparamos con 0” “en s guardamos la suma de s+k” “finaliza la sentencia if” “finaliza el bucle for” “utilizamos la sentencia if para saber si s es igual que i” “en j guardamos el incremento de j ” “en B(j) guardamos el valor de i” “finaliza la sentencia if” “finaliza el bucle for” “muestra B” “finaliza la función” “llamamos en la ventana principal a la función perfecto para n=30 ” Resultado obtenido
“
”
Ejercicio resuelto 12. Determine el valor de la precisión de la máquina usando un bucle while. Compare el valor obtenido con la variable predefinida eps de Matlab. function precmaq precmaq=1; while (1+precmaq)>1 precmaq=precmaq/2; end precmaq = 2*precmaq >> precmaq = 2.2204e-016
“creamos al función precmaq” “inicializamos precmaq en 1” “utilizamos el bucle while ” “guardamos en precmaq la división de precmaq entre 2” “finaliza el bucle while” “guardamos en precmaq el doble de precmaq” “llamamos la función precmaq en la ventana principal” Resultado obtenido “
”
Ejercicio 13. Calcule el primer término de la sucesión de Fibonacci function fibo a=-1; b=1; c=0; for i=1:32 c=a+b; a=b; b=c; B(i)=c; end B(32) End
“creamos la función fibo” “inicializamos a en -1” “inicializamos b en 1” “inicializamos c en 0” “utilizamos el bucle for para i (de 1 a 32)” “en c guardamos la suma de a+b” “en a guardamos el valor de b” “en b guardamos el valor de c” “en B(i) guardamos el valor de c” “finalización del bucle for” “mostramos B(32)” “final de la función”
ans = 1346269
Resultado obtenido
“
”
Ejercicio 14. Un conocido resultado de L. Euler (1707-1783) afirma que ∑ Obtenga el menor
número de sumandos de la serie anterior, de modo que la correspondiente suma finita aproxime error menor o igual que y que . syms n f=1/(n^2) vpa(simplify(symsum(f,1,inf)))
con un
“function syms para n(syms =sumatoria de series)” “en f guardamos la division de 1 entre n al cuadrado” “vpa=al resultado numerico de la expression con los digitos decimals de precision situadas en digits”
f= 1/n^2 ans = 1.6449340668482264364724151666460
Resultado obtenido
“
”
iv. RESUMEN DE INVESTIGACIÓN Lenguaje de Programación de software matemático MathCad 1. Introducción. Mathcad es un programa algebraico de computadora, distribuido por PTC. En comparación a otros softwares como Sage MathScilab y MATLAB, MathCad es menos poderoso y no permite aprovechar el hardware. Su filosofía es que es un programa más de documentación que de cálculo, aunque también es potente en este ámbito, es muy visual y permite el uso de plantillas de funciones en las que solo es necesario escribir los valores deseados, incluso para graficar funciones.
Descripción Mathcad es un entorno de documentación técnica con prestaciones de cálculo numérico y simbólico, que permite explorar problemas, formular ideas, analizar datos, modelar y chequear escenarios, determinar la mejor solución, como así también documentar, presentar y comunicar los resultados. Algunas de las capacidades matemáticas de Mathcad están basadas en parte del código del programa algebraico Maple (Núcleo MathSoft de Maple o Mathsoft Kernel Maple, MKM) MathCad se encuentra organizado como una hoja de trabajo, en las que las ecuaciones y expresiones se muestran gráficamente, no como simple texto. Dentro de las capacidades de MathCad se encuentran: Resolver ecuaciones diferenciales con varios métodos numéricos Graficar funciones en dos o tres dimensiones El uso del alfabeto griego (letras griegas mayúsculas y minúsculas) Cálculo de expresiones simbólicas Operaciones con arreglos (vectores y matrices) Solución simbólica de un sistema de ecuaciones Encontrar la gráfica (la curva de tendencia) de un grupo de datos Implementación de subprogramas Encontrar raíces de polinomios y funciones Funciones estadísticas y distribuciones de probabilidad Encontrar valores propios o autovalores y vectores propios o autovectores
2. Sintaxis del Lenguaje Mathcad es un entorno de documentación técnica con prestaciones de cálculo numérico y simbólico, que permite explorar problemas, formular ideas, analizar datos, modelar y chequear escenarios, determinar la mejor solución, como así también documentar, presentar y comunicar los resultados. Algunas de las capacidades matemáticas de Mathcad están basadas en parte del código del programa algebraico Maple (Núcleo MathSoft de Maple o Mathsoft Kernel Maple, MKM) MathCad se encuentra organizado como una hoja de trabajo, en las que las ecuaciones y expresiones se muestran gráficamente, no como simple texto. Dentro de las capacidades de MathCad se encuentran: Resolver ecuaciones diferenciales con varios métodos numéricos Graficar funciones en dos o tres dimensiones El uso del alfabeto griego (letras griegas mayúsculas y minúsculas) Cálculo de expresiones simbólicas Operaciones con arreglos (vectores y matrices)
Solución simbólica de un sistema de ecuaciones Encontrar la gráfica (la curva de tendencia) de un grupo de datos Implementación de subprogramas Encontrar raíces de polinomios y funciones Funciones estadísticas y distribuciones de probabilidad Encontrar valores propios o autovalores y vectores propios o autovectores Mathcad tiene cientos de funciones y operadores integrados. Use Mathcad para llevar a cabo cálculos numéricos o encontrar soluciones simbólicas. Mathcad funciona con una amplia variedad de tipos numéricos y de datos, y realiza un seguimiento y una conversión automáticos de las unidades. Los gráficos 2D y 3D de Mathcad se actualizan cuando se producen cambios en los cálculos. Se incluyen tipos de trazados cartesianos, polares, de superficie, de contorno, de barras, de dispersión y de campos de vectores. Un operador de imágenes proporciona la misma visualización interactiva para las aplicaciones de procesamiento de imágenes. Es posible animar cualquier parte de un documento de Mathcad, incluidos los resultados numéricos, los gráficos y las imágenes.
3. Tres Ejemplos de Código del lenguaje de programación.
Lenguaje de Programación de software matemático Mathematica 1. Introducción Mathematica es un programa utilizado en áreas científicas, de ingeniería, matemáticas y áreas computacionales. Originalmente fue concebido por Stephen Wolfram, quien continúa siendo el líder del grupo de matemáticos y programadores que desarrollan el producto en Wolfram Research, compañía ubicada en Champaign, Illinois. Comúnmente considerado como un sistema de álgebra computacional, Mathematica es también un poderoso lenguaje de programación de propósito general.
2. Sintaxis del Lenguaje Mathematica La primera versión de Mathematica se puso a la venta en 1988. La versión 10, fue lanzada el 9 de julio de 2014, se encuentra disponible para una gran variedad de sistemas operativos. Mathematica se divide en 2 partes, el "kernel" o núcleo (en informática) que desempeña los cálculos. Y el "front end" o interfaz, que despliega los resultados y permite al usuario interactuar con el núcleo como si fuera un documento. En la comunicación entre el kernel y la interfaz (o cualquier otro cliente) Mathematica usa el protocolo MathLink, a menudo sobre una red. Es posible que diferentes interfaces se conecten al mismo núcleo, y también que una interfaz se conecte a varios núcleos. A diferencia de otros sistemas de álgebra computacional, por ejemplo Maxima o Maple, Mathematica intenta usar las reglas de transformación que conoce en cada momento tanto como sea posible, tratando de alcanzar un punto estable.
Características generales El lenguaje de programación de Mathematica está basado en re-escritura de términos (que se identifica también como computación simbólica), y soporta el uso de programación funcional y de procedimientos (aunque en general, la programación funcional es más eficiente). Está implementado en una variante del Lenguaje de programación C orientado a objetos, pero el grueso del extenso código de librerías está en realidad escrito en el lenguaje Mathematica, que puede ser usado para extender el sistema algebraico.
Usualmente, nuevo código puede ser añadido en forma de paquetes de de texto escrito en el lenguaje de Mathematica. Algunas de las características de Mathematica incluyen:
Mathematica, como los archivos
Bibliotecas de funciones elementales y especiales para matemáticas. Herramientas de visualización de datos en 2D y 3D. Matrices y manipulación de datos, así como soporte de matrices tipo "sparse". Capacidad de solucionar sistemas de ecuaciones, ya sea ordinarias, parciales o diferenciales, así como relaciones de recurrencia y algebraicas en general. Herramientas numéricas y simbólicas para cálculo de variable continua o discreta. Estadística multivariable. Restringida y no restringida optimización de local y global. Lenguaje de programación que soporta programación funcional. Un kit de herramientas para añadir interfaces de usuario para cálculos y aplicaciones. Herramientas para procesamiento de imágenes. Herramientas de análisis y visualización. Minería de datos, como análisis de clústeres, alineamiento de secuencias, y "pattern matching". Bibliotecas de funciones para teoría de números. Transformaciones de integrales continuas y discretas. Capacidades de importación y exportación de información de datos, imágenes, video y sonido, así como otros formatos biomédicos y de intercambio de documentos en general. Una colección de bases de datos incluidas de matemáticas, ciencia e información socio económica (astronomía, diccionarios, clima, poliedros, países, instrumentos financieros, componentes químicos, el genoma humano, entre otros). Soporte para variable compleja, aritmética de precisión infinita y computación simbólica para todas las funciones incluidas. Interfaz de tipo documento que permite la reutilización de entradas y salidas previas, incluidas gráficas y anotaciones de texto. Funcionalidad como procesador de palabras técnico (cuaderno de notas), incluyendo un editor de fórmulas.
Estructura interna de Mathematica
Este paquete tiene una estructura que permite su utilización en diferentes entornos: Pc, Mac, Unix, etc. Para ello está dispuesto en dos partes fundamentales. El Kernel (motor de cálculo) y el Front End (Interfaz de comunicación con el usuario). Cuando se comienza a utilizar el programa se activa el Front End con lo que se puede comenzar a introducir datos y expresiones. En el momento en que se desea realizar la primera operación se activa el Kernel que es el módulo que realiza el cálculo. En el Kernel se encuentran introducidos los procedimientos de cálculo relacionados con una gran cantidad de operaciones (las más habituales). Sin embargo, dada la potencia de cálculo del paquete, operaciones y procedimientos más complejos se encuentran almacenados en diferentes "Packages" que deben ser activados antes de realizar los cálculos con ese tipo de sentencias. En el entorno Windows en que nos movemos, el Front End está dispuesto de manera que todo el desarrollo realizado puede ser almacenado prácticamente como en un editor de texto y tiene además todas las características de conectividad con otros paquetes que funcionen en el mismo entorno windows . También, muchos de los comandos que ejecuta Mathematica han sido introducidos en ventanas gráficas "Palettes" que permiten una más rápida implementación de las sentencias y evitan memorizar parte de los comandos utilizados. Todas estas características permiten un manejo sencillo y rápido de modo que, con una pequeña introducción a las funciones básicas, al modo de introducir datos y a la utilización de la ayuda, se puede manejar con soltura en un corto espacio de tiempo.
Interfaces La interfaz preseleccionada por Mathematica tiene extensas características y capacidades gráficas, ofreciendo analogías a un cuaderno de trabajo: la entrada de datos por parte del usuario y los resultados
enviados por el núcleo (incluyendo gráficas y sonidos), son colocados en forma de celdas jerárquicas (igual que Maple), lo cual permite seguir con facilidad la secuencia de las manipulaciones algebraicas o cálculos que se están desarrollando en una sesión. Comenzando con la versión 3.0 del software, los cuadernos se representan como expresiones que puedan ser manipuladas, a su vez, por el núcleo. Para permitir a aquellos usuarios que no tienen una licencia, la visualización de los cuadernos de trabajo escritos en Mathematica, se creó un paquete de lectura dedicado. Este paquete, llamado MathReader puede bajarse de la red gratuitamente. Otras interfaces se encuentran disponibles, como, JMath o mash, pero la interfaz estándar de Mathematica es la más popular.
Conexiones con otras aplicaciones Las comunicaciones con otras aplicaciones ocurren a través del protocolo llamado MathLink . Este protocolo permite no solo comunicaciones entre el núcleo de Mathematica y las pantallas, sino que también provee la interfaz entre el núcleo y aplicaciones arbitrarias. Wolfram Research distribuye de forma gratuita un kit para enlazar aplicaciones escritas en el lenguaje de programación C hacía el núcleo de Mathematica a través de MathLink . Otros componentes de Mathematica, que usan el protocolo Mathlink , permite a los desarrolladores establecer comunicaciones entre el núcleo y Java o para programas .NET como J/Link y.NET/Link. Usando J/Link , un programa de Java puede decirle a Mathematica que ejecute cálculos; también Mathematica puede cargar cualquier clase de Java, manipular objetos de Java y desempeñar llamadas a métodos, haciendo posible construir interfaces gráficas desde Mathematica. De forma similar, la plataforma . NET puede enviarle órdenes al núcleo para que ejecute cálculos, y devuelva los resultados, también los desarrolladores de Mathematica pueden acceder con facilidad a la funcionalidad de la plataforma .NET . Mathematica 9 es compatible con varias versiones de Linux, OS X de Apple, Windows (XP SP3, Vista, 7 and 8) de Microsoft y Raspberry Pi. Todas estas plataformas son compatibles con implementaciones de 64 bits. Versiones anteriores de Mathematica hasta la 6.0.3 son compatibles con otros sistemas operativos, incluyendo Solaris, AIX, Convex, HP-UX, IRIX, MS-DOS, NeXTSTEP, OS/2, Ultrix y Windows Me.
Funcionalidades de Mathematica para Internet Wolfram Research cuenta con un programa denominado webMathematica que añade funcionalidades para publicación Web capaz de hacer cálculos y desplegar visualizaciones de Mathematica en línea. Como demostración de las capacidades de Mathematica y webMathematica, Wolfram Research mantiene un sitio web en la que es posible realizar integrales indefinidas simples "The Integrator" en http://integrals.wolfram.com/index.jsp así como el "Demonstrations project" que consiste en pequeños programas encapsulados que muestran un concepto matemático o una función de Mathematica de manera simplificada, visual y libre ya que el código fuente también puede descargarse. Estos pequeños programas pueden visualizarse incluso sin contar con Mathematica sino directamente en el browser o con el Mathematica Player que es gratuito y puede descargarse en la página de Wolfram Research.
3. Tres Ejemplos de Código del lenguaje de programación. La siguiente secuencia de Mathematica encuentra el determinante de una matriz de 6x6 , cuyos i, j enésima entradas contienen ij con todos los ceros reemplazados por 1. In[1]:= Det[Array[Times, {6, 6}, 0] /. 0 -> 1] Out[1]= 0 Entonces, el determinante de tal matriz es cero. x El siguiente calcula numéricamente la raíz de la ecuación e = x2 + 2, comenzando en el punto x = -1 In[2]:= FindRoot[Exp[x] == x^2 + 2, {x, -1}] Out[2]= {x -> 1.3190736768573652}
Múltiples paradigmas como lenguaje de programación
Mathematica permite múltiples paradigmas de programación. Considere por ejemplo: una tabla con los valores de gcd( x, y) para 1 ≤ x ≤ 5, 1 ≤ y ≤ 5. La opción más concisa es usar una de las muchas funciones especializadas: In[3]:= Array[GCD, {5, 5}] Out[3]= {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, {1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}} También se puede de esta forma: In[4]:= Table[GCD[x, y], {x, 1, 5}, {y, 1, 5}] Out[4]= {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, {1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}} Igualmente se puede: In[5]:= Outer[GCD, Range[5], Range[5]] Out[5]= {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, {1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}} Outer corresponde al operador del producto externo , Range corresponde al operador iota. De forma iterativa: In[6]:= l1 = {}; (* inicia una lista vacía, para obtener una lista al final*) For[i = 1, i <= 5, i++, l2 = {}; For[j = 1, j <= 5, j++, l2 = Append[l2, GCD[i, j] ] ]; l1 = Append[l1, l2]; (* añade a la sublista, esto es, la fila *) ]; l1 Out[6]= {{1, 1, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 1, 3, 1, 1}, {1, 2, 1, 4, 1}, {1, 1, 1, 1, 5}} Observe que esta solución es considerablemente más larga que las anteriores.
Estructuras comunes, manipulaciones comunes Uno de los principios que guían en Mathematica, es la estructura unificada detrás de todos los objetos representables. Por ejemplo, la expresión si es entrada será representada como si fuera escrita: In[7]:= x^4 + 1 Out[7]= 1+x4 Pero si el comando FullForm es usado en esta expresión: In[8]:= FullForm[x^4 + 1] Out[8]= Plus[1, Power[x, 4]] Casi todos los objetos en Mathematica tienen básicamente la forma head [e1, e2, ...] (la cual puede ser mostrada o introducida de otras maneras). Por ejemplo, el head del ejemplo de arriba es Plus, y los símbolos tales como x tienen la forma Symbol["x"]. Las listas tienen esta estructura también, donde el head es List. El principio permite expresiones ordinarias sin relación con listas, ser operadas con operaciones de listas: In[9]:= Expand[(Cos[x] + 2 Log[x^11])/13][[2, 1]] Out[9]= 2/13 Lo contrario también puede ocurrir -- las listas pueden ser modificadas para comportarse como expresiones ordinarias: In[10]:= Map[Apply[Log, #] &, {{2, x}, {3, x}, {4, x}}] Out[10]= {Log[x]/Log[2], Log[x]/Log[3], Log[x]/Log[4]} donde la función Apply cambia el head del segundo argumento hacia el primero.
Lenguaje de Programación de software matemático Maple. 1. Introducción. Maple es un programa orientado a la resolución de problemas matemáticos, capaz de realizar cálculos simbólicos, algebraicos y de álgebra computacional. Fue desarrollado originalmente en 1981 por el Grupo de Cálculo Simbólico en la Universidad de Waterloo en Waterloo, Ontario, Canadá. Maple es un lenguaje de programación interpretado. Las expresiones simbólicas son almacenadas en memoria como grafos dirigidos sin ciclos (ver Grafos, Teoría de Grafos)
Desde 1988 ha sido mejorado y vendido comercialmente por Waterloo Maple Inc. (también conocida como Maplesoft), una compañía canadiense con sede en Waterloo, Ontario. La última versión es Maple 17.
Origen del nombre Su nombre es una abreviatura o un acrónimo de la frase en Ingles Mathemathic Pleasure (Placer de las Matemáticas), también se debe a que Maple fue hecho en Canadá, cuya bandera tiene una hoja de arce (maple en inglés).
2. Sintaxis del Lenguaje Comandos en Maple Tipos de "árboles de expresión" en Maple Las funciones son reconocidas por Maple como árboles de expresión. Maple reconoce los siguientes tipos de funciones (osea árboles de expresión): string, integer, fraction, float, `+`, `*`, indexed y function. Si se pretende saber que tipo de árbol de expresión es una función, se puede escribir el comando whattype( ). Supóngase que se tiene una función x^2+4*x+4, y se quiere saber que tipo de árbol de expresión es para maple. Primero se escribe la función, y l uego se usa el comando whattype: p:= x^2+4*x+4 whattype(p) Si se quiere saber si una determinada función es un determinado árbol de expresión, se usa la función type( , ). Por ejemplo, se quiere saber si la función p:= x^2+4*x+4 es un entero (integer). Primero se escribe la función y luego se usa el comando type: p:= x^2+4*x+4 type(p,integer)
Escribir una función Supóngase una función igual a x^2+4*x+4, a la cual se llame p. En Maple se debe escribir: p:= x^2+4*x+4 Si se desea saber cual es el valor de esa función cuando x es 3, se escribe: x:= 3 p; Cabe destacar que si ya no se quiere usar el valor asignado a x, se lo puede borrar de la siguiente manera: x:= 'x'
Hallar la antiderivada o integral Supóngase que se tiene una función igual a x^2+4*x+4 llamada p. Se pretende encontrar la antiderivada. p:= x^2+4x+4 int(p,x) Maple mostrará la antiderivada. Obviamente int significa integral.
Las funciones nops y op La función nops es usada en Maple para determinar el número de operandos de una expresión. Por ejemplo, supóngase que se tiene la función x^2+4*x+4, y se quiere saber su cantidad de operandos. Primero se define la función y luego se le aplica el comando nops: p:= x^2+4*x+4; nops(p); (arrojaría el valor 3) La función op es utilizada para conocer el operando que está en una posición indicada. Por ejemplo, supóngase que se tiene la función x^2+4*x+4, y se quiere encontrar el segundo operando. Primero se define la función y luego se le aplica el comando op: p:= x^2+4*x+4; op(2,p); (arrojaría el valor 4x)
Escribir un bucle (loop) Para crear un bucle, se debe seguir la siguiente estructura: [for "nombre de la expresión" ] [from "expresión" ] [by "expresión"] [to "expresión"] [while "expresión"] do "declaración de sequencia" end do Supóngase que se quiere programar bucle que imprima los cuadrados del 1 al 10. La la expresión en Maple sería: for i from 1 to 10 do print(i^2) end do
3. Tres Ejemplos de Código del lenguaje de programación. Código de ejemplo en Maple Las siguientes líneas de código calculan la solución exacta de una ecuación diferencial ordinaria de segundo orden:
Sujeto a las condiciones iniciales:
dsolve( {diff(y(x),x, x) - 3*y(x) = x, y(0)=0, D(y)(0)=2}, y(x) ); Raíz cuadrada del número 2 hasta 20 cifras decimales: > sqrt(2) = evalf (sqrt(2), 21); Simplificación de fracciones: > simplify (35/42 - 5/30);
Solución de ecuaciones cuadráticas: > solve (3*x^2 + b*x = 7, x);
Solución de ecuaciones diferenciales simbólicas: > f:= x -> tan(x)*sqrt(x): > D(f)(x);
Funciones integrales, solución simbólica, y solución numérica: > Int (sin(x)^2, x);
> value (%);
> int (sin(x)^2, x = 0..Pi/2);
Evaluación de ecuaciones diferenciales lineales en forma simbólica y numérica: > DGL:= diff (y(x),x, x) - 3*y(x) = x: > DGL;
> dsolve ({DGL, y(0)=1, D(y)(0)=2}, y(x));
v. CONCLUSIONES.