UNIVERSIDAD POLITÉCNICA DE MADRID ESCUELA TÉCNICA SUPERIOR DE INGENIEROS DE MINAS DEPARTAMENTO DE MATEMÁTICA APLICADA Y MÉTODOS INFORMÁTICOS TITULACIÓN: INGENIERÍA DE MINAS ASIGNATURA: PROGRAMACIÓN Y MÉTODOS NUMÉRICOS PRÁCTICA Nº 1: INTRODUCCIÓN A MAPLE CURSO 2006-07 PRÁCTICA ELABORADA POR: Prof. Carlos Conde Lázaro Prof. Arturo Hidalgo López Prof. Alfredo López Benito Depto. de Matemática Aplicada y Métodos Informáticos Escuela Técnica Superior de Ingenieros de Minas Universidad Politécnica de Madrid Mayo 2007 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid OBJETIVOS DE LA PRÁCTICA 1º. Conocer y utilizar los comandos básicos de MAPLE para realizar operaciones aritméticas. 2º. Representar gráficas de funciones de una variable. 3º. Conocer y utilizar los comandos básicos de MAPLE para las operaciones con matrices y vectores. FORMA DE DESARROLLAR ESTA PRÁCTICA. La realización de la práctica se divide en dos partes. En la primera de ellas el profesor explicará el funcionamiento de los comandos de MAPLE necesarios mediante el desarrollo de los ejemplos contenidos en el epígrafe de EJEMPLOS. En la segunda parte los alumnos deberán resolver individualmente los ejercicios propuestos que se incluyen en el epígrafe de EJERCICIOS pudiendo consultar al profesor cuantas dudas tengan sobre los mismos. La semana siguiente a aquella en la que se realice la práctica, los alumnos podrán solicitar una versión de la misma en la que se incluirán los ejercicios que se proponen debidamente resueltos. DURACIÓN ESTIMADA DE ESTA PRÁCTICA El tiempo estimado para la realización de esta práctica es de 2 horas. BIBLIOGRAFÍA La principal referencia en la que se sustenta esta práctica la constituyen los módulos de ayuda de MAPLE (accesibles en la opción Help de la barra de herramientas) EJEMPLOS Introducción al programa MAPLE 10 MAPLE 10 es un Sistema de Computación Matemática que permite realizar cálculos numéricos, manipular expresiones simbólicas, crear nuevos procedimientos, (entendiendo por éstos una secuencia de instrucciones, sentencias y comandos cuyo objetivo es resolver o realizar una determinada aplicación o algoritmo) y elaborar maplets. En este sentido MAPLE 10 posibilita el uso de aproximadamente 3000 funciones predefinidas junto con todas aquellas que puede definir el usuario. En MAPLE existen dos tipos básicos de input: *) el input matemático, caracterizado por el prompt "[>", y *) el input de texto, "[" utilizado para hacer comentarios, explicar fórmulas y ordenar el documento (hoja de trabajo o worksheet). > #input matemático input de texto Existe también un menú de ayuda a disposición del usuario al cual se puede acceder pulsando la palabra Help que se encuentra en la barra de menús de la cabecera de la hoja de trabajo. Otras forma de acceso al menú de ayuda se verán más adelante. 1 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid Al terminar cada instrucción se pulsa la tecla Entrar (o Intro) para que esta se ejecute. Operaciones elementales y sintaxis de Maple V Operadores aritméticos elementales Las operaciones aritméticas elementales (suma, resta, producto y división) se representan en MAPLE por los operadores + , - , * y / . Uso del operador punto y coma Todos los comandos en Maple V deben terminar en ; (punto y coma) o en : (dos puntos). Si la expresión MAPLE se termina de esta forma, se puede ejecutar dicha expresión sin más que pulsar la tecla "ENTER" () o la tecla "INTRO" . Ejemplo: Veamos cómo deberíamos proceder para multiplicar dos números tales como 32547 y 33756. > 32547*33756; 1098656532 Si se desea sumar los números 42 y 33 se procedería como sigue: > 42+33; 75 Uso del operador dos puntos Veamos qué ocurre si sustituímos el punto y coma por dos puntos: > 32547*33756: No se presenta ningún resultado, sin embargo, el cálculo se ha realizado. ¿Qué ocurre si omitimos el operador punto y coma o el operador dos puntos? La siguiente línea muestra que si se omite el punto y coma tras una operación no se ejecuta la instrucción, lo que produce un mensaje de error de sintaxis: > 32547*33756 > Warning, premature end of input > 42+33 > Warning, premature end of input Si en la evaluación anterior añadimos el símbolo ; detrás de la expresión 32547*33756 , y de 42+33 la dos operaciones se realizarán correctamente. > 32547*33756; 1098656532 > 42+33; 75 En resumen: La ejecución de expresiones en MAPLE debe finalizarse con ; o con : . Si se finaliza con ; se muestra en pantalla el resultado de la expresión. Si se finaliza con : la expresión se ejecuta pero el resultado no se muestra en pantalla. 2 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid Uso del operador % Maple permite moverse por todo el documento (worksheet), volviendo a realizar cálculos anteriores o modificar expresiones o comandos, de manera que si se comete un error de sintaxis podamos corregirlo y ejecutar de nuevo este comando u otros anteriores. Cuando queramos emplear el resultado de la última operación o cálculo realizado (que no tiene por qué coincidir con el último escrito) en una nueva operación utilizaremos el operador %: Ejemplo: Si queremos multiplicar 2 por la suma de 42+33 (la última operación realizada) podemos escribir: > 2*%; 150 De esta manera obtenemos el resultado esperado de la operación 2 *(42+33)=150. Si queremos referirnos al resultado del cálculo u operación penúltima, escribiremos dos veces el operador %, es decir, %%. Ejemplo: Si deseamos dividir 97 entre el resultado de 42+33 realizado en la penúltima operación escribiremos: > 97/%%; 97 75 que es igual a realizar la operación 97/(42+33)(como cabía esperar). Y así sucesivamente con 3 símbolos %%% 4 símbolos %%%% o más. Podemos sumar fracciones: > 1/2+1/3; 5 6 > fin; fin Nota: la linea anterior "fin;" es una instrucción en la que sólo se escribe la palabra "fin" sin realizarse ningún cálculo ni ninguna otra operación. Su utilidad radica en el hecho que al realizar la última operación indicada, MAPLE suele pasar directamente al comando siguiente sin dejar visible el resultado de la misma operación. Para obviar este inconveniente se escribe la instrucción fin (cualquier otra palabra sería igualmente válida, por ejemplo: pausa, etc.) obligando así a MAPLE a detenerse en ella. Comando evalf( ) > restart: Otra operación que se puede realizar fácilmente con MAPLE es la potenciaición. Para ello MAPLE utiliza el símbolo ^ o ** (potenciación) Así para elevar el número 31 a la potencia 6 se escribe: 3 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid > 31^6; 887503681 > 31**6; 887503681 Por defecto, Maple utiliza aritmética exacta. Ejemplo: si dividimos dos números enteros, Maple presenta un resultado exacto: > 4/2;325/778; 2 325 778 Mediante el comando evalf podemos evaluar el resultado en aritmética de coma flotante, lo que permite obtener un resultado decimal de "n" dígitos: > evalf(%); 0.4177377892 Por defecto, el número de dígitos utilizados en coma flotante es diez. El mismo comando evalf permite especificar el número de dígitos con el que queremos obtener un resultado en forma numérica. Veamos cómo obtener la proximación de 25 dígitos decimales de la fracción 325/778. > evalf(%%,25); 0.4177377892030848329048843 Otra forma de forzar la aritmética de coma flotante consiste en escribir el punto (decimal) al final de alguno de los números que intervienen en la operación. Por ejemplo: > 325./778.; 0.4177377892 En resumen, la aritmética de coma flotante se activa automáticamente al trabajar con números decimales: > 3./8; 3/8; 0.3750000000 3 8 > fin; fin Asignación de valores "a un nombre" (variables). En primer lugar, debemos incidir en que MAPLE diferencia entre mayúsculas y minúsculas. Por lo tanto, a es distinto de A. Para asignar un valor (numérico o el resultado de una operación) a un nombre, se utiliza el símbolo de asignación que en MAPLE es representado por ":=". Este mismo símbolo de asignación se utilizará para asignar a un nombre expresiones, funciones, matrices, vectores, etc.... Por tanto el uso de este símbolo será muy frecuente al trabajar con MAPLE. En el ejemplo siguiente, al nombre "a" se le asigna el valor 13 y al nombre "A" se le asigna el valor 14: 4 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid > restart; > a:=13; A:=14; a := 13 A := 14 El valor que tenga asignado un nombre puede obtenerse sin más que escribir dicho nombre acabado en ;. Por ejemplo a y A tienen los valores: > a;A; 13 14 El valor asignado a un nombre (a partir de ahora al nombre correspondiente lo llamaremos variable) permanece sin alterarse hasta que o bien se le asigne a dicho nombre un nuevo valor o bien se ejecute el comando restart (con el que se "limpian" todos los valores asignados hasta entonces a las variables). Las variables también pueden combinarse mediante los operadores aritméticos antes señalados. Por ejemplo: > A-a; 1 A una variable también puedes asignarle un valor formado por una cadena de caracteres (sin espacios en blanco entre palabras): > pepito:=hola_soy_el_valor_dado_a_la_variable_pepito; pepito := hola_soy_el_valor_dado_a_la_variable_pepito > pepito; hola_soy_el_valor_dado_a_la_variable_pepito Nótese que la asignación de un valor a una variable se ha realizado utilizando el operador :=. La sintaxis "natural" a través del símbolo "=" no funciona pues MAPLE distingue entre el operador de asignación (:=) y la igualdad matemática (=). Esta última veremos más adelante que se uitiliza para definir ecuaciones, para comparar, .... Ejemplo: > B=13; b=14; B = 13 b = 14 > B-b; B−b Como no hemos utilizado desde hace un rato el comando restart, podemos preguntar el valor que tienen las variables hasta ahora usadas. Para ello, como ya dijimos anteriormente, basta con escribir su nombre seguido de ;: > a;A;b;B;pepito; 13 14 b B hola_soy_el_valor_dado_a_la_variable_pepito MAPLE incorpora muchas de las constantes comunes en matemáticas. Las constantes matemáticas e (base de los logarítmos neperianos), π (relacion 5 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid entre la longitud de una circunferencia y su diámetro) se representan como exp(1) y como Pi respectivamente. > exp(1); Pi; e π Si se desea obtener el valor numérico aproximado con 10 dígitos de las constantes anteriores puede utilizarse el comando evalf como sigue > evalf(%%);evalf(%%); 2.718281828 3.141592654 La unidad imaginaria se representa por la letra mayúscula I. > I; I El número de decimales de las expresiones, constantes y variables que se evalúen puede aumentarse o disminuirse indicando en el propio comando evalf el número de dígitos que se desea utilizar. Un ejemplo de ello se muestra a continuación: > evalf(exp(1),21); 2.71828182845904523536 Otra forma de trabajar permanentemente con el número de dígitos que se desee es utilizar el comando Digits como se ilustra a continuación: > Digits:=15; Digits := 15 > evalf(exp(1)); 2.71828182845905 > Pi; π > evalf(%); 3.14159265358979 > evalf(%%,45); 3.14159265358979323846264338327950288419716940 > fin; fin Funciones trigonométricas, logarítmicas y raíces. > restart; Las funciones seno, coseno, logaritmo neperiano, logaritmo en base n, y raíz cuadrada se expresan utilizando la siguiente sintaxis: sin( ) , cos( ), log( ) o ln( ), log[n]( ), sqrt( ) En las funciones trigonométricas los argumentos se consideran dados en radianes (y no en grados): El seno de un ángulo de x radianes se obtiene mediante sin(x) > sin(Pi/8); π sin⎛⎜⎜ ⎟⎟⎞ ⎝8⎠ > evalf(%); 0.3826834325 6 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid El coseno de un ángulo de x radianes se obtiene mediante cos(x) > cos(Pi/4); 2 2 > evalf(%); 0.7071067810 La tangente de un ángulo de x radianes se obtiene mediante tan(x) > tan(Pi/3); 3 > tan(Pi/6); 3 3 > evalf(%); 0.5773502693 La secante se calcula como sec(x), la cosecante como csc(x) y la cotangente como cot(x): > sec(2.254);csc(Pi/2);cot(1.); -1.584080920 1 0.6420926159 Las funciones trigonométricas inversas (arcoseno, arcocoseno, arcotangente, ....) se utilizan con la misma sintaxis pero precediendo el comando del prefijo arc. El valor que devuelven se proporciona en radianes. Por ejemplo: > arcsin(1/2); arcsin(-1/sqrt(2)); arccos(1/sqrt(2)); arccos(-1); arctan(-infinity); π 6 π − 4 π 4 π π − 2 Observa que, al igual que sucede en las calculadoras de bolsillo, los argumentos reales en las funciones trigonométricas inversas implementadas en MAPLE conducen a resultados que se encuentran sólo en 2 cuadrantes de referencia. Más concretamente los argumentos devueltos por las funciones arcsin y arctan se encuentran siempre en el intervalo [- Pi/2, Pi/2] y por la función arccos entre [0 y Pi]. Pero hay infinitos ángulos más que tienen esos valores del seno, coseno o tangente. 7 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid Si el argumento de una función trigonométrica inversa es superior a 1, MAPLE tabién evalúa la función pero, en ese caso,, devuelve un valor en el campo de los complejos. > arccos(2.); 1.316957897 I Obsérvese que el último valor es un numero imaginario. El logaritmo neperiano se expresa en MAPLE como: > ln(2); ln( 2 ) > evalf(%); 0.6931471806 Alternativamente se puede usar la forma > log(2); ln( 2 ) > evalf(%); 0.6931471806 Para calcular el logaritmo en base n utilizaremos el comando log[n]. Por ejemplo, para expresar el logaritmo en base 2 escribiremos: > log[2](8); 3 > evalf(%); 3. El logaritmo decimal puede usarse en MAPLE como caso particular del comando anterior, o podemos escribiendo log10( ): > log10(10000); 4 > evalf(%); 4. La raíz cuadrada se expresa mediante el comando sqrt( ): > sqrt(5); 5 > evalf(%); 2.236067977 Observa distintas maneras de obtener la raíz cuadrada y la diferencia en la forma de expresar los resultados: > sqrt(36); sqrt(37); sqrt(37.); 37**(0.5); 37**(1/2); 6 37 6.082762530 6.082762530 37 8 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid Conviene indicar que las distintas funciones e instrucciones de MAPLE se pueden concatenar unas con otras, ejecutándose primero las más internas. Por ejemplo es equivalente el proceso: > sin(Pi/3); 3 2 > 2*%; 3 > log(%); 1 ln( 3 ) 2 > sqrt(%); 1 2 ln( 3 ) 2 > evalf(%); 0.7411519035 que escribir en una sola línea: > evalf(sqrt(log(2*sin(Pi/3)))); 0.7411519035 > fin; fin Variables y funciones. Para asignar un valor o una expresión a una variable, como ya hemos visto anteriormente, se emplea el símbolo :=. > A:=35; A := 35 Para examinar el valor que tiene asignado una variable, solo hay que escribir su nombre: > A; 35 A la variable A se le ha asignado el valor 35, valor con el que permanecerá a lo largo de la sesión a menos que se le asigne otro valor o se le "desasigne". > 5*A+18; 193 Si se pregunta por el valor de una variable a la que no se le ha asignado valor, MAPLE nos devuelve el nombre de dicha variable: > B; B > B:=1.765; B := 1.765 > B; 1.765 Para desasignar a una variable el valor que tenga asignado, escribiremos su nombre entre comillas simples: 9 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid > A:='A'; A := A > A; A Debe advertirse que algunos nombres no pueden asignarse a nombres de variables (pues dichos nombres ya están utilizados en el programa MAPLE para ciertas funciones predefinidas). Es el caso de los nombres sin, cos, exp, ...: > cos:=17.; Error, attempting to assign to `cos` which is protected > exp:=12*x; Error, attempting to assign to `exp` which is protected o de otros nombres tales como I, D, Pi, .... > I:=7.5; Error, illegal use of an object as a name > D:=12.5*cos(x); Error, attempting to assign to `D` which is protected > Pi:=exp(x); Error, attempting to assign to `Pi` which is protected Sería largo dar una lista de todos los nombres que MAPLE "reserva" para su uso. De todas formas no debes preocuparte por ello pues si intentas usarlos MAPLE te responderá con un mensaje (como los aparecidos en los ejemplos anteriores) indicando que ese nombre no puede utilizarse pues está "protegido". Pero pasemos ya a examinar cómo pueden definirse funciones en MAPLE. Esencialmente existen tres formas de usar funciones. A) La primera forma es definir la función como si de una variable se tratase escribiendo la fórmula que la define a la derecha del símbolo de asignación :=. Propiamente, de esta forma no se define una función sino que simplemente se asigna un nombre a la expresión que tiene la función. Supongamos que queremos analizar la función dada por f(x)=x^3. Podemos proceder de la siguiente forma: > f:= x^3; f := x3 El comando anterior define la expresión y podemos comprobar que la representa si escribimos: > f; x3 Con el comando subs podemos evaluar esta expresión para un valor determinado. La sintaxis a utilizar es: subs(variable = valor, función que contiene a la variable.). Por ejemplo: > subs(x=6,f); 216 10 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid Habiendo definido f de la forma anterior (como una fórmula), no tienen sentido las expresiones f(x)o f(6), tal como la representamos usualmente; por ello, Maple no la entiende. Veamos lo que resulta: > f(x); x( x ) 3 > f(6); x( 6 ) 3 No obstante, cuando tenemos una expresión podemos convertirla en función podemos usar el comando de Maple unapply(expresión, variables_independientes). Supongamos que queremos convertir la expresión f en función; para ello podemos hacer lo siguiente: > f:=unapply(f,x); f := x → x3 Ahora ya podemos usar f como una función, evaluándola en la abscisa que deseemos: > f(6.3); 250.047 B) La primera forma Si queremos utilizar la notación matemática estándar, haremos uso del operador -> (símbolo “menos” seguido del símbolo “mayor que”) combinado con el operador de asignación para ponerle un nombre a la función. Por ejemplo: > f := x -> x^3; f := x → x3 es decir: f es la función que asocia a la variable independiente x el valor x^3. Esta notación es la que emplearemos usualmente para definir funciones. Ahora sí es entendida por Maple: > f(x); x3 Ahora tenemos > f; f > f(6); 216 es decir 6 elevado al cubo. Esta forma de definir funciones se generaliza al caso de varias variavles fácilmente. Por ejemplo podemos definir la siguienye función de dos variables (x e y): > g:=(x,y)->x*y-3.45*sin(x+y); g := ( x, y ) → x y − 3.45 sin( x + y ) que puede evaluarse para x=1.25 e y = -3.33 mediante: > g(1.25,3.33); 7.582310330 C) Existe una tercera forma de definir una función. Esta consiste en elaborar un procedimiento. Estudiaremos más adelante cómo definir procedimientos en 11 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid general, pero de forma simplificada podemos avanzar que un procedimiento, es un pequeño programa cuya estructura es: NOMBRE:= proc(variables de entrada, variables de salida) Instrucciones en las que se especifica cómo dar valor a las variables de salida utilizando para ello las variables de entrada así como otras variables locales end proc; En prácticas posteriores aprenderás a realizar procedimientos utilizando estructuras algorítmicas. De momento nos contentaremos con mostrarlos utilizando instrucciones muy simples. Por ejemplo para definir la función f(x) =x*cos(x) puedes hacerlo como sigue: > f:=proc(x) x*cos(x) end proc; f := proc(x) x×cos( x ) end proc > f(x); x cos( x ) > f(2); 2 cos( 2 ) Cualquiera de las formas anteriormente expuestas son utilizadas para definir funciones. > fin; fin Manipulación de expresiones algebraicas. > restart; Funciones básicas de Álgebra Lineal y uso de ( ), [ ] y { } En Maple los paréntesis ( ) son utilizados para: a) encerrar entre ellos los valores de las variables de una función, o b) encerrar entre ellos operaciones o las expresiones sobre las que actúa una determinada instrucción. Por ejemplo, la instrucción exp evalua la exponencial de lo que le sigue encerrado entre paréntesis: > v:=exp(17*a-4/5.); ( 17 a − 0.8000000000 ) v := e o, en la instrucción siguiente se ordenan las operaciones de una determinada expresión: > a:=2*(3+4)/(25+16.); a := 0.3414634146 El valor de la variable a es sustituido en la expresión v. Comprobémoslo: > v; 149.1388943 12 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid Pero MAPLE permite también trabajar con grupos de elementos. En este sentido conviene distinguir entre lo para MAPLE son CONJUNTOS y lo que para MAPLE son LISTAS. Los conjuntos son una secuencia no ordenada de expresiones, variables o valores (numéricos o de caracteres) u otro elementos, sin repeticiones y que se escriben encerrados entre llaves. MAPLE ordena los elementos del conjunto como estime más oportuno, sin respetar el orden en que fueron escritos los elementos del conjunto. Por ejemplo, puede definirse el conjunto C siguiente: > C:={1,3*x+25*y^2,alberto,-24, 16*x, -24, 42, alberto}; C := { -24, 1, 42, 3 x + 25 y2, alberto, 16 x } MAPLE ha eliminado los elementos repetidos (un "-24" y un "alberto") y los ha ordenado como ha estimado oportuno. Para MAPLE una lista es una secuencia ordenada de expresiones, variables o valores (numéricos o de caracteres) cuyos elementos se escriben encerrados entre corchetes. En este caso, MAPLE respeta el orden en que fueron escritos los elementos. Por ejemplo podemos definir la lista L siguiente: > L:=[1,3*x+25*y^2,alberto,-24, 16*x, -24, 42, alberto]; L := [ 1, 3 x + 25 y2, alberto, -24, 16 x, -24, 42, alberto ] Ahora MAPLE ha respetado el orden y no ha elimnado las repeticiones de algunos elementos. Para dirigirte a los elementos de una lista (o de un conjunto) que están entre el i-esimo y el j-ésimo elemento (ambos inclusive) puedes utilizar la instrucción: nombre_de_la_lista[i..j]. Por ejemplo, para referirnos a los elementos 2º, 3º y 4º de la lista L antes definida basta con escribir: > L[2..4] >; [ 3 x + 25 y2, alberto, -24 ] o los elementos 3º y 4º del conjunto C los obtendremos mediante: > C[3..4]; { 42, 3 x + 25 y2 } Si sólo deseamos referirnos a un elemento, basta con poner su índice entre corchetes: > L[3];C[5]; alberto alberto Una de las grandes ventajas de un sistema como MAPLE para realizar prácticas de álgebra con él ordenador es su facilidad para manipular expresiones algebraicas, que recuerda en cierto sentido, a cómo una calculadora nos permite trabajar con expresiones numéricas. Algunos comandos usuales para la manipulación de expresiones algebraicas son: 13 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid simplifica una expresión algebraica. expande una expresión. factoriza una expresión. resuelve un sistema de ecuaciones para un conjunto de incógnitas. Veamos algunos ejemplos de los comandos citados. > expand((x^2-4)*(2*x+5)*(3*x-1)*(x^4+x+1)); 6 x8 − 46 x5 + 39 x4 + 13 x7 − 16 x3 − 29 x6 − 81 x2 − 32 x + 20 > factor(%); ( x − 2 ) ( 2 x + 5 ) ( 3 x − 1 ) ( x + 2 ) ( x4 + x + 1 ) simplify( ): expand( ): factor( ): solve( ): Si queremos resolver un sistema de ecuaciones debemos encerrar entre llaves { } las ecuaciones y separar por comas las mismas dentro del comando solve( ). > solve({2*x-3*y=12,12*x+4*y=17}); -5 9 {y = , x = } 2 4 Una manera equivalente de realizar la operación anterior es definir las ecuaciones en primer lugar, y después resolver el sistema: > eq1:=2*x-3*y=12;eq2:=12*x+4*y=17; eq1 := 2 x − 3 y = 12 eq2 := 12 x + 4 y = 17 > solve({eq1,eq2}); -5 9 {y = , x = } 2 4 Igualmente las soluciones del sistema las podríamos haber asignado a una variable operando del siguiente modo: > sol:=solve({eq1,eq2}); -5 9 sol := { y = , x = } 2 4 Como ves, las llaves { } se utilizan para indicar a Maple que se trata de un conjunto (en este caso de ecuaciones). El conjunto de soluciones también es presentado entre llaves pues una lista. Cuando utilizamos varias expresiones entre llaves en MAPLE no importa el orden. Maple, al ir encerradas entre llaves varía su orden según vea que es más conveniente para resolverlas. Pero como cintrapartida también proporciona las soluciones en el orden en que las obtiene pudiendo este no coincidir con el orden en el que las explicitó el usuario. Por ejemplo, el último resultado de Maple V indicado arriba, es un conjunto de dos elementos, el primero es la ecuación x=9/4 y el segundo es la ecuación y=-5/2. La forma de seleccionar el primer elemento es mediante la siguiente sintaxis: sol[1] > sol[1]; -5 y= 2 14 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid El segundo elemento se obtiene como: > sol[2]; 9 4 Se puede observar que el resultado se presenta en forma de ecuación y en distinto orden al escrito incialmente en el comando solve. EL comando solve evalúa todas las soluciones de las ecuaciones, tanto las reales como las complejas, y en aritmética exacta. Por ejemplo para la siguiente ecuación cúbica: > eq:=x^2*(x^3+x-2)=0; eq := x2 ( x3 + x − 2 ) = 0 MAPLE proporciona las siguientes soluciones > solve(eq,x); 1 1 1 1 0, 0, 1, − + I 7 , − − I 7 2 2 2 2 observemos que las dos últimas son complejas conjugadas y que todas ellas se han calculado exactamente. Un comando similar es el comando fsolve, si bien este sólo proporciona soluciones reales y aproximadas con el número de dígitos que se esté utilizando (por defecto 10). > fsolve(eq,x); 0., 0., 1. Existen además dos comandos útiles en MAPLE para la manipulación de ecuaciones: lhs( ): left-hand side (lado izquierdo) x= rhs( ): right-hand side (lado derecho) > rhs(sol[1]); -5 2 > lhs(sol[1]); y Podemos utilizar el comando subs( ) para comprobar el resultado mediante la sustitución de la solución en las dos ecuaciones: > subs(sol,{2*x-3*y=12,12*x+4*y=17}); { 12 = 12, 17 = 17 } Hasta ahora hemos empleado tres símbolos distintos para agrupar elementos o construir grupos: ( ), { }, y [ ]. Se utilizan para diferentes propósitos y deben ser empleados cuando corresponde. Recuerda que: los paréntesis ( ) son utilizados para agrupar operaciones o para encerrar entre ellos los argumentos de las funciones, como en sin(Pi). las llaves { } se emplean para agrupar un conjunto de elementos, como en {x,y}. los corchetes se emplean para obtener un elemento de un grupo, como en sol[1]o para definir listas ordenadas. También son utilizados para 15 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid especificar la posición (o posiciones) de elementos de un un conjunto o una lista. Se verán, en prácticas siguientes, más ejemplos usando ( ),{ }, y [ ] > fin; fin Gráficos 2-D y comando plot( ) > restart; Maple dispone del comando plot( ) para representar la gráfica de funciones de una variable. Así, si la función f está definida en un intervalo [a,b], podemos representarla gráficamente mediante una de las siguientes instrucciones: plot (f,a..b,opciones) o plot(f(x),x=a..b,opciones). Veamos algunos ejemplos. Primero definimos una función. > f := x -> exp(-x)*sin(4*x); ( −x ) f := x → e sin( 4 x ) La función anterior se puede representar sin más que utilizar el comando plot como sigue: > plot(f); 16 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid MAPLE la ha dibujado. Pero la ha dibujado como el programa "ha querido": en el intervalo de abscisas [-10, 10]; en el intervalo de ordenadas necesario para que quepa todo el grafo representado; en el color que ha "preferido" MAPLE; con un grosor y estilo de línea para el grafo que ha "seleccionado" MAPLE; sin poner títulos al dibujo ni añadir etiquetas a los ejes; ..... ¿Pero de qué nos quejamos? ¿Cómo puede conocer MAPLE las caracteristicas que deseamos para el dibujo si no se las hemos comunicado?.Veamos como le podemos indicar a MAPLE las especificaciones de dibujo. Comenzamos por indicarle el intervalod e dibujo. Por ejemplo dibujemos la misma función f en el intervalo I=[0,6]. Para ello sólo tenemos que escribir: plot(f,rango de abscisas). El rango de abscisas se introduce separando el extremo izquierdo del derecho por dos puntos seguidos. > plot(f,0..6); También podemos dibujar la misma curva limitando el valor que pueden tomar las ordenadas " y" entre los valores ymin e ymax para la variable y. Esto lo expresaremos diciendo que representamos la función en la ventana de dibujo [xmin, xmax] x [ymin, ymax]. Así con la instrucción siguiente se representa la función f(x) antes definida en la "ventana" [0, 6] x [-0.2, 0.4]: 17 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid > plot(f,0..6,-0.2..0.4); Si deseamos que se especifiquen "carteles" en el poner el nombre que deseemos para el eje de encerrado entre paréntesis y precediendo al rango igual. Si por ejemplo en la representación de la abscisas es el "tiempo" y deseamos que aparezca podemos escribir la siguiente sentencia: 18 eje de abscisas basta con abscisas tras la función y de abscisas seguido de un función anterior el eje de representado en el gráfico, Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid > plot(f(tiempo),tiempo=0..6,-0.2..0.4); Y si el eje de ordenadas fuese la "aceleración" y queremos que se escriba en el gráfico: > plot(f(tiempo),tiempo=0..6,acel=-0.2..0.4); 19 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid El comando plot( )admite diferentes especificaciones que permiten controlar el color de la curva (opción color), el grosor del trazo utilizado para representarla (opción thickness), el tipo de trazo (continuo, discontinuo, a puntos, combinando puntos y rayas mediante la opción linestyle), el tipo de ejes (opción axes), la escala (opción scaling), los rótulos y títulos (opciones title y legend), etc.... Por ejemplo, para representar la función f(x) antes definida en la ventana [0 , 6]x[-1 , 1] con trazo más grueso (especificación thickness) y en color azul (especificación color), con el título "Dibujo n" y con la leyenda "aceleración del móvil" podemos escribir: > plot(f(tiempo),tiempo=0..6,acelerac=-1..1, thickness=3, color=blue, title="Dibujo n", legend="aceleración del móvil"); Hay muchas otras opciones que se pueden introducir en el comando plot. Puedes consultarlas utilizando la opción Help de la barra de menús (o como más adelante te indicaremos). De momento puedes practicar con algunas de 20 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid ellas situando el ratón sobre la gráfica que desees, presionando una vez el botón izquierdo del ratón (con lo que el gráfico se enmarcará en un recuadro) y tras ello presionando el botón derecho del ratón. Con ello te aparece una ventana en la que tienes diferentes opciones sobre la forma de presentar el dibujo. Te dejamos a tí que las explores por tu cuenta. Pero, presta atención al hecho de que Maple no realiza el gráfico si se escribe "f" (en lugar de "f(nombre_argumento)") y tras ello el nombre_argumento precediendo al rango de abscisas. Como ejemplo > plot(f,tiempo=0..3); Error, (in plot) invalid plotting of procedures, perhaps you mean plot(f,0 .. 3) Si quieres dibujar el gráfico escribiendo sólo "f" (en lugar de "f(nombre_argumento)")) también debes omitir el nombre de la variable independiente a la hora de definir el intervalo de dibujo: > plot(f,0..3); Nótese que si hubiésemos definido la función a través de una expresión > g:=exp(sin(x)); sin( x ) g := e 21 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid entonces no habría problema con indicar el nombre de la variable independiente a la hora de dibujar: > plot(g,x=0..10); pero, en este caso, los tendrías si omites el nombre de la variable independiente ("x") a la hora de definir el intervalo: > plot(g,0..10); Warning, unable to evaluate the function to numeric values in the region; see the plotting command's help page to ensure the calling sequence is correct Plotting error, empty plot Finalmente, si utilizamos la siguiente sentencia, obtenemos también un gráfico vacío: > plot(f(x),0..3,-0.3..1); Warning, unable to evaluate the function to numeric values in the region; see the plotting command's help page to ensure the calling sequence is correct Plotting error, empty plot 22 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid En este caso deberíamos haber expresado x=0..3, y=-0.3..1 > plot(f(x),x=0..3,-0.3..1); La información de ayuda para el comando plot nos indica muchas opciones útiles para gráficos. > ?plot En la pantalla de información sobre los distintos comandos podrás encontrar numerosas opciones que ayudan a completarlos (title, numpoints, axes, etc...) Algunas las veremos durante las sesiones de prácticas. Otra forma de activar la ayuda de Maple consiste en escribir el comando del cual queremos tener información y marcar el mismo "clicando" dos veces con el boton izquierdo del ratón posicionado al comienzo del comando. Tras ello pulsa la tecla F1 > plot En una misma figura puedes realizar el gráfico de más de una función. Basta para ello que en el comando plot( ) incluyas los nombres de las funciones a representar entre llaves: 23 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid > plot({f(x),g},x=0..6); Otra forma de proceder para representar en una misma figura diferentes gráficas consiste en almacenarlas en variables diferentes. Por ejemplo: > dibu1:=plot(f(x),x=0..6,color=blue, legend="f"): dibu2:=plot(g,x=0..6,color=aquamarine,legend="g"): En las variables dibu1 y dibu2 anteriores están almacenados, en forma de lista, todos los datos que MAPLE necesita para representar los dibujos (si quieres verlos modifica las sentencias anteriores terminándolas en ";" en lugar de en ":") . Ya sólo nos falta saber qué hay que hacer para representarlos. Ello se hace con el comando display. Pero este comando no está disponible de forma inmediata al inicializar el programa MAPLE. Para que esté disponible debemos cargar la librería plots que contiene los "útiles" de dibujos bidimensionales. Puedes obtener información sobre esta librería mediante la ejecución del siguiente comando: > ?plots Básicamente existen dos maneras de usar la librería plots: 24 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid podemos cargar en memoria todas las rutinas contenidas en dicha librería mediante el comando with(plots), y a continuación usar la rutina deseada con la sintaxis: display( ) o bien, podemos usar directamente dicha rutina sin cargar todas las rutinas de la librería mediante la expresión:plots[display]({conjunto de gráficos}). Carguemos la librería: > with(plots): Warning, the name changecoords has been redefined y representemos nuestros dos dibujos: > display(dibu1,dibu2); Para introducir textos dentro de un gráfico, al margen de las opciones title o legend, podemos dibujar los textos usando el comando plots[textplot] (o simplemente textplot si, como es nuestro caso, ya se cargó la librería plots). A continuación presentamos un ejemplo que utiliza las rutinas plot, textplot y display. 25 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid > plot1 := plot(f,0..3): Hemos asignado a la variable plot1 el gráfico de la función f para una ventana de abscisas comprendida entre 0 y 3 > plot2 := textplot([0.7,0.8,`Experimentando con títulos de figuras`],align = RIGHT, color=brown): Hemos asignado a la variable plot2 el texto "Experimentando con títulos de figuras" - mediante la expresión textplot( )- situándolo en la posición de coordenadas x=0.7 e y = 0.8 (es decir hemos posicionado el texto con respecto al origen del sistema de coordenadas) , lo hemos alineado a la derecha y le hemos indicado que nos lo escriba en color aguamarina. > plots[display]({plot1,plot2}); # punto y coma En el proceso de almacenar gráficos con un nombre es importante finalizar las sentencias con dos puntos, ya que de otra forma (con punto y coma) al asignar a una variable un gráfico, se obtiene un listado definiendo la estructura de plot que se debe utilizar para realizar el gráfico. 26 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid El comando textplot ha sido utilizado para imprimir texto en el punto con las coordenadas ( 0.7, 0.8) y alinearlo a la derecha (en este caso) en un color determinado. Como se puede observar, el símbolo ` se utiliza para encerrar el texto a imprimir: `Experimentando con títulos de figuras`. Otro ejemplo de uso del comando display es el que sigue y en él se representan, en distinto color, las funciones x*x+1 y sen(x)+1, escribiendo en el color correspondiente la función que se dibuja: > f1:=x->x^2 +1; f1 := x → x2 + 1 > f2:=x->sin(x)+1; f2 := x → sin( x ) + 1 > p1:=plot(f1,0..2, color = brown, thickness=3): > p2:=plot(f2,0..2, color=green, thickness=2): > titulo1:=textplot([1.6,4.5,`x*x+1`],align = RIGHT, color=brown): > titulo2:=textplot([1.7,2.2,`sen(x)+1`],align = RIGHT, color=green): > display(p1,p2,titulo1,titulo2); > fin; fin 27 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid Variables subindicadas, vectores y matrices > restart; En MAPLE pueden utilizarse también vectores y matrices (y en general variables subindicadas). La forma general de definir una variable subindicada es a través del comando: array(rango primer índice, rango 2º índice, ..., rango k-ésimo índice) Por ejemplo: > C:=array(-1..2,0..3,1..5); C := array( -1 .. 2, 0 .. 3, 1 .. 5, [ ] ) La variable C representaría una variable que depende de tres índices (lo que llamaremos una hipermatriz de tres índices). El primero de ellos toma valores comprendidos entre -1 y 2. El segundo toma valores comprendidos entre 0 y 3. Finalmente el tercero de los índices puede tomar valores comprendidos entre 1 y 5. En alguna de las prácticas posteriores utilizaremos variables subindicadas generales y aprenderemos más sobre ellas. De momento nos centraremos simplemente en dos tipos de variables subindicadas: - los vectores: variables subindicadas con un solo subíndice cuyo valor inferior es 1 - las matrices: variables subindicadas con 2 subindices en los que el valor inferior de cada uno de ellos es 1. VECTORES Puedes definirlos como un caso particular del comando array( ) La instrucción siguiente define un vector v de 3 componentes: > v:=array(1..3); v := array( 1 .. 3, [ ] ) Si quieres dar valor a las componentes del vector puedes añadir tras la especificación de dimensiones los valores de cada elemento encerrados entre corchetes y separados por comas > v:=array(1..3,[1.5,2, -3]); v := [ 1.5, 2, -3 ] Para dirigirte a una componente cualquiera de un vector basta con escribir el nombre del vector seguido del valor del índice de la componente encerrado entre corchetes: > v[1]; 1.5 Otra forma de definir un vector es con el comando vector( ). Con este comando sólo debes especificar el valor superior del índice (pues, a diferencia de lo que sucede con el comando array( ), ahora se asume que el inferior es siempre 1). 28 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid > w:=vector(3,[-1, 2.5, -3.3]); w := [ -1, 2.5, -3.3 ] > w[3]; -3.3 MATRICES Las matrices también puedes definirlas como caso particular del comando array() > A:=array(1..2,1..3); A := array( 1 .. 2, 1 .. 3, [ ] ) Si quieres dar valor a los elementos de la matriz puedes añadir tras la especificación de dimensiones los valores de cada elemento encerrando los valores de los elementos de cada fila entre corchetes separados por comas y separando cada fila de la siguiente por una coma y encerrando todas las filas entre corchetes. Veámoslo con algún ejemplo: > A:=array(1..2,1..3,[[2,-7,4],[5,8,-11]]); 2 -7 4⎤ A := ⎢⎢⎡ ⎥⎥ ⎣5 8 -11⎦ > B:=array(1..3,1..3,[[1, 2, 3], [4, 5, 6], [7, 8, 9]]); ⎡ 1 2 3⎤ ⎢ ⎥ B := ⎢⎢ 4 5 6⎥⎥ ⎢⎢ ⎥⎥ ⎣ 7 8 9⎦ Otra forma de definir matrices es con el uso del comando matrix( ). En este caso le valor inferior de cada índice se asume como 1 y no debe especificarse. Tampoco es necesario (aunque puede hacerse) separar ahora las filas de las matrices. Veamos algún ejemplo: > AA:=matrix(2,3,[2,-7,4,5,8,-11]); 2 -7 4⎤ AA := ⎢⎢⎡ ⎥⎥ ⎣5 8 -11⎦ > BB:=matrix(3,3,[[1, 2, 3], [4, 5, 6], [7, 8, 9]]); ⎡ 1 2 3⎤ ⎥ ⎢ BB := ⎢⎢ 4 5 6⎥⎥ ⎥⎥ ⎢⎢ ⎣ 7 8 9⎦ Operaciones elementales entre vectores y matrices Los operadores aritméticos para las operaciones matriciales y vectoriales son los siguientes: - Suma + - Resta - Producto de matrices &* - Producto de escalar por matriz * 29 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid Estos operadores producen un resultado que se deja indicado. Si se quiere ver debe utilizarse el comando evalm( ) referido a la operación correspondiente. Ilustrémoslo con algunos ejemplos: > A+AA; A + AA > evalm(%); 8⎤ ⎡ 4 -14 ⎥⎥ ⎢⎢ ⎣10 16 -22⎦ > 7*B; 7B > P:=evalm(%); ⎡ 7 14 21⎤ ⎥ ⎢ P := ⎢⎢28 35 42⎥⎥ ⎥⎥ ⎢⎢ ⎣49 56 63⎦ > evalm(A&*B); 1 0⎤ ⎡ 2 ⎥⎥ ⎢⎢ ⎣-40 -38 -36⎦ > evalm(BB&*v); [ -3.5, -2.0, -0.5 ] > evalm(w&*B); [ -14.1, -15.9, -17.7 ] Obviamente las operaciones anteriores sólo serán realizadas si las dimensiones de las matrices y vectores correspondientes son compatibles. En caso contrario MAPLE nos informa del errror debido a la incompatibilidad de dimensones > evalm(A&*AA); Error, (in linalg[multiply]) non matching dimensions for vector/matrix product > evalm(A+B); Error, (in linalg[matadd]) matrix dimensions incompatible Otras operaciones clásicas matriciales Otras operaciones típicas del álgebra matricial (inversión, trasposición, cálculo de determinantes, etc...) pueden realizarse con MAPLE si se activa la librería linalg en la que están recogidas numerosos procedimientos del álgebra lineal. Para ello debe escribirse with(linalg). > with(linalg): Warning, the protected names norm and trace have been redefined and unprotected Ahora podemos hallar el determinante de una matriz cuadrada con el comando det( ): 30 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid > P:=matrix(4,4,[1.1, -2, 4.5, 2.1, -2.,sqrt(3.),11., 1sqrt(2.),0.,4.2,2., 1.,1.,2.25, 1/4.,-3]); 1.1 -2 4.5 2.1 ⎡ ⎤ ⎢ ⎥ ⎢ -2. 1.732050808 ⎥ 11. -0.414213562 ⎢ ⎥ P := ⎢ ⎥ ⎢ 0. ⎥ 4.2 2. 1. ⎢ ⎥ ⎢ 1. ⎥ 2.25 0.2500000000 -3 ⎣ ⎦ > dP:=det(P); dP := 442.5341969 hallar inversas de matrices cuadradas con el comando inverse( ) : > P1:=inverse(P); -0.1628800678 0.07664039009 0.2915596279 ⎤ ⎡ 0.3478911241 ⎢ ⎥ ⎢-0.05497524777 -0.01485760885 0.2015664618 0.03075755484⎥ ⎢ ⎥ P1 := ⎢ ⎥ ⎢ 0.07495860885 0.06136248948 -0.01118437560 0.04027050923⎥ ⎢ ⎥ ⎢ 0.08097882295 -0.06032302178 0.1757896118 -0.2097227488⎥ ⎣ ⎦ hallar la traza de una matriz cuadrada con el comando trace( ) : > trace(P);trace(P1); 1.832050808 0.1121263908 hallar los valores propios de una matriz cuadrada con el comando eigenvalues( ) : > eigenvalues(P); 8.608648519, -4.578634291 + 0.7931481829 I, -4.578634291 − 0.7931481829 I, 2.380670870 hallar los vectores propios de una matriz cuadrada con el comando eigenvectors( ) que nos proporciona para cada valor propio su multiplicidad y una base del subespacio de vectores propios a él asociado. > eigenvectors(P); [ -4.578634289 + 0.7931481837 I, 1, { [ 1.314508758 + 0.7013901454 I, 1.153646261 + 0.1221508983 I, -0.4942247681 + 0.0853964122 I, -1.661722312 − 1.466819024 I ] } ], [ -4.578634289 − 0.7931481837 I, 1, { [ 1.314508758 − 0.7013901454 I, 1.153646261 − 0.1221508983 I, -0.4942247681 − 0.0853964122 I, -1.661722312 + 1.466819024 I ] } ], [ 8.608648498, 1, { [ 0.1577165174, 0.7967066662, 0.5334920921, 0.1794937229 ] } ], [ 2.380670869, 1, { [ -1.185796880, 0.0316604336, -0.2219209106, -0.2174526487 ] } ] trasponer una matriz con el comando transpose( ) : > AT:=transpose(A); 5⎤ ⎡2 ⎢ ⎥ AT := ⎢⎢-7 8⎥⎥ ⎢⎢ ⎥⎥ ⎣ 4 -11⎦ 31 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid o hallar el rango de una matriz con el comando rank( ) : > rank(P1);rank(B);rank(AA); 4 2 2 También puedes realizar operaciones con vectores que están programadas en la librería linalg. Por ejemplo puedes calcular el producto escalar de vectores con el comando dotprod( ): > uw:=dotprod(v,w); uw := 13.4 o el producto vectorial de vectores de 3 componentes con el comando > crossprod(v,w); [ 0.9, 7.95, 5.75 ] > crossprod(w,v); [ -0.9, -7.95, -5.75 ] Muchos otros comandos se encuentran en la librería linalg de MAPLE. Algunos de ellos los utilizaremos en prácticas posteriores. > fin; fin 32 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid EJERCICIOS PROPUESTOS Primer ejercicio propuesto (Gráficas de funciones de una variable y resolución de ecuaciones). > restart; > with(plots):with(linalg): a)Representa, para valores del argumento "x" comprendidos entre 0 y 20, en un una misma gráfica los grafos de las funciones: f(x) = exp(sen(x)) g(x) = arcotangente(x) El grafo de la primera de las funciones debe dibujarse en color rojo y el grafo de la segunda función en color azul. b) Dibuja, en el intervalo [-Pi, Pi] y para valores comprendidos entre -5 y 5, la gráfica de la función f(x) definida en el apartado anterior y en verde, la de la función h(x) = 7.x. A la vista de las gráficas ¿cuántas soluciones tendrá la ecuación f(x) = h(x)?. Determina, si existe, alguna de ellas. c) Sabiendo que el comando sum(i*i, i = 0..n) realiza la suma de los cuadrados de los n primeros enteros no negativos, define la función, de argumento entero no negativo, dada por: n f := n → ∑ i2 i=0 y dibújala entre 0 y 10. Segundo ejercicio propuesto (Operaciones matriciales). 1º) Define las siguientes matrices y vectores: −1.732050808 4.481689070⎤ 1.2 ⎡ ⎢ ⎥ ⎥ −4. A := ⎢⎢1.945910149 1.618033988 ⎥ ⎢⎢ ⎥⎥ .8660254037 −9. 1.44 ⎣ ⎦ ⎡1 ⎢ ⎢2 B := ⎢⎢ ⎢3 ⎢ ⎢4 ⎣ 5 9 13⎤ ⎥ 6 10 14⎥⎥ ⎥ 7 11 15⎥ ⎥ 8 12 16⎥⎦ 1.1 −1. ⎤ ⎡ 0. ⎢ ⎥ C := ⎢⎢3.27 22.3 2.73⎥⎥ ⎢⎢ ⎥⎥ ⎣ 4.2 −7. 5.4 ⎦ v := [ 1., −2., 4. ] 33 Programación y Métodos Numéricos. C. Conde, A. Hidalgo y A. López Práctica 1: Introducción a MAPLE ETSI Minas de la Universidad Politécnica de Madrid ⎛1⎞ ⎡ ⎜⎜ ⎟⎟ ⎤ ⎝2⎠ ⎥ ⎢ ⎛⎜⎜ 1 ⎞⎟⎟ ⎢ ⎝ 2 ⎠ ( −2 ) 1 2 ⎥ ⎥ w := ⎢⎢ 2 , e , 2 ⎥⎦ ⎣ u := [ −1., 2.2, 3.17, 1.25 ] 2º) Calcula las matrices: P = A + C, Q = A - C, R = A.C y S = 7.C 3º) Calula las inversas de P, Q y B. Determina el rango de estas tres matrices. 4º) Halla el vector a = A.v y el vector c = w.C y determina el producto escalar de los vectores a y c. Determina también el producto vectorial de a por c. 5º) Determina el vector b = u.B y calcula, si es posible, el producto escalar de los vectores a y b. 6º) Evalúa los determinantes de las matrices A, B y C. Calcula también sus matrices traspuestas. 7º) Calcula los valores y vectores propios de la matriz A. NOTA: Opérese con 8 dígitos significativos. 34