DEPARTAMENTO DE MATEMÁTICA APLICADA Y ESTADÍSTICA GRADO EN INGENIERÍA MECÁNICA (GRUPOS 2 y 3) MATEMÁTICAS I CUADERNO DE PRÁCTICAS DE ORDENADOR CURSO 2014/15 Profesores: Pedro Luis Gómez Sánchez José Juan Aparicio Pedreño PRÁCTICA 1: Manejo del programa wxMaxima El programa Maxima es una herramienta muy útil para realizar cálculos matemáticos. Puede utilizarse como calculadora científica. Es capaz de manipular números enteros, racionales, reales y complejos, realizando numerosas operaciones con ellos. Además permite definir funciones, realizar operaciones con símbolos, trabajar con matrices y vectores, resolver ecuaciones, calcular derivadas e integrales, representar funciones, etc. wxMaxima es una interfaz gráfica de Maxima, que permite el manejo de muchos de los comandos de Maxima con el uso del ratón. El código fuente y los manuales de Maxima son de libre acceso desde la página web http://maxima.sourceforge.net . La descarga de la interfaz gráfica wxMaxima puede realizarse desde la página web http://wxmaxima.sourceforge.net/wiki/index.php/Main_Page . Cuando queremos evaluar una expresión con wxMaxima, una vez escrita hay que pulsar la tecla INTRO del teclado numérico (en la parte inferior derecha del teclado), o bien la combinación simultánea de las teclas SHIFT+ENTER (se mantiene pulsada la tecla SHIFT y después se pulsa ENTER). Entonces el programa ejecuta la expresión y le pone un contador de entradas de la forma % i (que precederá a la expresión), y si tiene que mostrar el resultado de la evaluación éste va precedido por un contador de salidas de la forma % o. Así, para la primera evaluación pondrá ( % i 1 ) y ( % o 1 ) en los datos de entrada y salida, respectivamente; para la segunda evaluación pondrá ( % i 2 ) y ( % o 2 ), y así sucesivamente. Todos estos datos de entrada o salida wxMaxima los guardará en la memoria durante toda la sesión, incluso aunque sean borrados de la pantalla. Ejemplo 0.1 Ejecutar las siguientes sentencias (en el primer cálculo wxMaxima necesita cargar el núcleo del programa, con lo que tardará unos segundos) 4−6 4∗ 8 5 + 18 Nota 0.2: Las sentencias pueden ser ejecutadas de una en una (cada vez que se escriba una se ejecuta) o todas de una vez en una misma línea separadas por punto y coma, o en distintas líneas acabando cada una de ellas en punto y coma y separando las líneas por Enter. Para modificar en pantalla una expresión, en primer lugar necesitamos situarnos en el lugar adecuado, para lo cual se puede utilizar el ratón o las flechas del teclado. Después pueden eliminarse algunos caracteres usando las teclas SUPR o ”←”. 2 Incluso pueden ser aprovechadas expresiones ya escritas para no tener que volver a copiarlas si vamos a utilizar otra similar. Esto puede hacerse marcando en negrita la expresión que queramos copiar, mediante el ratón (pinchando a un lado de la expresión y manteniendo pulsado el botón izquierdo del ratón hasta llegar al otro lado de la expresión, donde soltaremos el botón) o mediante la tecla SHIFT (poniendo el cursor a un lado de la expresión, teniendo pulsada la tecla SHIFT, se lleva el cursor, bien con el ratón o con las teclas de dirección, al otro lado de la expresión); después se hace una copia de la expresión con las teclas CONTROL+C, o bien con el botón derecho del ratón seleccionando la opción COPY (o con la opción COPY del menú EDIT de la parte superior de la ventana). Una vez hecha una copia de esto se coloca el cursor en el lugar donde se quiere poner lo que se ha copiado y se pulsa CONTROL+V, o bien con la opción PASTE del botón derecho del ratón o del menú EDIT. Existen otras formas de realizar lo anterior y otras variantes, que pueden adquirirse con la práctica, pero no es nuestro propósito adquirir dominio en esta faceta. 1 Operaciones aritméticas elementales Los operadores aritméticos son + − ∗ / ˆ Es conveniente que se tengan bien localizadas las teclas en las están cada uno de estos símbolos; todos, excepto ˆ se pueden encontrar también en el teclado numérico, que está en la parte derecha del teclado. Algunos de ellos precisan de la tecla SHIFT para su pulsación (esto no ocurre cuando se utiliza el teclado numérico): ∗ / ˆ Además, hay que tener presente que ˆ no aparece en la pantalla hasta escribir otro carácter. Las operaciones que representan son: x + y suma x − y resta x*y producto x/y división xˆy potencia Para combinar estos operadores han de tenerse en cuenta los criterios de prioridad en matemáticas: En un primer nivel de prioridad está la potencia; en un segundo nivel están el producto y el cociente; finalmente aparecen la suma y la resta. Si dos operadores tienen la misma prioridad se evalúa primero el que figura a la izquierda y después el de la derecha. Para cambiar el orden de ejecución de las operaciones pueden utilizarse paréntesis. Ejemplo 1.1 Ejecutar las siguientes sentencias: 1) 2*4+3 2) 2*(4+3) 3) (2*4)+3 4) 6/3−2 5) 6/(3−2) 6) (6/3)−2 7) 2*3ˆ2 8) (2*3)ˆ2 9) 2*(3ˆ2) 10) b/c+aˆd−e 11) b/(c+a)ˆd−e 12) b/(c+a)ˆ(d−e) 13) (b/c+a)ˆd−e 14) b/(c+aˆd−e) 15) (b/c+a)ˆ(d−e) 3 Ejercicio 1.2 Realizar las siguientes operaciones (expresadas medianta nuestra notación habitual) con wxMaxima: 3 a) (1 2) 3 8 b) 8 42 3 c) (1 7 5 2 5 ) 2 d) 3 4 67 4 ( ) 7 3 42 3 4 23 3 2 Observación 1.3 En general, cuando se ponga Ejemplo deberán escribirse literalmente las expresiones que figuran. Cuando se ponga Ejercicio las expresiones figurarán escritas del modo habitual matemático, y el alumno deberá pasarlas al lenguaje de wxMaxima. Para aprovechar sentencias anteriores y no tener que volver a escribirlas enteramente puede utilizarse también el recurso que vamos a ver a continuación. Como ya hemos comentado anteriormente Mathematica guarda en la memoria todas las entradas y salidas en una misma sesión. Pues bien, podemos referirnos a éstas gracias al símbolo %. Este símbolo hace referencia a la última salida. Así por ejemplo, si ponemos %+8 el resultado será el inmediatamente anterior más 8. Si queremos hacer referencia a la entrada etiquetada con 23, escribiremos %i23, y si escribimos %o7, estaremos haciendo referencia a la salida con etiqueta 7. Ejemplo 1.4 Ejecutar las siguientes sentencias: 1) 6) 4-7 %o3 2) 7) 5*3 3) %i4 +%o6 9/3 4) % 5) %i4 Ejemplo 1.5 Ejecutar las siguientes sentencias: 1) 6) 2*4+3 2) 5*b – 2*% %*5 7) 3) 6/3–2 30-%i4 4) 6/(%-2) 5) 11*a Ejercicio 1.6 1) Realizar la operación (3.4 5) 5 · a 2) Multiplicar la expresión anterior por 4. 30 15 9 3) Realizar la operación ( ) 4 a ( ) 2 16a 4 10 12 4) Sumar ahora las dos últimas expresiones. 5) Escribir la expresión 3*x-2*y+5*x*y 6) Escribir ahora la expresión 2*x+3*y-4*y*x 7) Sumar ambas expresiones. Observación 1.7 (Abortar un cálculo) Es posible que Maxima tarde demasiado en hacer algún cálculo. No es lo habitual, pero en alguna ocasión puede suceder que la operación sea extremadamente compleja, o incluso que nos hayamos equivocado al escribirla y 4 casualmente se transforme en algo que le haga al programa dar demasiadas vueltas. Cuando queremos detener alguno de estos cálculos bastará con seleccionar la opción Reiniciar Maxima del Menú Maxima, de la parte superior de la pantalla. A continuación en el menú Celda se deberá seleccionar la opción evaluar celda o evaluar todas las celdas para continuar las operaciones que hayan quedado pendientes. 2. Números wxMaxima puede operar con números: Racionales: Si se hacen operaciones con fracciones el resultado suele venir en forma de fracción. Comprobarlo en el siguiente ejemplo (2/3-3/5)*5/2 Irracionales: El programa trabaja con sus expresiones. Comprobarlo en el siguiente ejemplo 2ˆ(1/2) . Aproximación: En la mayoría de las ocasiones interesa tener una aproximación decimal del resultado. Tenemos tres formas de conseguirlo: a) Escribiendo float(número) b) Escribiendo número,numer c) Escribiendo bfloat(número), que nos dará una expresión decimal larga de número. También podemos en el menú Numérico utilizar la opción Conmutar salida numérica, que deberemos cambiar si queremos continuar con el cálculo simbólico. Para conseguir una aproximación con un determinado número de decimales, se ha de escribir bfloat(número) y antes de ejecutar el resultado se indica el número de decimales en la opción Establecer precisión del menú Numérico. Cuando se pretende obtener un gran número de cifras en el resultado, y que aparezcan todas en pantalla, debemos en el menú de Maxima pinchar en “cambiar pantalla 2D” y elegir ascii . En este modo de pantalla la apariencia de ciertas operaciones (raíces, etc.) no es buena. Para recuperarla se debe volver al modo xml. Ejemplo 2.1 Ejecutar las siguientes sentencias: a) (2/3-3/5)*5/2 e) bfloat(2ˆ150) b) float((2/3-3/5)*5/2) precisión de 40 dígitos. f) c) (2/3-3/5)*5/2,numer float(2ˆ150) h) (2/3-3/5)*5/2 g) i) bfloat(2ˆ150) con float(%) Observación 2.2 Si en un resultado pone, por ejemplo, multiplicado por 10 elevado a 45. d) 2ˆ150 j) bfloat(%i5) 1.34b45 significa 1,34 5 Ejercicio 2.3 Obtener los siguientes números: a) 2 con 47 cifras significativas c) 3 b) 3 8 con 60 cifras significativas 35 con 80 cifras significativas 3 Notación y símbolos. Insertar texto. wxMaxima, como la mayoría de los programas informáticos, es muy estricto con las sentencias que se le dice que ejecute. Un pequeño cambio en una expresión y el resultado puede ser muy distinto, o bien, el programa puede no entender la sentencia. He aquí unas situaciones en las que conviene hacer hincapié. a) Mayúsculas y minúsculas: el programa distingue unos caracteres de otros. Los comandos propios del programa empiezan por minúsculas. b) Espacios en blanco: Si un comando o una expresión esta compuesto por varias palabras, o por una palabra de varias letras, no hay que dejar espacios en blanco entre ellas. c) Paréntesis y corchetes: los corchetes definen listas de elementos, vectores y las matrices se definen utilizando un paréntesis que encierra varios corchetes (vectores) con listas de la misma longitud. Los paréntesis también agrupan e indican prioridad de operaciones. Además los paréntesis delimitan argumentos de las funciones. . Estos dos tipos de objetos pueden ponerse las veces que sean necesarias, pero nunca pueden cambiarse unos por otros. Los corchetes (al igual que las llaves), se obtienen manteniendo pulsada la tecla AltGr y pulsando después la correspondiente tecla [] {}. d) Para insertar texto, seleccionar en el menú “celda” la opción “nueva celda de texto”, o “nueva celda de título” , etc., según lo que se necesite. 4 Algunas constantes y funciones propias de wxMaxima El programa lleva incorporadas numerosas constantes y funciones propias. 4.1 Constantes Algunas constantes de wxMaxima son: %pi Es el número habitualmente designado por π, y cuyo valor aproximado es 3.1416 %e Es el número habitualmente designado por e, y cuyo valor aproximado es 2.71 %i Es la raíz imaginaria de 1 , habitualmente designada por i infinity También denotado por inf. Habitualmente denotado por ∞ . pinf (plusinfinity) + ∞ . minf (minusinfinity) -∞ . Nota: Hay que tener en cuenta que las funciones trigonométricas usuales trabajan por defecto con el argumento en radianes. Si α es la medida en grados sexagesimales de un 6 ángulo, para hallar sus razones trigonométricas habremos de utilizar como argumento a (π/180)*α. Ver Observación 4.2 y el Ejemplo 4.3. Ejemplo 4.1 Ejecutar las siguientes sentencias : a) d) f) %eˆ(1/2) float(3*%pi^2 ) b) float(%eˆ(1/2)) e) bfloat(3*%pi^2) con 80 dígitos. (%i-3)*(%i^3)-8*%i g) c) bfloat(%eˆ(1/2)) con 35 dígitos. ratsimp((%i-3)*(%i^3)-8*%i) 4.2 Funciones A continuación ponemos algunas de las funciones más importantes que wxMaxima lleva incorporadas (a la izquierda figura la función en el lenguaje del wxMaxima y a la derecha tal y como nosotros la escribimos habitualmente): log(x) = ln x exp(x) = e x sqrt(x) = x sin(x) = senx cos(x) =cos x tan(x) = tan x asin(x) = arcsenx acos(x) = arccosx atan(x)=arctanx abs(x) = Valor absoluto o módulo de x (según sea el número x real o complejo) entier(x) = parte entera ifactors(n) = factores primos del número natural n realpart(z) = Parte real de z imagpart(z) = Parte imaginaria de z conjugate(z)= Conjugado de z carg(z) = argumento de z Observación 4.2 Pueden hallarse el valor de las funciones trigonométricas tanto en radianes como en grados. Por ejemplo, para hallar el seno de π radianes pondríamos sin(%pi) y si lo hacemos en grados (que serían 180) deberíamos poner sin(180*(π/180)) . Maxima no tiene funciones específicas para los logaritmos en bases distintas a e. Para hallar el logaritmo en base a de x debemos escribir log(x)/log(a) . Ejemplo 4.3 Escribir las siguientes sentencias en Mathematica: a) e) h) k) sin(%pi/2) b) sin(90*(%pi/180)) c) sin(%pi/4) float(sin(45*(%pi/180)) f) cos(5*%pi/6) g) float(cos(150*(%pi/180))) i) cos(135*(%pi/180)) j) cos(135) l) float(cos(135)) d) sin(45*(%pi/180)) cos(150*(%pi/180)) float(cos(135*(%pi/180))) Observación 4.4 Observemos los 4 últimos apartados. En el i) y el j) se está calculando el coseno de 135 grados, de modo exacto o con decimales. En el k) y el l) se está calculando el coseno de 135 radianes, en primera instancia el programa lo deja indicado, pues no es exacto y al final lo calcula con decimales. 7 Ejercicio 4.5 Realizar las siguientes operaciones en Maxima. Debemos tener en cuenta que para que aparezcan todas las cifras decimales del apartado 9), tenemos en el menú “ Maxima” que pinchar en “cambiar pantalla 2D” y elegir ascii. 2) log 2 256 3) 5) sen 30 4) e 3 x 1) cos π/3 48 6) sen30º 7) |3 - 4i| 8) ln 0 9) Calcular e con 100 cifras decimales y 5 con 1000 10) Descomponer en factores primos 98609, 8760960 y 235970. 11) Dado el complejo (3+i)·(-4+6i) calcular la parte real, la imaginaria, el módulo y el argumento. 5 Variables y funciones Estos objetos nos van a permitir definir nuevas variables y funciones que podremos utilizar de la misma forma que las propias de Maxima. A este tipo de objetos hay que asignarle un nombre, que normalmente será una letra minúscula , o una letra seguida de un número, o dos o más letras seguidas. Es importante destacar que algo como xy será identificado por el programa como un solo objeto, una sola expresión. Si lo que pretendemos es expresar el producto del objeto x con el objeto y deberíamos poner x*y . Ejemplo 5.1 Ejecutar estos ejemplos, observando el resultado: a) b) c) d) e) 5*x +4*x+4*x-7*x-8*x+x3-5*x3+x2-6*x2 2*x-3*y+5*xy-6*yx+8*x*y-6*y*x+3*x*y-45*y*x 3*xyˆ2-x*yˆ2+yxˆ2-2*y*xˆ2 2*xyˆ2+3*x*yˆ2-2*yxˆ2-y*xˆ2 6*% f) xyˆ2*xy Ejercicio 5.2 Transcribir al lenguaje de Maxima las siguientes expresiones: 1) 3) x 3 45 x 2 3x 5 6 x 2 y 2 z 3 4 xy 5 xz 44 y 2 z 2) x 2 y 3 4 xy 2 x 3 y 6 x xy x 2 y 3z x2 y 2 1 5.1 Variables Si ponemos x: 0 habremos definido la variable x con valor 0 (observar la utilización de los dos puntos). Si a continuación escribimos x: 4 le habremos cambiado el valor a la variable x que ahora pasará a valer 4. Si ponemos la sentencia y : x +1 estamos definiendo una variable y a la que le estamos asignando el valor que tiene x más 1. Una situación similar sería la sentencia x: x +1 que no representa una ecuación, sino que significa que a x le asignamos el valor que tiene en este momento más 1. En este caso, después de esta operación, el nuevo valor de x es 5. 8 Si queremos borrar el valor de una variable o función es suficiente que escribamos remvalue (nombre). También podemos en el menú “Maxima” utilizar las opciones “mostrar variables” y “borrar variables”. Ejemplo 5.3 Ejecutar las siguientes sentencias: a) x: 2 b) y:3 c) z: x+3 d) x1: x-y e) x:x+10 f) x 5.2 Funciones Si ponemos f(x): 2*x+1 habremos definido la variable función f(x) con valor 2x+1 (de nuevo los dos puntos). Para definir una función que dependa de n variables debe utilizarse el siguiente esquema Nombrefuncion(variable1,variable2,,...,variablen): =[expr1, expr2, .. , exprm] en función de las variables Ejemplo 5.4 Ejecutar las siguientes sentencias: a) f(x): = xˆ3 - 4; g(x,y): =sin(x*y) , h(v): =log(v-4)/v^2; b) F(p,q,r): =cos(2*p-q)*exp(q-r^2) Para obtener el valor de la función en un punto basta con sustituir las variables por las coordenadas del punto, Así pondremos, para una función f de una variable f(4) para hallar el valor de esa función en el punto 4;ó g(-1,a) si queremos hallar el valor de una función g de dos variables al evaluarla en el punto (-1,a) Hay que llevar precaución para usar las funciones y evaluar expresiones en ellas. Así por ejemplo si tenemos definida la función de una variable f y ponemos f(x) el resultado será la expresión de f evaluada en el valor x Si x no tiene ningún valor asignado previamente la expresión quedará de forma genérica en función del valor del ”parámetro” x. Ahora bien si x ya tiene algún valor asignado la expresión f(x) no quedará de forma genérica. Por ello, cuando queremos que la expresión quede en forma genérica debemos asegurarnos que los nombres que empleamos para los parámetros no han sido empleados anteriormente, o, en su defecto, debemos eliminar el valor que hayan tenido antes con el comando remvalue, o desde el menú Maxima con borrar variables. Una forma alternativa para definir una función es mediante el procedimiento define(fun., expr.) . Por ejemplo: Al escribir define (g(x), 5*x), habríamos definido la función g(x) . remfunction(func1, func2,… ) borra las funciones que indiquemos. También podemos mostrar las funciones definidas y borrar las que no interesen desde el menú Maxima en las opciones correspondientes. fundef(fun.) devuelve la definición de la función que está entre paréntesis. 9 Ejemplo 5.5 Ejecutar las siguientes sentencias: a) d) h) j) g1(x): =xˆ3-x+1 b) g1(1) c) g1(4) g1(xx) e) g24(y): =3*y+6/y f) g2(7) g) g2(z) g3(fernandoalonso):=4*fernandoalonso g3(t) g3(vettel) k) g3(hamilton) l) g3(rosberg) Ejemplo 5.6 Ejecutar las siguientes sentencias: a) d) h) l) o) f3(variable): =variableˆ3 b) f3(parametro) c) c1: 3 f3(c1) e) f4(cc): =3*cc f) f4(parametro2) g) remfunction(f4) f5(x5):=3*x5-cos(x5) i) f5(t) j) f5(0) k) f5(%pi) f6(x,y): =5*x^2-2*y^3 m) f6(x,y) n) f6(0,-1) ñ) f6(1,2) define(g(x),x^3) p) g(5) q) fundef(g) Ejercicio 5.7 Definir con Maxima las siguientes funciones: f5(x)= cos x f6(x,y)= e ( x x 3 y obtener los siguientes valores: a) f5(π) b) f5( 3 ) c) 2 y2 ) cos x·seny f6(0, π) d) f7(x,y,z)=xyzcos(x+y+z) f6(π/4, -π/4) e) f7(-1, 1, 0) Ejercicio 5.8 Crear las funciones g1(x)= 4 x 3 x 2 7 x , g2(x)= x 4 6 x 2 3x 4 y g1( x) y evaluarlas en un parámetro (sin valor asignado) llamado a. Después g3(x)= g 2( x) borrarlas de la memoria. Observación 5.8 Cuando vayamos a definir un nuevo objeto es conveniente asegurarnos de que no hay ninguno anterior con ese mismo nombre, eligiendo un nombre no utilizado anteriormente. En caso contrario, el programa podría no dejarnos asignarle el mismo nombre a otro objeto, o podría eliminar el valor anterior. Por otro lado, aunque guardemos información en un archivo en el que se hayan definido una serie de funciones o variables, éstas sólo permanecerán en memoria hasta que cerremos el programa. Esto quiere decir que cuando arranquemos de nuevo el programa y abramos el archivo, aunque estén escritas esas definiciones hasta que no volvamos a ejecutar las sentencias correspondientes Maxima no tendrá guardadas en la memoria dichas funciones o variables. PRÁCTICA 2: Vectores, matrices y sistemas de ecuaciones lineales 10 1. Definición de vectores y matrices Los vectores en Maxima se escriben entre corchetes y no con paréntesis. Así para escribir el vector (-1,2,0) pondremos [-1,2,0]. Los vectores también pueden utilizarse en Maxima para evaluar una función en varios puntos. Así si f es una función de una variable, y escribimos f([0,%pi,a]) estaremos aplicando f a los puntos 0, pi y a, respectivamente, y el resultado será un vector cuyas coordenadas son f(0), f(%pi) y f(a). Ejemplo 1.1 Teclear y ejecutar las siguientes sentencias: a) funcion(x ):= cos(x) b) funcion ([0,%pi,a]) c) sin([0,%pi,a]) Supongamos que queremos definir la función f: R³→ R dada por f(x,y,z)=xyz² . Para escribir esto en Maxima debemos poner f(x,y,z):=x*y*zˆ2 . La función habrá que evaluarla en tres números (por ejemplo f(1,2,0) . Se le pueden dar nombres a los vectores. Así, escribiendo u: [2,-1,0,3] estaremos definiendo el vector u que vale (2,-1,0,3). Si ponemos u[1] estaremos refiriéndonos a la primera coordenada del vector u, es decir, a 2; y así ocurre con el resto de coordenadas u[2], u[3] y u[4]. Éstas pueden ser modificadas, pues basta poner u[2]: 5 para que la segunda coordenada deje de ser -1 y valga ahora 5. Las matrices en Maxima hay que definirlas mediante el comando matrix como un vector de vectores. También se pueden definir desde el menú Maxima , “Álgebra”, introducir matriz. Al poner matrix([1,2],[-3,0],[4,6]) estaremos definiendo en Maxima la matriz que tiene por filas los vectores anteriores, es decir, la matriz que nosotros usualmente 1 2 escribimos así 3 0 4 6 Si asignamos un nombre a esta matriz, poniendo por ejemplo A: matrix([1,2],[-3,0],[4,6]) podemos referirnos a sus coeficientes o a sus filas, o incluso cambiarlos. Poniendo A[3,1] nos debe dar como salida el elemento de la matriz anterior que ocupa la tercera fila y la primera columna, es decir, 4. Si ponemos A[3,1]: -2 le habremos cambiado el valor que tenía, 4, valiendo ahora -2. Si ponemos ahora A[3], o también row(A,3) nos debe dar como salida la tercera fila de la matriz anterior. Si escribimos A[3]: [5,8] habremos cambiado la tercera fila de A por la fila [5,8] . Al poner diagmatrix(n,x) nos devuelve una matriz diagonal de orden n, en la que todos los términos de la diagonal principal son iguales a a x. Mediante diag_matrix(a1, a2, … , an) obtendremos una matriz diagonal con los números a1, a2, … , an en la diagonal principal. Si escribimos ident(n) obtenemos la matriz identidad de orden n. Ejercicio 1.2 1 1. Definir la matriz m = 0 1 3 2 5 11 Cambiar el primer vector-fila por el vector (0,3,4), y asignarle al coeficiente a22 el valor -4. 2. Definir la matriz identidad de orden 11, la matriz diagonal de orden 5 cuyos elementos de la diagonal principal son todos iguales a -4, y la matriz cuyas filas son los vectores (1,3,4,5,6), (2,4,-1,0,456), (5,-1,-9,55,0) y (0,0,0,3,-2). 3. Definir la matriz diagonal de orden 4 cuyos elementos de la diagonal principal son -1, 2 , 5, 3 . 2. Operaciones con vectores y matrices La suma o resta de dos vectores o dos matrices se realiza, igual que para los números, mediante los símbolos + y El producto de dos matrices se realiza mediante un punto . Ojo: No se realiza con* El punto . utilizado sobre vectores, sirve para realizar el producto escalar. Para multiplicar un escalar por un vector o por una matriz puede utilizarse el símbolo de multiplicación usual entre números, esto es, * . Ejemplo 2.1 Teclear y ejecutar las siguientes sentencias a) u1:[a1,b1,c1];u2: [a2,b2,c2]; b) u1+u2 c) u1-u2 d) 3*u1-5*u2 e) -5*u1+2*u2 f) m1:matrix([1,2],[-3,0],[4,6]);m2:matrix ([1,0],[2,1],[6,4]); g) m3:matrix ([-1,1,0],[6,5,4],[4,5,-2]) h) m1+m2 i) m1-m2 j) a* m1-3*m2 k) 6*m1-m3.m2 l) u1.u2 m) u1.u1 n) u1.u2 La sentencia transpose(m) nos da la traspuesta de una matriz m Si la matriz m es cuadrada para hallar el determinante bastará teclear determinant(m) Si la matriz m es invertible, la inversa de m se puede hallar poniendo invert(m) 1 2 3 Ejercicio 2.2 Dada la matriz m1= 0 3 1 1 5 3 hallar su traspuesta (a la que llamaremos m2) y su determinante. Comprobar si m1 es invertible y en caso afirmativo, hallar la inversa de m1 (a la que llamaremos m3), la traspuesta de m3 (a la que llamaremos m4) y la inversa de m2 (a la que llamaremos m5). Finalmente comprobar que m4 y m5 coinciden. 1 2 hallar m 3 Ejercicio 2.3 Dada la matriz m = 3 6 a) Realizar esta operación poniendo m.m.m b) Teclear también m^3 y m*m*m y observar el resultado. c) Notar que m^3 coincide con m*m*m pero no con m.m.m = m3 . d) Hallar m^-1 y comprobar que no coincide con la inversa de m, calculada como invert(m) . 12 3. Rango Dada una matriz m puede obtenerse (realizando transformaciones elementales-fila) una escalonación de la matriz inicial tecleando triangularize(m) Ésta última tiene por tanto el mismo rango que m y sus filas no nulas constituyen una base del subespacio generado por las filas de m. También puede hallarse el rango de la matriz m mediante el comando rank(m) . Ejercicio 3.1 Hallar el rango de las siguientes matrices (de tres formas: escalonando la matriz por filas, escalonando la matriz por columnas (aplicar el procedimiento anterior a la matriz transpuesta), y mediante el cálculo directo con rank : 1 2 1 0 2 2 2 3 1 8 6 2 1 1 2 0 2 2 2 3 2 0 5 0 2 1 4 3 Ejercicio 3.2 Hallar una base de los siguientes subespacios de R4: 1. El subespacio generado por los vectores (-1, 3, 2, 4), (1, -3, -2, -4), (1, 0, -2, 1) y (0, 3, 0, 5). 2. El subespacio generado por los vectores (0, 0, 0, 4), (0, 0, -2, -4), (1, 0, -2, 1), (4, 0, 2, 3) y (1, 0, 0, 5). 4. Sistemas de ecuaciones lineales Para resolver sistemas de ecuaciones lineales con Mathematica se puede usar linsolve y nullspace , el primero para sistemas en general, y el segundo para sistemas homogéneos. La escritura es como sigue : linsolve([ecuaciones],[incógnitas]) . Ejemplo: Para el sistema 2x+3y = 2, 5x-2y = 7 , escribiremos: linsolve([2*x+3*y=2,5*x-2*y = 7], [x,y] ) o también: p: [ 2*x+3*y=2,5*x-2*y = 7] y linsolve(p, [x,y] ) . Cuando el sistema sea incompatible la respuesta será [ ] . Si es compatible indeterminado las soluciones vendrán expresadas en función de parámetros representados por %r1 , %r2 , .. en lugar de los símbolos t, lambda , que usamos habitualmente. Dado un sistema homogéneo que tiene a m como matriz de coeficientes, nullspace(m) da como resultado un sistema de generadores del subespacio de soluciones de dicho sistema. 13 Es decir nullspace(m) da un sistema generador del núcleo de la matriz m. Ejemplo 4.1 Discutir y resolver, en su caso, los siguientes sistemas de ecuaciones lineales: 2 x 3 y 3 1. 2 x 2 y 2 Tecleando linsolve([2*x-3*y=-3,2*x+2*y=2],[x,y]) determinamos la solución (0, 1) del sistema por lo que vemos el sistema es compatible determinado. x 2 y 3z 1 2. x y z 0 2 x y 4 z 2 Para determinar una solución del sistema tecleamos linsolve([x-2*y-3*z=1,-x-y+z=0,2*x-y-4*z=2],[x,y,z]) ] y observamos que el programa devuelve [ ], con lo que nos responde que no tiene solución. Por tanto es un SI. x y 2z t 3 3. 2 x y z t 2 Tecleando linsolve([x-y+2*z-t=3,2*x+y+z+t=-2],[x,y,z,t]) obtenemos la respuesta: [x = -(3*%r4-1)/3,y = -(-3*%r4+3*%r3+8)/3,z = %r4,t = %r3] que nos da las soluciones en función de los parámetros representados por %r3 y %r4 correspondientes a las incógnitas z y t . El sistema es compatible indeterminado con dos grados de libertad. Ejercicio 4.2 Discutir y resolver los siguientes sistemas lineales: a) x y z 2 3 x 2 y 2 z 1 x 3 y z 2 x 2 y z t u 0 3 x y t u 6 b) 6 x y t u 1 x 2 y 2 z 2t 5 c) x 2 y z 3t 45 x y z 4t 48 2 x y 4 z 10t 101 x 3 y 7 z 5t 4 Saber resolver sistemas lineales nos permite hacer algunas cosas más relacionadas con vectores. Así por ejemplo, para saber si un vector se pone o no como combinación lineal de otros, y, en su caso, hallar los escalares que permiten hacer esto, lo que tenemos que hacer es precisamente resolver un sistema lineal. Un caso particular de esta situación se presenta cuando queremos hallar las coordenadas de un vector en una base, o, incluso, cuando queremos hallar la matriz cambio de base de dos bases de un espacio vectorial. Aunque esto 14 último, podemos realizarlo más fácilmente, multiplicando una matriz por la inversa de otra, operaciones con matrices que ya hemos visto como pueden hacerse con Maxima. Ejercicio 4.3 Responder a las siguientes preguntas: 1. Comprobar si el vector (1, -1, 0, 2) es combinación lineal de los vectores (0, -2, 3, 1) y (1, 0, 0, 1), y en caso afirmativo, hallar los escalares que permiten dicha combinación lineal. 2. Hallar las coordenadas del vector (1, -1, 0) en la base {(1, 2, 3), (1, 3, 0), (3, 2, 3)} de R 3 . 3. Dadas las bases B1 = {(1, 0, 1), (1, 1, 0), (0, 1, 1)} y B2 = {(1, 2, 3), (1, 3, 0), (3, 2, 3)} de R 3 hallar las matrices cambio de base M B1 B 2 y M B 2 B1 . Nota: Para resolver sistemas de ecuaciones de gran tamaño el método convencional no es factible. Por ello se buscan alternativas para reducir el número de operaciones. Una de ellas es factorizar la matriz. Una de las factorizaciones más conocida para matrices cuadradas es la llamada factorización LU. Cuando ésta es posible sucede que la matriz de coeficientes del sistema se pone como producto de una matriz L triangular inferior con diagonal principal igual a 1 y otra matriz U triangular superior. Maxima es capaz de calcular esta factorización con el comando lu_factor(M,generalring), donde M es la matriz que queremos factorizar. 5. Resolución de ecuaciones no lineales Para resolver una ecuación o un sistema de ecuaciones, Maxima dispone de varios comandos: a) solve(ecuación,variable) o solve([ ec1 , ec 2 , ec3 ,.....ecn ],[ var1 , var2 , var3 ,..... varn ]) Con estas sentencias el programa resuelve, si existe solución, la ecuación o el sistema de ecuaciones, para las variables dadas. El algoritmo que emplea el programa responde bien si el grado de las ecuaciones es menor o igual que 4. b) algsys([ ec1 , ec 2 , ec3 ,.....ecn ],[ var1 , var2 , var3 ,..... varn ]) Como solve, pero cuando no encuentra soluciones exactas intenta encontrar soluciones aproximadas. Notar que en este comando, aunque sólo haya una ecuación , o sólo una incógnita, deben ir entre corchetes. c) Si solamente nos interesan las soluciones numéricas reales, antes de utilizar algsys, debemos activar la opción realonly, escribiendo: realonly:true. Para desactivarla escribiremos: realonly:false . d) El comando find_root halla una raíz (mediante aproximación numérica) de una ecuación f(x) = 0, de una variable, dándole como ayuda inicial una localización a partir del 15 Teorema de Bolzano, mediante dos valores de x próximos, en los que la función f(x) experimente un cambio de signo. find_root(f(x),x,a,b) resuelve f(x) = 0 en el intervalo (a,b) . ( Si f(a).f(b) < 0 ) Con los otros comandos Maxima intenta hallar las soluciones del sistema de ecuaciones más o menos despejando y sustituyendo, utilizando funciones inversas, y eso no es siempre posible. Por ello no será capaz de resolver muchos sistemas de ecuaciones. Ahora bien, a veces nos puede interesar hallar una solución concreta de una ecuación (bien porque las otras no nos sean de interés, o bien porque sepamos que es única). Puede aplicarse el método de Newton para hallarla. No vamos a ver aquí detalles de este método, pero sí diremos que funciona en numerosas situaciones y que proporciona una solución de una ecuación si damos un valor inicial próximo a la solución. La utilización del método de Newton con Maxima es como sigue: 1) Escribimos load(newton1) 2) Si deseamos hallar una raíz de f(x) próxima al valor a, y realizar el proceso hasta que abs(f(x)) < e, escribiremos: newton(f(x), x, a, e) . NOTA 5.1 .- Aunque debemos ayudarnos con gráficos para elegir un intervalo en find_root o un punto inicial con el comando newton, estos gráficos deberán estar cerrados para la correcta ejecución de los mismos. Ejemplo 5.2 1. Vamos a hallar las raíces del polinomio sentencia solve(yˆ4-3*yˆ3+2*yˆ2 = 0,y) y 4 3y3 2 y 2 Para ello escribimos la 2. Vamos a intersectar las circunferencias x²+y²=1 y x²+(y-1)²=1 la sentencia solve([xˆ2+yˆ2=1,xˆ2+(y-1)ˆ2=1], [x, y]) Para ello escribimos 3. Sabiendo que la función e x - 3x cambia de signo en el intervalo (0, 1) escribiendo find_root(%eˆx -3*x, x, 0,1) puede aproximarse el valor numérico de una raíz de la ecuación f(x) = 0 en el intervalo (0, 1) . Ejercicio 5.3 1. Resolver las siguientes ecuaciones, para la variable x a) x 4 5x 3 5x 2 5x 6 0 b) ax²+bx+c=0 c) ax+b=c 2. Resolver el siguiente sistema en las variables x e y x ²+y ²=1 x+y=a 16 obteniendo los valores del parámetro para los que tiene solución. . 3. Hallar una raíz de la ecuación cos x = 3 senx próxima a 0. Considerar para ello la función f(x) = cos x – 3 sen x, en el intervalo (0, π/4) . PRACTICA 3: Aplicaciones lineales y diagonalización de matrices. Producto escalar. 1. Aplicaciones lineales Ejemplo 1.1 Consideremos la aplicación f: R 4 → R 3 , definida por f(x, y, z, t) = (x-z, 0, y-2z + t). Responder a las siguientes cuestiones: 1. Hallar bases del núcleo y de la imagen de f. 2. Clasificar f. 3. Hallar la matriz asociada a f respecto de las bases canónicas de R 4 y R 3 . 4. Hallar la matriz asociada a f respecto de las bases C4 (=base canónica de R4) y B = {(1, 1, 0), (1, 1, 1), (1, 0, 0)}. Ejecutando remfunction(f); remvalue(x,y,z,t); f(x, y, z, t): = [x-z,0,y-2*z+t] tenemos definida la función. Definamos las matrices n:matrix(f(1,0,0,0),f(0,1,0,0),f(0,0,1,0),f(0,0,0,1)) m:transpose(n) . En este caso la matriz m es , y 1 0 1 0 0 0 0 0 0 1 2 1 y es la matriz que se pide en el apartado 3. Para el núcleo la línea nullspace(m) nos da una base de él. Para la imagen, la sentencia triangularize(transpose(m)) nos da un SG de la imagen ya escalonado, y quitando los vectores nulos tendremos una base de la imagen. La matriz asociada a f respecto de las bases canónicas es precisamente la propia m. Para las otras matrices asociadas construimos en primer lugar la matriz cambio de base de B a C3 la cual es p: transpose(q) siendo q: matrix([1,1,0],[1,1,1],[1,0,0]). Seguidamente obtenemos nuestra matriz sin más que hacer el producto invert(p).m 17 Ejercicio 1.2 Consideremos la aplicación f: R 3 → R 2 , definida por f(x, y, z)=(x-y-z, x-y-z). Responder a las siguientes cuestiones: 1. Hallar bases del núcleo y de la imagen de f. 2. Clasificar f. 3. Hallar la matriz asociada a f respecto de las bases canónicas de R3 y R2 . 4. Hallar la matriz asociada a f respecto de las bases B1 = {(1, 1, 0), (1, 1, 1), (1, 0, 0)} y B2 = {(2, -1), (3, 1)}. 5. Si consideramos otra aplicación lineal g: R 3 → R 2 , definida g(x, y, z)=(x-y+z, 2x+y-z), hallar la expresión analítica de f +2g. 2. Diagonalización de matrices Supongamos que m es una matriz cuadrada de orden n. Para hallar el polinomio característico de m escribiremos charpoly(m,x). Para hallar los valores propios de m deberemos ejecutar la sentencia eigenvalues(m) ( o su abreviatura eivals(m) que dará dos listas, la primera formada por los valores propios, y la segunda formada por las multiplicidades respectivas. eigenvectors(m) (o eivects(m)), calcula los vectores propios de la matriz m. El resultado que nos dará es una lista con dos términos. El primero consta de dos listas, la primera con los valores propios de m y la segunda con sus respectivas multiplicidades. El segundo término es una lista de listas de vectores propios, una lista por cada valor propio, pudiendo haber uno o más vectores propios en cada lista. Para saber si una matriz m es diagonalizable tenemos que ver que todos los valores propios son reales y que existe una base del espacio formada por vectores propios. Esto último puede hacerse directamente viendo si el número total de vectores propios que el programa nos da después de ejecutar la sentencia eigenvectors(m) es igual al tamaño de la matriz. Ejemplo 2.1 Ejecutando las siguientes sentencias: m:matrix([3, 0, 0], [0, 2, 0], [0, 0, 2]) eigenvalues(m) eigenvectors(m) vemos que la matriz es diagonalizable, pues todos los valores propios son reales y los vectores que salen son tantos como el orden de la matriz m . Ejemplo 2.2 Ejecutando las siguientes sentencias: n : matriz([1, -1, 3], [0, -2, 3], [0, 0, 2]) eigenvalues(n) eigenvectors(n) vemos que la matriz es diagonalizable, pues todos los valores propios son reales y los vectores propios son en total 3. Con los resultados obtenidos podemos elaborar una matriz de paso y una matriz diagonal semejante. 18 Ejemplo 2.3 Ejecutando las siguientes sentencias: a:matrix([1,0,0,0,0,0],[1,1,0,0,0,0],[0,1,1,0,0,0],[0,0,0,2,0,0],[0,0,0,1,2,0],[0,0,0,0,0,-1]) eigenvalues(a) eigenvectors(a) vemos que la matriz es no diagonalizable, pues aunque todos los valores propios son reales, el número total de vectores propios que resultan, es menor que seis. Ejercicio 2.4 Para las siguientes matrices, hallar los valores propios, una base de cada subespacio propio, comprobar si son diagonalizables, y, en caso afirmativo, hallar las matrices cambio de base correspondientes P y P 1 y las matrices diagonales correspondientes D (observar cuáles son los elementos de la diagonal de D): 1 2 0 M1= 1 3 1 0 1 1 5 0 4 M2= 0 3 0 2 0 1 1 1 1 M3= 1 1 0 1 0 1 3. Producto escalar Con Maxima hemos visto que el producto escalar de dos vectores u y v se realiza escribiendo u.v . También se consigue con las sentencias innerproduct(u,v) o inprod(u,v) . Ejemplo 3.1 Consideramos los vectores u(-1,2,6), y v(3,4,-2) . Los definimos con Maxima escribiendo: u: [-1,2,6] v:[3,4,-2] a) Para el producto escalar de u por v escribiremos u.v b) Para la norma de u, sqrt(u.u) c) Para el ángulo formado por u y v: acos((u.v)/(sqrt(u.u)*sqrt(v.v))) Ejercicio 3.2 Dados los vectores u = (1,-1, 0, 2) y v = (3, 4, 1, 2) . a) Realizar el producto escalar de u por v . b) Deducir si u y v son ortogonales. c) Hallar las normas de u y v. d) Deducir si alguno de los vectores es unitario. e) Hallar el ángulo que forman u y v. 4. Método de Gram Schmidt 19 Para cargar esta función es necesario primero escribir load(eigen) para cargar en memoria ese paquete. El resultado que arroja es el que se obtiene con el proceso de ortogonalización de Gram Schmidt. Veamos un ejemplo: Ejemplo 4.1 Vamos a aplicar Gramschmidt a la base que escribimos como filas de una matriz x. Escribiremos: load(eigen) x:matrix([1,2,1],[-1,1,3],[2,-4,0]) gramschmidt(x) En el resultado es posible que aparezcan números enteros factorizados. Se puede trabajar con otro producto escalar distinto del producto escalar canónico de Rn si se ha definido previamente. (Para más detalles ver ayuda de Maxima). Los vectores que se obtienen son ortogonales pero no son unitarios en general. 5 1 1 Ejemplo 4.2.- Consideramos la matriz A = 1 5 1 . Al hallar los valores propios , 1 1 5 eigenvalues nos da 7 de multiplicidad 1 y 4 de multiplicidad 2. La matriz A por ser simétrica es diagonalizable y admite una matriz de paso T ortogonal (T -1.= T t ) . eigenvectors nos da V7 =< (1,1,1) > y V4 = < (1,0,-1), (0,1,-1) > . V7 y V4 son subespacios ortogonales. Para conseguir una base ortogonal bastará aplicar Gram Schmidt a la base de V4 . Escribiremos : load(eigen) a:matrix([1,0,-1], [0,1,-1]) g:gramschmidt(a) u:[1,1,1] v:g[1] w:g[2] Ahora normalizamos los tres vectores para conseguir una base ortonormal (el que una matriz sea ortogonal equivale a que sus filas formen una base ortonormal, lo que a su vez equivale a que las columnas formen una base orotonormal): u1:(1/sqrt(u.u))*u v1:(1/sqrt(v.v))*v w1:(1/sqrt(w.w))*w m:matrix(u1,v1,w1) T:transpose(m) D:matrix([7,0,0],[0,4,0],[0,0,4]) Siendo D matriz diagonal semejante a la matriz A, y T una matriz de paso ortogonal. 20 Ejercicio 4.3 Hallar una matriz diagonal semejante y una matriz de paso T ortogonal para 2 0 1 la matriz A = 0 2 3 . 1 3 1 5. Programación Lineal Comenzamos cargando el paquete simplex, introduciendo load (simplex) problemas de máximo de la función objetivo se emplea el comando: . Para los maximize_lp(obj., [cond.], [pos]) donde obj. representa a la función objetivo, cond. al conjunto de las restricciones del problema, en las que las desigualdades se deben escribir <= o >= , y [pos] es un argumento opcional, formado por la lista de las variables nonegativas del problema. Si el problema no tiene soluciones factibles nos dará como respuesta : “Problem not feasible ”. Si el problema carece de solución óptima por no estar acotado nos responderá : “Problem not bounded” . Análogamente para los problemas de mínimo. 3 x 4 y , con las restricciones: Ejemplo 5.1 Hallar el mínimo de la función x 0, x y 5, 3 x 4 y 12, y 0 load(simplex) minimize_lp(3*x+4*y,[ x+y>=5,3*x+4*y>=12],[x,y]); Ejercicio 5.2 Hallar el máximo de la función x 0, x y 5, 3 x 4 y 12, y 0 Ejercicio 5.3 Hallar el máximo de la función 3 x 4 y , con las restricciones: x1 x 2 x3 , con las restricciones: x1 0, x 2 0, x3 0, x1 x 2 2 x3 5, 2 x1 x 2 x3 7, 2 x1 x 2 3 x3 8, x1 2 x 2 5 x3 9 PRÁCTICA 4: Funciones de una variable (límites, representación gráfica, derivadas, polinomios de Taylor e integrales) 1. Límites 21 La sentencia limit(f(x),x,a) proporciona el límite de la función f(x) cuando x tiende hacia a. limit(f(x),x,a,plus) dará el límite lateral por la derecha , y limit(f(x),x,a , minus) el límite lateral por la izquierda. Los límites en + ∞ y en -∞ se obtienen sustituyendo en la primera expresión a por +inf , y por -inf respectivamente . Ejemplo 1.1 Teclear la siguiente sentencia limit((x-1)/(xˆ2-1),x,1) Ejercicio 1.2 Calcular los siguientes límites: 1. x2 1 lim 2 x 2 x x 1 2. lim x 0 3. sen5 x x 1 senx cos x lim 1 senpx cos px , donde p es un número real cualquiera. x 0 4. 5. x4 (1 cos 2 3x) 4 1 1 2 lim 2 2 log (cos x).(3x x ) x 0 x senx lim x senx x 1 6. lim Cosx sen 2 x x 0 7. lim x3 x2 x3 x2 x 2. Representación de funciones Maxima es capaz de hacer gráficas de funciones de una variable. El comando a utilizar es plot2d. La forma de usarlo es la siguiente: plot2d(funcion,[variable,extremoizquierdo,extremoderecho]) para representar una sola función en un intervalo. Para representar varias funciones en el mismo intervalo y en la misma gráfica: plot2d([func1,func2,…],[variable,extr.izdo.,extr.dcho.]) Ejemplo 2.1 Ejecutar las siguientes sentencias (observar lo que ocurre con el ejemplo 9.) 22 1. 2. 3. 4. 5. 6. 7. 8. 9. plot2d(cos(x),[x,-%pi,%pi]) plot2d(xˆ3-2x,[x,-1,1]) plot2d(%e^(x),[x,0,4]) plot2d(sqrt(1-x^2),,[x,-1,1]) plot2d(sin(x)*cos(x^2),[x,0,4]) plot2d([sin(x),cos(x)],[x,-4,4]) plot2d([sin(x),cos(x)],[x,0,2*%pi]) plot2d(sin(x)^2*cos(3*x),[x,-%pi,%pi]) plot2d(1/x,[x,-1,1]) Ejercicio 2.2 Representar las siguientes funciones: 1. 2. 3. La función e^(-x^2) en el intervalo (-3,3) Los logaritmos en base 2,3,e y 4 en el intervalo (0.3,40) Las funciones sinx, sin(x+2), sin(x-2), sinx+2, y sinx-2 en el intervalo (-10,10) Si lo que queremos es representar una superficie de ecuación z = f(x,y) en el espacio deberemos poner plot3D(f,[x,extremoizquierdo1,extremoderecho1],[y,extremoizquierdo2,extremoderecho2]) Ejemplo 2.3 Ejecutar las siguientes sentencias 1. 2. 3. 4. plot3d(cos(x*y),[x,-%pi,%pi],[y,-%pi,%pi]) plot3d(x^2-y^2,[x,-1,1],[y,-1,1]) plot3d(sin(x)*cos(y),[x,-%pi,%pi],[y,-%pi,%pi]) plot3d(sin(x-y)+cos(x+y),[x,-2*%pi,2*%pi],[y,-2*%pi,2*%pi]) También podemos representar curvas en el plano dadas en forma paramétrica. La escritura es: plot2d([parametric, x(t), y(t),[t,a,b],[nticks,100]]) donde a, b son los extremos del intervalo que recorre el parámetro t, x(t) , y(t) son las coordenadas de los puntos de la gráfica en función de t, el número que acompaña a nticks , es el número de puntos que unidos delimitan la “curva” , que es realmente una poligonal. Y superficies en el espacio dadas paramétricamente. La forma de escritura es: plot3d([x(s,t), y(s,t), z(s,t)], [s,a,b],[t,c,d], opciones]) donde a, b son los extremos del intervalo que recorre s; c, d los del intervalo que recorre t, y x(s,t), y(s,t), z(s,t) son las coordenadas de los puntos de la gráfica en función de s y t. Ejemplo 2.4 Ejecutar las siguientes sentencias: 23 1. plot2d([parametric,sin(t)+sin(t)*atan(t),cos(t)+sin(t)*atan(t),[t,-20*%pi, 20*%pi] ,[nticks,1000]]) 2. plot2d([parametric,exp(-t/20)*sin(t),exp(-t/20)*cos(t),[t,0,20*%pi],[nticks,1000]]) 3. plot3d([[cos(v),sin(v)*cos(u),sin(v)*sin(u)], [u,0,2*%pi],[v,0,%pi]]) 4. plot3d([[t, sin(s), cos(s)], [t, 0, 3], [s, 0, 2*%pi]]) Ejemplo 2.5 a) Representamos la función f(x): = exp(x)+sin(2*x)+cos(3*x)-tan(x) : plot2d(f(x), [x,1,1.5]) b) Vemos que cambia de signo entre 1 y 1.5 y que tiene una raíz cercana a 1. c) Cerramos la gráfica (Ver NOTA 5.1 de la práctica 2) d) Ejecutamos load(newton1) e) Ejecutamos find_root(f(x),x,1,1.5) f) Ejecutamos newton(f(x),x,1,1/100) 3. Derivadas Para derivar funciones de una variable podemos usar el comando diff . Su formulación es la siguiente: diff(función,variable) Para hallar la derivada de orden n de una función f es suficiente con ejecutar la sentencia diff(función,variable,n) Para el cálculo de derivadas parciales de una función se escribe: diff(función,variable1,n1,variable2, n2, … ) donde n1 es el orden de derivación respecto de la variable1 , n2 el orden respecto de la variable2, … etc. Ejemplo 3.1 Ejecutar las siguientes sentencias 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. diff(xˆ3-2x,x) diff(xˆ3-2y,y) diff(asin((x-1)/4),x) diff(atan((3x +1)/2),x) diff(exp(cos(t)ˆ2-tˆ4),t) f(x):= xˆx diff(f(u),u) g(y):= f(3*y) diff(g(u),u) diff(acos(x),x,5) diff(exp(xˆ2),x,3) 24 Ejercicio 3.2 Calcular las derivadas de órdenes 3, 6 y 10 de las funciones que se indican a continuación: 1. 2. f ( x) sen( x 2 ) f ( x) log(cos x) 3. f ( x) sen( x ).e1 x 4. 5. 2 1 x x2 1 x x2 3 f ( x) ((1 cos x) log x) x 2 f ( x) 4. Polinomios de Taylor Si lo que queremos es hallar el polinomio de Taylor de f en el punto a de grado n debemos ejecutar la sentencia taylor(f(x),x,a, n) Ejemplo 4.1 Teclear las siguientes sentencias: 1) taylor(cos(x),x,0,5) 2) taylor(exp(x),x,0,6) 3) taylor(sin(3*x),x,0,4) 4) taylor(log(x),x,1,7) 5) taylor(cos(x)/x,x,%pi,5) Maxima no guarda de la misma forma un polinomio de Taylor y un polinomio normal. Se puede utilizar la sentencia define para la conversión del polinomio de Taylor en una función polinómica en la que poder evaluar los valores correspondientes a valores de x. Ejemplo 4.2 Teclear las siguientes sentencias: 1) define(f1(x), taylor(cos(x),x,0,5) ) 2) define(f2(x), taylor(exp(x),x,0,6) ) 3) define(f3(x), taylor(sin(3*x),x,0,4) ) 4) define(f4(x), taylor(log(x),x,1,7) ) 5) define(f5(x), taylor(cos(x)/x,x,%pi,5) ) y hallar los valores f1(2), f2(-2), f3(5), f4(3/2), f5(-3) . Ejemplo 4.3.- Teclear las siguientes sentencias: a) b) c) d) e) define(t4(x),taylor(cos(x),x,0,4)) define(t6(x),taylor(cos(x),x,0,6)) define(t8(x),taylor(cos(x),x,0,8)) define(t10(x),taylor(cos(x),x,0,10)) plot2d([cos(x),t4(x),t6(x),t8(x),t10(x)],[x,-6,6],[y,-2,2]) 25 Ejercicio 4.4 Calcular los polinomios de Taylor de las siguientes funciones en los puntos que se indican, y definir las correspondientes funciones polinómicas: 1. f ( x) e x 1 ·cosx arctan x en el punto 1 de grado 6 arccos 2 ( x 3 ) 2. g ( x) 8. h( x) cos 2 ( 1 x2 x 3 en el punto 0 de grado 12 )·log(6 x 11) en el punto 2 de grado 5 5. Integrales Para calcular integrales de funciones de una variable podemos usar el comando integrate. Su formulación es la siguiente: integrate(funcion,variable) calcula una primitiva de la función indicada integrate(funcion,variable,extremoizquierdo,extremoderecho) definida de la función indicada en el intervalo indicado calcula la integral Ejemplo 5.1 Ejecutar las siguientes sentencias 1. integrate(xˆ3-2x, x) 2. integrate(cos(x)^8, x) 3. integrate(atan(x), x) 4. integrate(sqrt(3*t-t^2), t) 5. integrate(x/(x^2+1)*(x-2)^3, x) 6. integrate(xˆ3-2*x)/((xˆ2-1)*(x - 2)ˆ2*(xˆ2+2*x+2)),x) 7. integrate(cos(x)ˆ3,x,-%pi,%pi) 8. integrate(s*log(s),s,0.1,1) 9. integrate(sin(2*x-3*y),x) 10. integrate(x/(y+x),y) 11. integrate(x^3*y^4,y,-2,1) 26 12. integrate(integrate(x-3*y,x,0,1),y,-1,3) Ejercicio 5.2 Calcular las siguientes integrales: 1. sin(5 x)dx 2. log xdx 3. x3 x 2 1 dx 4. e 5t dt 5. ( x 2 y )dx 1 6. (x 5 3 x)dx 0 x (cos( 3 )dx 7. 3 8. (e 5t )dt 2 1 9. (x 2 xy )dx 0 0 10. (e x y )dx y 11. (1 x y)dxdy donde el recinto es R={(x,y):x<y<3x,2<x<5} R 27