Norma tecnica europea para el ensayo de modulo de deformación por compresión ciclica para mezclas asfalticas en caliente.Full description
Norma tecnica europea para el ensayo de modulo de deformación por compresión ciclica para mezclas asfalticas en caliente.Descripción completa
Descripción completa
Descrição completa
Descripción: Reflexiones y herramientas para desarrollar la competencia de "aprender a aprender"
Descrição: Aprender a Aprender
Descrição completa
TIPOS DE APRENDIZAJE OBSTÁCULOS PARA LOGRAR EL APRENDIZAJE ESTRATEGIAS PARA APRENDER BIBLIOGRAFIA
Aprender a AprenderFull description
Descripción: derecho invidual
Descrição completa
Descripción: Python
Descrição completa
Aprender a AprenderDescripción completa
Descripción: libro o manual de aprender a aprender. psicologia
Descripción: Uno de los conocimientos más apreciados por los practicantes de la magia ritual, es el manejo de las horas planetarias, entendidas estas como los espacios temporales que se encuentra bajo el influj...
Pr´ ologo Este libro surge a partir del material elaborado para impartir un curso intensivo de MATLAB/Octave para profesores de la Universidad de Extremadura. La primera edici´ on de este curso tuvo lugar en mayo de 2010 con una muy buena acogida por parte de los profesores participantes, lo que propici´o una segunda edici´on en 2011. Los contenidos expuestos se presentan como un curso de auto-aprendizaje de modo que el lector puede conseguir una visi´on global de las posibilidades de este software al tiempo que puede ir ejercit´andose en el uso del mismo. As´ı, es fundamental que se realice una lectura atenta delante de un ordenador con MATLAB u Octave instalado. El libro consta de dos partes bien diferenciadas. La primera parte, cap´ıtulos del 1 al 4, corresponde a los aspectos generales e imprescindibles para el manejo de MATLAB/Octave. Cada uno de los cap´ıtulos de esta parte contiene una serie de ejercicios de auto-evaluaci´on a fin de que el lector pueda poner en pr´actica los contenidos tratados. La segunda parte del libro muestra algunos ejemplos concretos del uso de este software en el ´ambito acad´emico universitario. Esperamos que esta obra contribuya a la difusi´on del uso del software matem´atico (representado aqu´ı por MATLAB/Octave) como instrumento eficaz de aprendizaje en ´ ambitos docentes y como herramienta fundamental para abordar sin temor las matem´ aticas.
Introducci´ on a MATLAB/Octave ´ Este y todos los dem´ as cap´ıtulos del manual est´an pensados para ser trabajados delante de un ordenador con MATLAB u Octave instalado1 , y no para ser le´ıdos como una novela. En vez de eso, cada vez que se presente un comando de MATLAB/Octave, se debe introducir el comando, pulsar la tecla para ejecutarlo y ver el resultado. M´as a´ un, se desea que se verifique el resultado. Aseg´ urese de que se comprende perfectamente lo que se obtiene antes de continuar con la lectura.
1.1.
Primeros pasos
Los primeros p´ arrafos de esta secci´ on, as´ı como algunas frases aisladas en las siguientes, est´ an tomados, con ligeras variaciones, del libro de A. Quarteroni y F. Saleri “C´ alculo Cient´ıfico con MATLAB y Octave”, citado en la bibliograf´ıa; una fuente excelente para introducirse en el conocimiento de los m´etodos num´ericos m´ as usados en el c´ alculo cient´ıfico. MATLAB y Octave, los programas, son entornos integrados para el c´alculo cient´ıfico y la visualizaci´ on de datos. Ambos est´an escritos en los lenguajes C y C++. 1
Concretamente estas pr´ acticas est´ an realizadas para MATLAB 7.0 (R14) y Octave 3.2.3
MATLAB est´ a distribuido por The MathWorks (http://www.mathworks. com). El nombre proviene de MATrix LABoratory, pues originariamente fue desarrollado para el c´ alculo matricial. Octave, tambi´en conocido como GNU Octave (http://www.gnu.org/software/octave/), es un software que se distribuye libremente sujeto a los t´erminos de la licencia GPL (GNU Public License). A lo largo del manual haremos uso frecuente de la expresi´on “comando de MATLAB”; en ese caso, MATLAB deber´ a ser entendido como el lenguaje que es el subconjunto com´ un a ambos programas MATLAB y Octave. Una vez llevada a cabo la instalaci´ on, la ejecuci´on de MATLAB y Octave nos da acceso a un entorno de trabajo caracterizado por los indicadores (prompt) >> y octave:1>, respectivamente. Despu´es de presionar la tecla (enter, return), todo lo que est´e escrito a continuaci´ on del indicador ser´ a interpretado2 . Si la instrucci´on es incorrecta, MATLAB devuelve un aviso de error. En caso contrario, el comando es ejecutado y si procede se mostrar´ a una salida. Ejemplo 1. Escribe 2 + 2 en el indicador de MATLAB, pulsa la tecla intro y observa el resultado: 2+2 Escribe ahora pepe y pulsa intro pepe ¿Qu´e ha ocurrido? Finalmente, el sistema devuelve el indicador para poner de manifiesto que est´a preparado para un nuevo comando. En todo caso, conviene saber que cualquier comando puede abortarse pulsando simult´aneamente las teclas control () y (). Para cerrar una sesi´on de MATLAB se debe escribir el comando quit (o exit) y pulsar la tecla intro . En adelante se entender´a que para ejecutar un programa o un comando se tiene que pulsar 2
Por tanto, un programa en MATLAB no necesita ser compilado como ocurre con otros lenguajes (Fortran o C, por ejemplo).
. Adem´ as, los t´erminos programa, funci´on o comando se utilizar´an de forma equivalente. M´as adelante veremos que la sintaxis de MATLAB no es muy distinta de la de cualquier otro lenguaje; las diferencias ser´an las habituales, los s´ımbolos de continuaci´on, los comentarios, ... Veamos algunos de estos s´ımbolos: Las comillas simples o ap´ ostrofes ’-’ sirven para introducir un texto literal. Ejemplo 2. Escribe ’pepe’ ’pepe’ Obs´ervese que MATLAB no nos ha devuelto ahora un mensaje de error, sino que ha devuelto como salida la variable por defecto ans (abreviatura de answer) al igual que ocurri´ o en el ejemplo 1 cuando escribimos 2 + 2. Si ahora escribimos una cadena de caracteres (n´ umero o comando) diferente, la variable ans tomar´a este nuevo valor. Ejemplo 3. ’Bienvenido a la UEx’ El porcentaje % es el s´ımbolo usado para los comentarios. Todo lo que est´a por detr´as de este s´ımbolo en una l´ınea es ignorado por el interprete. Ejemplo 4. 2 + 2
% Esto es un comentario
Si a˜ nadimos tres puntos ... al final de una l´ınea significa que se tomar´a la siguiente l´ınea como continuaci´ on. Ejemplo 5. 2 + 2 ... - 3
Se pueden escribir varios comandos en una misma l´ınea, separ´andolos por una coma , o por un punto y coma ; El punto y coma sirve adem´as para inhibir que el resultado se muestre en la pantalla. Ejemplo 6. 2 + 2, 2 - 1, ans + 3, 3 + 5; N´otese que, aunque hemos realizado cuatro sumas, s´olo se han mostrado los resultados de las tres primeras ya que hemos prohibido que se muestre la salida de la u ´ltima. No obstante, MATLAB ha interpretado la orden y ha guardado resultado en la variable por defecto. Ejemplo 7. ans
1.2.
Atajos de teclado. El comando help
La consola de MATLAB es un entorno de trabajo m´as potente de lo que parece gracias a una serie de atajos de teclado de gran utilidad. Ejemplo 1. En la l´ınea de comandos de MATLAB, pulsa la flecha hacia arriba una vez ¿qu´e ha ocurrido? Pulsa ahora la flecha hacia arriba varias veces y observa lo que sucede, repite el experimento pulsando tambi´en la flecha hacia abajo . Puedes recuperar todas tus ´ordenes anteriores y volver a ejecutarlas si lo deseas. Tambi´en se pueden usar las flechas izquierda y derecha del teclado para mover el cursor a derecha e izquierda y editar as´ı una l´ınea de comandos. De este modo se pueden corregir errores, recuperando un comando con la flecha hacia arriba y usando a continuaci´on la edici´on para corregirlo. Como es natural se pueden cambiar tantos s´ımbolos como se quiera o utilizar la tecla de retroceso para borrar.
Utilizando la flecha arriba podemos editar el comando sqrt(5), cambiar el 5 por un 4 y calcular as´ı el valor de la ra´ız cuadrada de 4. sqrt(4) MATLAB posee una amplia colecci´ on de mensajes de ayuda. Si conoces el nombre de un comando, se puede encontrar la sintaxis correcta para el comando y ejemplos de su uso escribiendo help nombre comando. Ejemplo 3. help sqrt help help Una forma alternativa de obtener ayuda consiste en utilizar la tecla de tabulaci´on : Ejemplo 4. Escribe sq en la l´ınea de comandos y pulsa para obtener la lista funciones y comandos que comienzan por “sq”. Obviamente sqrt es uno de ellos. Finalmente, el comando lookfor nos muestra una lista de comandos en cuyas explicaciones aparezca cadena de texto especificada. Ejemplo 5. lookfor ’square root’ help lookfor
1.3.
Escalares, operaciones aritm´ eticas y variables
A decir verdad MATLAB no distingue entre escalares y matrices. Para mayor claridad, nosotros s´ı haremos tal distinci´on.
Aprende MATLAB/OCTAVE en 25 horas Esencialmente podemos utilizar n´ umeros enteros, reales y complejos: Ejemplo 1.
15, -21 % Son n´ umeros enteros 0.32, -1.27, .065 % Son n´ umeros reales -5.32e+5, 4.78e-3 % Tambi´ en son n´ umeros reales 1-i, 2+3i, -3+j % Son n´ umeros complejos
A pesar de que en apariencia MATLAB usa cuatro cifras decimales para representar los n´ umeros reales y complejos, la representaci´on interna del n´ umero se hace con 16 cifras decimales. De modo que lo que hemos visto es simplemente uno de los varios posibles formatos de salida de MATLAB (el utilizado por defecto). El mismo n´ umero puede tener diferentes expresiones decimales dependiendo de la declaraci´ on espec´ıfica de formato que se haga. Ejemplo 2. Veamos distintas representaciones de 1/7
format 1/7 format 1/7 format 1/7 format 1/7
long short e long e rat
El formato por defecto es el formato corto (4 cifras decimales). El comando format a secas nos devuelve al formato por defecto. format El n´ umero π est´ a predefinido en MATLAB, pi Dos representaciones aritm´eticas predefinidas que pueden ser de utilidad conocer son Inf y NaN, la primera representa un n´ umero m´as grande que cual-
quier n´ umero que MATLAB pueda almacenar3 y juega el papel de infinito, mientras que la segunda representa lo que solemos denominar una indeterminaci´on (Not a Number).
Ejemplo 3. 1/0 0/0 Inf + 1 Las convenciones para las operaciones aritm´eticas en MATLAB son similares a las de cualquier otro lenguaje de programaci´on. El orden de asociaci´on de las operaciones es tambi´en el mismo. Primero operan las funciones matem´aticas elementales (senos, cosenos, logaritmos, ...), las multiplicaciones y divisiones y luego las sumas y restas. Como es natural, los par´entesis sirven para modificar el orden normal de las operaciones a realizar.
Ejemplo 4. Calculemos 2 0,11/2
1 −
0,4 21/3
− 3(1 − 2i)
1/((2/0.1^(1/2))-(0.4/2^(1/3)))-3*(1-2i) El comando = permite la asignaci´ on de un valor (o de una cadena de caracteres) a una variable dada.
3
Los n´ umeros reales positivos m´ as grande xmax y m´ as peque˜ no xmin en MATLAB son realmax y realmin, respectivamente. El n´ umero m´ as pr´ oximo a uno dado x es x + eps(x). Se puede comprobar que los n´ umeros reales en MATLAB son m´ as densos cerca de xmin y menos densos cuando se aproximan a xmax .
Ejemplo 5. Para asignar la cadena ’Bienvenido a la UEx’ a la variable saludo podemos escribir: saludo = ’Bienvenido a la UEx’ Para asignar el valor de resultado de la suma 2 + 3 a la variable a podemos escribir: a = 2 + 3 De este modo no hay necesidad de declarar el tipo de una variable, MATLAB lo har´a autom´atica y din´ amicamente. Por ejemplo, si escribimos saludo = 3 la variable saludo contendr´ a ahora un n´ umero y no una cadena de caracteres. Esta flexibilidad no es gratis. Si ponemos una variable de nombre quit igual al n´ umero 5 estamos inhibiendo el comando de MATLAB quit. Por consiguiente, deber´ıamos tratar de evitar el uso de variables que tengan el nombre de comandos de MATLAB. Sin embargo, mediante el comando clear seguido del nombre de una variable, es posible cancelar cualquier asignaci´on y restaurar, por ejemplo, el significado original del comando quit. Ejemplo 6.
quit = 5 quit clear quit quit
La funci´on clear a secas cancela todas las asignaciones de valores a variables que hayamos realizado. Los nombres de las variables pueden tener a lo sumo 63 caracteres alfanum´ericos (no se admiten ni tildes ni la letra n ˜ y s´ı el gui´on bajo ). Es importante tener presente que el primer car´acter siempre debe ser una letra y que para MATLAB las letras may´ usculas son distintas de las min´ usculas.
El comando clc limpia la consola de comandos manteniendo los valores asignados a variables. Ejemplo 8. clc a Como se habr´ a observado para conocer el valor de una variable previamente definida basta con teclear su nombre. Tambi´en se pueden conocer todas las variables definidas hasta el momento usando los comandos who y whos. Ejemplo 9.
1.4.
who whos clear who
% Cancelamos los valores dados a las variables
Operadores de comparaci´ on y l´ ogicos. Algunas funciones elementales
Como cualquier lenguaje de programaci´ on, MATLAB dispone de operadores que nos permiten comparar valores.
Obs´ervese que la respuesta ha sido 1 para la afirmaci´on que es verdadera y 0 para la falsa. Otros operadores de comparaci´on son <= (menor o igual que), >= (mayor o igual que), == (igual a) y ~= (distinto de). En todos los casos la salida es 1 si la afirmaci´ on es cierta y 0 si es falsa.
Ejemplo 2.
2 >= 3 4 >= 3 Inf == Inf+1 3 ~= 4
Los operadores l´ ogicos de MATLAB son: & o and (conjunci´on), | o or (disyunci´on), ~ (negaci´ on l´ ogica), xor (disyunci´on exclusiva). Cuando se utilizan estos operadores, se eval´ uan siempre ambos operandos. Sin embargo, MATLAB ofrece la posibilidad de utilizar los operadores breves: &&, para la conjunci´on y || para la disyunci´ on, que simplifica la operaci´on de comparaci´on evitando operaciones innecesarias, y errores que se producir´ıan caso de evaluar incondicionalmente el segundo argumento (por ejemplo, para evitar la divisi´on por cero, podemos utilizar (b~=0)&&(a/b>0)). S´olo eval´ uan el segundo operando en caso de ser imprescindible, cuando el resultado del primer operando sea 1 para la conjunci´ on o 0 para la disyunci´on.
MATLAB posee una importante biblioteca de funciones elementales cuyos argumentos pueden ser n´ umeros enteros, reales o complejos, siempre que tenga sentido. El resultado se devuelve en el mismo tipo del argumento. Algunas funciones elementales soportadas por MATLAB son4 : sqrt abs exp log log10 sign
ra´ız cuadrada valor absoluto o m´ odulo exponencial logaritmo natural logaritmo decimal signo
sin cos tan asin acos atan
seno cos tangente arcoseno arcocoseno arcotangente
Algunas funciones relacionadas con los n´ umeros complejos son conj, real, imag, angle y compass. Ejemplo 4. 4
z = 2+3i conj(z) real(z) imag(z) angle(z) compass(z)
Todas las funciones trigonom´etricas de la tabla operan en radianes.
Ahora podemos utilizar las operaciones y las funciones elementales introducidas arriba para construir nuevas funciones. Para ello definimos lo que se conoce como una funci´ on an´ onima. Las funciones an´onimas responden a la siguiente sintaxis: nombre funcion = @(argumentos) expresi´ on Veamos algunos ejemplos: Ejemplo 5.
Un ejemplo de una funci´ on a trozos podr´ıa ser Ejemplo 6. fun3 = @(x) exp(x)*(x<=0) + x*(x>0)
1.5.
Gesti´ on de ficheros
Todo trabajo que se realiza durante una sesi´on MATLAB, se puede escribir en un archivo a modo de diario. Este archivo contendr´a una transcripci´on completa y literal de todos los comandos que ha interpretado MATLAB y sus correspondientes respuestas. El contenido del archivo se puede editar con cualquier procesador de textos. Para iniciar un archivo de diario llamado, por ejemplo, prueba.txt , debemos escribir
diary prueba.txt en la l´ınea de comandos de MATLAB y, como siempre, pulsar . Probablemente no se percibir´ a ning´ un cambio, pero el ordenador ha comenzado a registrar todo lo que ocurre en la consola de MATLAB en el fichero prueba.txt %Esto se incluir´ a en nuestro diario En cualquier momento se puede suspender esta orden escribiendo diary off Escribiendo ahora diary on (o diary prueba.txt) se volver´a a guardar toda la sesi´on en el archivo de diario que previamente se hab´ıa creado, a˜ nadiendo la informaci´ on nueva a continuaci´ on de la ya registrada. Si hay un diario activo al salir de MATLAB, el archivo de diario ser´a cerrado autom´aticamente. Al salir de una sesi´ on de MATLAB, los valores de todas las variables se pierden. El archivo de diario s´ olo mantiene un registro de lo que ha aparecido en la pantalla, no se almacenan los valores de las variables. Si se desea, antes de salir de MATLAB, se pueden guardar los valores actuales de las variables en un archivo para su uso en una sesi´ on futura. El siguiente comando guarda los valores de todas las variables existentes en un archivo que llamaremos mis datos.mat; por defecto, MATLAB (pero no Octave) a˜ nade la extensi´on .mat si no ha sido especificada. save mis datos.mat Los valores de todas las variables se guardar´an en forma binaria (ilegible, por tanto, para los seres humanos) en un archivo llamado mis datos.mat dentro del directorio de trabajo. Para cargar estos valores de las variables en una futura sesi´on de MATLAB se escribe
load mis datos Es posible salvar el valor de una serie de variables determinadas sin necesidad de guardar el resto.
Ejemplo 1.
a = 1; b = sqrt(2); c = ’no se guarda’; save var ab.mat a b clear a b c load var ab a, b c
Finalmente, podemos pedir a MATLAB que nos indique cu´al es el directorio de trabajo actual con la orden pwd y su contenido con la orden dir. El contenido de un fichero concreto se muestra con el comando type seguido del nombre del fichero. Tambi´en podemos borrar ficheros del directorio de trabajo usando el comando delete y cambiar de directorio con el comando cd de forma similar a como se hac´ıa en MS-DOS.
Ejemplo 2.
dir trab=pwd dir type var ab.mat delete var ab.mat
dir cd(’C:\’) cd(’home’) dir pwd cd(dir trab) pwd dir
23
% Si est´ as usando Windows y hay unidad C. % Si est´ as usando Linux.
En MATLAB existen funciones especificas para importar datos de hojas de c´ alculo generadas con otros programas. El abanico de formatos que reconoce MATLAB es mucho m´ as amplio que en Octave. Esencialmente, Octave reconoce bases de datos separados por delimitadores, por ejemplo comas (ficheros .csv). Mientras que MATLAB puede leer los datos de hojas de c´alculo m´as sofisticadas, por ejemplo de Excel (ficheros .xls). En la siguiente sesi´ on mostraremos brevemente el uso de las funciones csvread y dlmread (v´ alidas en MATLAB y Octave) y de xlsread (exclusiva de MATLAB). De forma an´ aloga, los datos num´ericos generados en MATLAB se pueden exportar a hojas de c´ alculo para su lectura y manipulaci´on con otros programas. En este caso, la funciones que veremos ser´an csvwrite y dlmwrite (para MATLAB y Octave) y xlswrite (s´ olo para MATLAB).
Antes de comenzar escribe lo siguiente5 clear all diary capitulo1.txt Ejercicio 1. Asigna a una variable a el n´ umero uno. Sobre esa variable calcula a = 2a. Repite esta operaci´ on hasta alcanzar el valor de 128. Ejercicio 2. 1. Escribe un n´ umero entero menor que 777. 2. Div´ıdelo entre 7 (si la divisi´ on es exacta elige otro n´ umero y vuelve a dividirlo). 3. Suma los valores de los seis primeros decimales. Si no nos hemos equivocado te ha salido 27. Ejercicio 3. Calcula el valor de ((1 + x) − 1)/x para x = 10−15 (obviamente el resultado es 1 para todo x = 0). Ejercicio 4. Define tres variables a, b y c con valores 10308 , 1.1·10308 y −1.001· 10308 , respectivamente. Compara, usando los operadores de comparaci´on, el valor de a + (b + c) con el de (a + b) + c (evidentemente, por la propiedad asociativa de la suma, son iguales para todo a, b y c). Ejercicio 5. Define una variable z cuyo valor sea un n´ umero complejo no real. √ Calcula su m´odulo usando la conocida f´ ormula |z| = z · z¯ (la barra superior es la conjugaci´on). El m´ odulo de un n´ umero complejo se puede calcular de forma directa usando la funci´ on abs. Compara el valor obtenido antes con el valor que te da la funci´ on abs. 5
Si no deseas hacer un diario de la sesi´ on, no hace falta que lo escribas. En otro caso, el fichero que se genere se guaradar´ a en el directorio en el que te encuentres; recuerda que puedes saber cu´ al es escribiendo pwd .
Ejercicio 6. Usando la ayuda de MATLAB (comando help), explica la diferencia entre los comandos floor, ceil, round y fix. Escribe tus explicaciones con comentarios, %, en la ventada de comandos e il´ ustrarla con ejemplos en MATLAB. Ejercicio 7. Calcula el coseno de 43 grados [Pista: usa el comando help de MATLAB para encontrar la funci´ on apropiada] diary off
Ejercicio 1. a = 1 a = 1 a = 2*a a = 2 a = 2*a a = 4 a = 2*a a = 8 a = 2*a a = 16 a = 2*a a = 32 a = 2*a a = 64 a = 2*a a = 128
Ejercicio 2. format long 776/7 ans=110.857142857143 8+5+7+1+4+2 ans=27 format short Ejercicio 3. x = 10^(-15); ((1+x)-1)/x ans = 1.1102 Observamos que el resultado se desv´ıa en un 11 por ciento del valor esperado. El problema es que estamos dividiendo por un n´ umero muy pr´oximo a cero.
Ejercicio 4. a = 10^308; b = 1.1*10^308; c = -1.001*10^308; a + (b + c) == (a + b) + c ¿Falso? Deberia ser cierto. Veamos que ha ocurrido: a + (b + c) ans = 1.0990e+308 (a + b) + c ans = Inf Al sumar a y b hemos sobrepasado el infinito de MATLAB. Ejercicio 5. z = 3+i; mod z = sqrt(z*conj(z)) mod z = 3.1623 abs(z) ans = 3.1623 abs(z) == mod z ans = 1 Ejercicio 6. help floor floor(x) el mayor n´ umero entero menor o igual que x help ceil ceil(x) el menor n´ umero entero mayor o igual que x help round round(x) es el n´ umero entero m´ as pr´ oximo a x help fix fix(x) n´ umero (entero) que est´ a a la izquierda de la coma en la expresi´on decimal de x Ejercicio 7. help cos cos(x) calcula el coseno de x en radianes help cosd cosd(x) calcula el coseno de x en grados
Matrices y vectores Como ya mencionamos en el cap´ıtulo anterior, MATLAB u Octave son fundamentalmente programas para el c´ alculo matricial. En realidad, todos los datos son matrices, siendo los vectores y escalares casos particulares. Comenzaremos esta segunda sesi´ on aprendiendo a introducir matrices y vectores desde el teclado, para continuar, m´ as adelante, con otras formas m´as potentes de definir matrices. As´ımismo, experimentaremos con algunas de la funciones incorporadas en MATLAB, que lo convierten en una potente calculadora matricial.
2.1.
Definici´ on desde el teclado
Para definir una matriz no hace falta declararla o establecer de antemano su tama˜ no. De hecho, se puede definir un tama˜ no y cambiarlo posteriormente. Las matrices se definen o introducen por filas1 ; los elementos de una fila se separan por espacios en blanco o por comas. Para cambiar de fila se puede escribir punto y coma o . 1
Sin embargo, se almacenan por columnas. Este dato ser´ a de utilidad m´ as adelante, para comprender c´ omo act´ uan ciertas funciones.
Ejemplo 1. Introduce el siguiente comando, que define una matriz 4x3: A=[1,2,3;4,5,6;7,8,9;10,11,12] O bien A = [ 1 2 3 4 5 6 7 8 9 ] Una sencilla operaci´ on con matrices es calcular su traspuesta. Para ello, basta con escribir su nombre seguido del ap´ostrofo (’). Ejemplo 2. A’ Como el resultado de la operaci´ on no ha sido asignado a ninguna variable, MATLAB utiliza, por defecto, la variable ans, que puede ser usada posteriormente. Sin embargo, una opci´ on m´ as adecuada generalmente hubiera sido asignarle un nombre: Ejemplo 3. B=A’ MATLAB determina el n´ umero de filas y de columnas en funci´on del n´ umero de elementos que se proporcionan (o utilizan). Ejemplo 4. C(4,2)=-1 En el ejemplo, hemos definido una matriz de orden 4 × 2 con todos los elementos nulos excepto el segundo elemento de la cuarta fila, cuyo valor es -1.
De forma an´ aloga a las matrices, es posible definir un vector fila x (con los n´ umeros separados por comas o espacios en blanco) o un vector columna y (con los n´ umeros separados por puntos y coma). Para pasar de un vector fila a uno columna, basta con usar la funci´ on traspuesta. Ejemplo 5. x=[1 2 3] x’ y=[1;4;7] y’
2.2.
Otras formas de definir matrices y vectores
Introducir matrices a trav´es del teclado s´olo es pr´actico en algunas situaciones, por ejemplo cuando su tama˜ no es peque˜ no o no es necesario repetirlo muchas veces. MATLAB dispone de varias funciones orientadas a definir matrices y vectores de tipos particulares2 , algunas de las cuales son las siguientes: eye zeros ones rand diag linspace :
matriz unidad matriz de ceros matriz de unos matriz de n´ umeros aleatorios entre 0 y 1 matriz diagonal o diagonal de una matriz vector de partici´ on de un intervalo vector de sucesi´ on aritm´etica
2
Para obtener una lista de todas las matrices elementales escribir help elmat. Este comando no funciona en Octave. Para obtener informaci´ on detallada sobre una de dichas funciones en concreto, tanto en MATLAB como en Octave, escribir help seguido del nombre de la funci´ on.
Ejemplo 1. Construir algunas matrices, utilizando funciones: A=eye(5) B=ones(3) D=rand(3,6) E=zeros(3,4) F=diag([-1,0,1]) Para construir vectores, podemos tener en cuenta que se trata de un caso particular de matrices, o bien utilizar alguna de las funciones espec´ıficas para ello. El operador : es muy importante en MATLAB, y puede usarse de varias formas, que iremos practicando a lo largo de la sesi´on. Para empezar, nos permite generar vectores cuyos elementos son los valores contenidos entre dos valores, inferior y superior, a incrementos regulares, que por defecto ser´an la unidad. Ejemplo 2. x=1:100
% incremento por defecto
x1=1:2:100
% incremento de dos unidades
x2=2:2:100 Puede utilizarse con valores enteros y reales, positivos o negativos. Ejemplo 3. y=100:-10:1 z=0:pi/4:2*pi Una opci´on alternativa para generar vectores con valores igualmente espaciados es utilizar la funci´ on linspace.
Ejemplo 4. Veamos c´ omo generar los vectores de los ejemplos anteriores, utilizando linspace: x=linspace(1,100)
% por defecto 99 particiones
x1=linspace(1,99,50)
% 50 particiones
x2=linspace(2,100,50) y=linspace(100,10,10) z=linspace(10,2*pi,9) Ejemplo 5. Compara los vectores resultantes de las siguientes instrucciones: x=1:3:10 y=linspace(1,10,4) y de estas otras x=1:4:10 y=linspace(1,10,3) Finalmente, MATLAB tambi´en ofrece la posibilidad de definir una matriz a partir de otra u otras, definidas previamente, recibiendo alguna de sus propiedades (por ejemplo el tama˜ no, su diagonal, ...), por composici´on de varias submatrices o modificando de alguna forma otra matriz. Ejemplo 6. A=rand(4) B=diag(diag(A)) C=[A B] D=[A;B] E=[A,eye(4);zeros(4),B]
Una caracter´ıstica peculiar de algunas funciones en MATLAB es que dependiendo del tipo de argumentos que reciban, as´ı ser´an los valores de retorno, determin´andose en tiempo de ejecuci´ on. Un ejemplo claro es la funci´on diag, que hemos utilizado en el ejemplo anterior para construir la matriz B. Al aplicarla sobre una matriz, devuelve un vector con su diagonal principal, mientras que al aplicarla sobre un vector, nos devuelve la matriz diagonal. Por defecto, dicha diagonal ser´ a la principal, aunque admite un segundo argumento para referirse a las diagonales secundarias.
2.3.
Acceso a los elementos de una matriz
En MATLAB se accede a los elementos de un vector o matriz escribiendo el ´ındice o los ´ındices correspondientes entre par´entesis. Como ya mencionamos, las matrices se almacenan por columnas, aunque se introduzcan por filas, por lo que se puede acceder a cualquiera de sus elementos con un u ´nico ´ındice. Ejemplo 1. A=rand(5) A(3,2) A(7) A(8) x=[-2,-1,0,1,2] x(3) Observar que se ha obtenido el mismo valor escribiendo A(3,2) que A(8). Tambi´en es posible acceder a un bloque de componentes de una matriz o vector, indicando los ´ındices m´ınimo y m´ aximo o indicando un subconjunto de ´ındices, En este contexto, el s´ımbolo : indica todo el rango.
Acceder a elementos de un vector o matriz de esta forma tiene abundantes aplicaciones, por ejemplo la de modificar selectivamente esos elementos. Ejemplo 3. A=rand(6) A(:,2)=1
% Transforma en 1 los elementos de la segunda columna
A(1:2:6,:)=0
% Transforma en 0 los elementos de las filas impares
Como ya hemos mencionado, podemos redimensionar las matrices en cualquier momento, a˜ nadiendo o eliminando componentes. Para esa u ´ltima acci´on utilizaremos la matriz vac´ıa (representada en MATLAB por [ ]). Ejemplo 4. B=[]
% Define una matriz vac´ ıa llamada B
A(:,7)=7
% A~ nade una columna de sietes
A(2:2:6,:)=[]
2.4.
% Elimina las filas pares
Operaciones con vectores y matrices
MATLAB puede operar con matrices por medio de operadores y de funciones.
Los operadores aritm´ eticos son: + (adici´on o suma), - (sustracci´on o resta), * (multiplicaci´ on), ^ (potenciaci´ on). Todos estos operadores son coherentes con las correspondientes operaciones matriciales. Ejemplo 1. A=[1 2;3 4] A^2 A*A A/2 Los cuatro u ´ltimos operadores, precedidos de un punto (.), representan la misma operaci´on pero llevada a cabo elemento a elemento. Ejemplo 2. Comparar con los resultados anteriores: A.^2 A.*A Como ya vimos en la pr´ actica anterior, tambi´en se aplican a variables o valores escalares, y, por supuesto, de modo mixto operando un escalar con una matriz o vector. Ejemplo 3. A=[0 -2 3 5;7 2 -3 4;1 5 -6 -7] A+2 A*2 Si se usan de modo incorrecto (por ejemplo, intentando operar matrices con dimensiones incompatibles) se obtiene un mensaje de error.
Al igual que con los n´ umeros, los operadores relacionales son: < (menor), <= (menor o igual), > (mayor), >= (mayor o igual), == (igual), ~= (distinto) y los operadores l´ ogicos son: & o and (conjunci´on), | o or (disyunci´on), ~ (negaci´on l´ogica), xor (disyunci´ on exclusiva). Cuando se aplican a dos vectores o matrices del mismo tama˜ no, la operaci´on se realiza elemento a elemento y el resultado es otra matriz, del mismo tama˜ no, de ceros y unos, que recoge el resultado de cada operaci´ on.
Ejemplo 6. Analiza el resultado obtenido al ejecutar las siguientes instrucciones. (T´engase en cuenta que los operadores l´ogicos breves && y || no funcionan con matrices) A=rand(4);A(:,5)=1;A(:,6)=1/2;A(:,7)=0 (A>1/4)&&(A<3/4)