MatlabOctave Aprender MatlabOctave en 25 Horas

February 17, 2017 | Author: tbautistadiego | Category: N/A
Share Embed Donate


Short Description

Download MatlabOctave Aprender MatlabOctave en 25 Horas...

Description

MATLAB + OCTAVE

APRENDER MATLAB/OCTAVE EN 25 HORAS

TERESA ARIAS-MARCO JOSÉ LUIS BRAVO IGNACIO OJEDA Mª ISABEL PARRA CONCHITA MARÍN © Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

  

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

             ISBN digital: 978-84-7360-472-7   

                                   ISBN digital: 978-84-7360-472-7      © Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

´Indice 1. Introducci´ on a MATLAB/Octave 1.1. Primeros pasos . . . . . . . . . . . . . . . . . 1.2. Atajos de teclado. El comando help . . . . . 1.3. Escalares, operaciones aritm´eticas y variables 1.4. Operadores y funciones . . . . . . . . . . . . 1.5. Gesti´on de ficheros . . . . . . . . . . . . . . . 1.6. Ejercicios . . . . . . . . . . . . . . . . . . . . 1.7. Soluciones . . . . . . . . . . . . . . . . . . . . 2. Matrices y vectores 2.1. Definici´on desde el teclado . . . . . . . . . . . 2.2. Otras formas de definir matrices y vectores . 2.3. Acceso a los elementos de una matriz . . . . . 2.4. Operaciones con vectores y matrices . . . . . 2.5. C´alculos con polinomios . . . . . . . . . . . . 2.6. Resoluci´ on de sistemas de ecuaciones lineales 2.7. Gesti´on de ficheros de hojas de c´ alculo . . . . 2.8. Ejercicios . . . . . . . . . . . . . . . . . . . . 2.9. Soluciones . . . . . . . . . . . . . . . . . . . . 3. Gr´ aficos 3.1. Creaci´on y manipulaci´ on b´ asica de gr´aficos 3.2. Creaci´ on especializada de gr´ aficos . . . . . . 3.2.1. Gr´ aficos 2D . . . . . . . . . . . . . . 3.2.2. Gr´ aficos 3D . . . . . . . . . . . . . . 3.2.3. Gr´ aficos Estad´ısticos . . . . . . . . .

. . . . .

. . . . . . .

. . . . . . . . .

. . . . .

. . . . . . .

. . . . . . . . .

. . . . .

. . . . . . .

. . . . . . . . .

. . . . .

. . . . . . .

. . . . . . . . .

. . . . .

. . . . . . .

. . . . . . . . .

. . . . .

. . . . . . .

. . . . . . . . .

. . . . .

. . . . . . .

. . . . . . . . .

. . . . .

5

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

. . . . . . .

. . . . . . . . .

. . . . .

. . . . . . .

. . . . . . . . .

. . . . .

. . . . . . .

9 9 12 13 17 20 24 26

. . . . . . . . .

29 29 31 34 35 40 42 45 50 53

. . . . .

59 59 72 73 82 85

6

Aprende MATLAB/OCTAVE en 25 horas 3.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4. Soluciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4. Introducci´ on a la programaci´ on 4.1. “Scripts” . . . . . . . . . . . . 4.2. Funciones . . . . . . . . . . . . 4.3. Estructuras de control . . . . . 4.4. Entrada y salida . . . . . . . . 4.5. Manejo de funciones . . . . . . 4.6. Ejercicios . . . . . . . . . . . . 4.7. Soluciones . . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

91 93 97 97 100 104 109 112 114 116

5. Ajuste de curvas a datos 119 5.1. La funci´ on polyfit . . . . . . . . . . . . . . . . . . . . . . . . 119 6. Autovalores y autovectores 125 6.1. La funci´ on eig . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 6.2. Un ejemplo “cl´ asico” . . . . . . . . . . . . . . . . . . . . . . . . 127 7. Animaciones con MATLAB 131 7.1. Creaci´ on de animaciones . . . . . . . . . . . . . . . . . . . . . . 131 7.2. Pel´ıculas o MOVIES . . . . . . . . . . . . . . . . . . . . . . . . 132 7.3. Ejemplos de pel´ıculas o MOVIES . . . . . . . . . . . . . . . . . 133 8. Ecuaciones diferenciales 137 8.1. Ecuaciones Diferenciales Ordinarias . . . . . . . . . . . . . . . . 137 8.2. Ecuaciones en derivadas parciales . . . . . . . . . . . . . . . . . 139 Bibliograf´ıa

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

143

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.

Badajoz, 16 de julio de 2011 7

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

´ A MATLAB/OCTAVE CAP´ITULO 1. INTRODUCCION

9

Cap´ıtulo 1

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

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

10

Aprende MATLAB/OCTAVE en 25 horas

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).

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

´ A MATLAB/OCTAVE CAP´ITULO 1. INTRODUCCION

11

. 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

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

12

Aprende MATLAB/OCTAVE en 25 horas

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.

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

´ A MATLAB/OCTAVE CAP´ITULO 1. INTRODUCCION

13

Ejemplo 2.  sqrt(5)

% Ra´ ız cuadrada de 5

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.

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

14

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-

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

´ A MATLAB/OCTAVE CAP´ITULO 1. INTRODUCCION

15

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 .

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

16

Aprende MATLAB/OCTAVE en 25 horas

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.

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

´ A MATLAB/OCTAVE CAP´ITULO 1. INTRODUCCION

17

Ejemplo 7.       

a = 5 hola = 3 Hola hola a 1 = 12 2a = -3 a2 = -3

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.

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

18

Aprende MATLAB/OCTAVE en 25 horas

Ejemplo 1. 2 < 3 2 > 3

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 = (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.

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

´ A MATLAB/OCTAVE CAP´ITULO 1. INTRODUCCION

19

Ejemplo 3.       

2 = 3 && 2 >= 3 || ~(2 = 3) xor(2 0 c = a/b; else c = 0; end end Ejercicio 6. Usando un bucle for: function w = ejer6(v) n = length(v);

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

´ A LA PROGRAMACION ´ CAP´ITULO 4. INTRODUCCION w = 0; for i = 1:n if v(i)>0 w = w+1; end end end Otra forma: function w = ejer6b(v) n = length(v); w = 0; for i = 1:n w = w+(v(i)>0); end end Sin usar bucle for: function w = ejer6c(v) w=sum(v>0); end Ejercicio 7. function y = ejer7(x,y) while (x>=y) x = x/2; end y = x; end Ejercicio 8. r = input(’Introduce el radio: ’); ejer2(r); Ejercicio 9. function D = ejer9(f,x,h) D = (f(x+h)-f(x-h))/2*h; end

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

117

118

Aprende MATLAB/OCTAVE en 25 horas

Ejercicio 10. function A = ejer10(f,a,b,n) h = (b-a)/n; k = 1:n-1; A = (f(a) + 2*sum(f(a+k*h)) + f(b))*h/2; end

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

CAP´ITULO 5. AJUSTE DE CURVAS A DATOS

119

Cap´ıtulo 5

Ajuste de curvas a datos Mostramos en un par de ejemplos c´ omo se utiliza MATLAB para calcular el polinomio de un grado determinado que mejor se ajusta (en el sentido de m´ınimos cuadrados) a un conjunto de pares de datos.

5.1.

La funci´ on polyfit

Dado que solamente vamos a mostrar un par de ejemplos del uso de la funci´on polyfit, es recomendable echar un vistazo a la ayuda de MATLAB si se desea conocer esta funci´ on con mayor profundidad.  help polyfit

En nuestro primer ejemplo calcularemos y dibujaremos la recta que mejor se ajusta a un conjunto de pares de datos. Ejemplo 1. En un experimento realizado entre 1987 y 1989, se determin´o el ´ındice de grosor (TI, por sus siglas en ingl´es, thickness index) de la concha de mejillones recogidos en distintos lugares de la costa de Maine (EE.UU.), as´ı como la concentraci´ on de tributilesta˜ no (TBT) en sus tejidos celulares. El ´ındice de espesor TI se define como el cociente de 100 veces el grosor de la concha divido por su longitud y la concentraci´on de TBT se midi´o en micro-

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

120

Aprende MATLAB/OCTAVE en 25 horas

gramos (mg) por gramo (g) de tejido. El resumen de los resultados obtenidos vienen dados en la tabla siguiente: TBT(mg/g) TI

0,04 0,11 0,50 0,60 0,73 0,77 1,75 4,31 0,40 0,42 0,43 0,43 0,46 0,46 0,48 0,53

TBT(mg/g) TI

1,66 3,56 0,27 0,45 0,74 1,75 0,04 0,04 0,50 0,56 0,48 0,45 0,44 0,48 0,42 0,39

Estos datos los puedes descargar del fichero TI TBT.mat que est´a en http: //www.editorialtebar.com. Desc´ argalo donde MATLAB pueda encontrarlo y escribe:  load TI TBT Recuerda que una vez cargado en MATLAB, puedes ver los nombres de las variables usando who. Pintemos ahora los pares de puntos (TI, TBT) con c´ırculos azules (o como t´ u prefieras) y de paso pongamos t´ıtulo a la gr´afica y a los ejes.     

plot(TI,TBT,’bo’) xlabel(’Indice de espesor (TI)’) ylabel(’Concentracion de TBT’) title(’Contaminacion marina’) hold on

Observa que hemos activado la opci´ on hold para poder seguir dibujando sobre la misma gr´ afica. A continuaci´ on, calculemos la recta que mejor se ajusta a nuestros datos:  p = polyfit(TI,TBT,1)

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

CAP´ITULO 5. AJUSTE DE CURVAS A DATOS

121

El par de valores obtenidos son la pendiente y el t´ermino independiente, respectivamente, de la ecuaci´ on de una recta en la forma y = bx + a. El u ´ltimo argumento (el uno) indica precisamente que queremos una recta (grado 1). Si, por ejemplo, quisi´eramos hallar la par´ abola que mejor se ajusta a los datos, bastar´ıa escribir polyfit(TI,TBT,2) en este caso obtendremos un polinomio de MATLAB de grado 2, es decir, un vector con tres coordenadas a, b y c de tal forma que nuestra par´ abola ser´ıa y = ax2 + bx + c. Finalmente, dibujamos en nuestra gr´ afica la recta obtenida:  x = linspace(0.35,0.65);  y = polyval(p,x);  plot(x,y,’r’); Si quieres, puedes calcular el polinomio de grado dos o tres que mejor se ajusta a nuestros datos y pintarlos con otro color en la figura activa. Veamos, en el siguiente ejemplo, c´ omo se puede calcular la exponencial que mejor se ajusta a un conjunto de puntos dados. Antes de comenzar cerremos todas las figuras y borremos todas las asignaciones a variables.  close all  clear all

Ejemplo 2. Con el fin de determinar la vida media de una sustancia radiactiva mediante la observaci´ on directa de los datos, la sustancia debe desintegrarse con la suficiente rapidez para que se pueda medir realmente su cambio. No es sorprendente, pues, que las primeras sustancias radiactivas estudiadas fueron aquellas de desintegraci´ on r´ apida. Los datos de la siguiente tabla provienen de un art´ıculo publicado por Meyer y von Schweidler en 19051 . Las entradas de 1

St. Meyer and E. v. Schweidler, Untersuchungen u ¨ber radioaktive Substanzen. V. Mit¨ ¨ teilung. Uber Radioblei und Radium-Restaktivit¨ aten, Sitzungsberichte der Osterreichischen Akademie der Wissenschaften, mathem.-naturw. Kl., Abt. IIa, 114 (1905), 1195–1220.

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

122

Aprende MATLAB/OCTAVE en 25 horas

la segunda columna no corresponden a cantidad de materia sino a mediciones de actividad relativa. Dado que, seg´ un la ley de desintegraci´on radiactiva, la tasa de emisi´on radiactiva es proporcional a la cantidad presente de materia, se pueden medir cantidades de materia (relativas a la cantidades iniciales) observando en su lugar las tasas de emisi´ on (relativas a la tasas de partida). Tiempo (d´ıas) Nivel de act. rel.

0,2 2,2 4,0 5,0 6,0 8,0 11,0 35,0 25,0 22,1 17,9 16,8 13,7 12,4

Tiempo (d´ıas) Nivel de act. rel.

12,0 15,0 18,4 26,0 33,0 39,0 45,0 10,3 7,5 4,9 4,0 2,4 1,4 1,1

Estos datos los puedes descargar del fichero radiactivo.mat que est´a en http://www.editorialtebar.com. Desc´ argalo donde MATLAB pueda encontrarlo y escribe:  load radiactivo Recuerda que una vez cargado en MATLAB, puedes ver los nombres de las variables usando who. Pintemos ahora los pares de puntos (tiempo, nivel) con cuadrados magenta (o como t´ u prefieras) y tambi´en podemos aprovechar para poner nombres y t´ıtulos a nuestra gr´ afica.     

figure(1) plot(tiempo,nivel,’ms’) xlabel(’Tiempo (en dias)’) ylabel(’Nivel de actividad relativa’) title(’Datos de Meyer-v.Schweidler’)

Veamos qu´e ocurre cuando dibujamos (con cruces rojas, por ejemplo) nuestros pares de puntos con escala logar´ıtmica en el eje OY .

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

CAP´ITULO 5. AJUSTE DE CURVAS A DATOS

123

 figure(2)  semilogy(tiempo,nivel,’r+’)  hold on  xlabel(’Tiempo (en d´ ıas)’)  ylabel(’Log (nivel de actividad relativa)’)  title(’Datos de Meyer-v.Schweidler (en escala ... semilogaritmica)’)

Observamos que ahora los puntos est´ an pr´acticamente alienados. Calculemos la recta que mejor se ajusta a estos puntos.  p = polyfit(tiempo,log(nivel),1) N´otese que hemos tomado logaritmo en las ordenadas.  x = linspace(0,45);  y = exp(polyval(p,x));  semilogy(x,y,’b’) Obs´ervese con atenci´ on el uso de la exponencial en la segunda l´ınea de la anterior lista de comandos. Dado que nuestro segundo dibujo ha sido realizado en escala semilogar´ıtmica, hemos tenido que hacer uso de log y exp para ajustar los datos al dibujo. Veamos finalmente el resultado de nuestros c´alculos en la primera figura.  figure(1); hold on  plot(x,y,’b’)

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

CAP´ITULO 6. AUTOVALORES Y AUTOVECTORES

125

Cap´ıtulo 6

Autovalores y autovectores Resumimos las ordenes elementales de MATLAB para calcular los autovalores y autovectores de una matriz cuadrada (diagonalizable) y las ilustramos con algunos ejemplos elementales. Incluimos asimismo un ejemplo de aplicaci´ on del c´alculo de autovalores y autovectores.

6.1.

La funci´ on eig

Comencemos recordando qu´e se entiende por matriz diagonalizable: diremos que una matriz cuadrada A ∈ Cn×n es diagonalizable si existe una matriz invertible P ∈ Cn×n tal que P −1 AP = D := diag(d1 , . . . , dn )

(6.1)

donde diag(d1 , . . . , dn ) denota la matriz diagonal cuya entrada (i, i)-´esima es di ∈ C, i = 1, . . . , n. Los elementos de la diagonal de D se llaman autovalores de A y son las ra´ıces del polinomio det(A − xIn ), donde In es la matriz identidad de orden n, este polinomio se llama polinomio caracter´ıstico de A. Para cada autovalor λ de A, el sistema de ecuaciones lineales (A−λIn )x = 0 es compatible indeterminado (es decir, tiene infinitas soluciones), sus soluciones no nulas se llaman autovectores de A asociados a λ. Se puede comprobar f´ acilmente que si pi es la columna i−´esima de la matriz P de la ecuaci´on (6.1), entonces pi es un autovector de A asociado a di .

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

126

Aprende MATLAB/OCTAVE en 25 horas

La funci´on eig de MATLAB calcula una matriz P y una matriz diagonal D tales que P −1 AP = D, cuando A es una matriz diagonalizable.  A = [4,-1;6,-1]  [P,D] = eig(A) Por supuesto podemos cambiar los nombres de las variables que contendr´an la matriz de paso y la matriz diagonal:  [Q,E] = eig(A) Por defecto, la funci´ on eig normaliza las columnas de P. En MATLAB (no en Octave), podemos evitarlo a˜ nadiendo la opci´on ’nobalance’. MATLAB>> [P,D] = eig(A,’nobalance’)

Es importante tener presente que por razones de eficiencia computacional, MATLAB no resuelve el problema de calcular P invertible y D diagonal tales que P −1 AP = D, sino que resuelve el siguiente problema: calcular P y D tales que AP = P D. A simple vista podr´ıa parece equivalente al nuestro, pero si A no es diagonalizable la cosa no funcionar´ a como esperamos.  A = [0,1;0,0]  [P,D] = eig(A)  inv(P) % P no es invertible. Si queremos calcular el polinomio caracter´ıstico de una matriz A (no necesariamente diagonalizable), podemos usar la funci´on poly. As´ı, los autovalores de A se pueden calcular usando la funci´ on roots aplicada al polinomio caracter´ıstico, aunque tambi´en podemos usar la funci´on eig con ninguna o con una sola variable de salida.

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

CAP´ITULO 6. AUTOVALORES Y AUTOVECTORES

    

127

B = [1,-1,0;0,2,-3;0,0,3] p = poly(B) roots(p) % Autovalores de B eig(B) % Sin variable de salida d = eig(B) % Con una variable de salida

La funci´on roots no es muy precisa cuando el polinomio tiene ra´ıces m´ ultiples. Por lo que es recomendable usar la funci´on eig para calcular los autovalores de una matriz. Veamos un divertido ejemplo. Ejemplo 1. Consideremos la matriz diagonal A de orden 7 cuya diagonal est´a formada por menos unos, es decir, la opuesta de la matriz identidad de orden 7.  A = -eye(7) Es claro que A tiene un s´ olo autovalor, −1, repetido siete veces.  eig(A) Veamos qu´e ocurre si primero calculamos el polinomio caracter´ıstico de A y luego sus ra´ıces.  p = poly(A)  roots(p) ¡No coincide ni uno!

6.2.

Un ejemplo “cl´ asico”

Consideremos el problema de la movilidad social que involucra la transici´on entre distintas clases sociales a trav´es de las generaciones sucesivas de una familia. Supongamos que cada individuo es clasificado socialmente, seg´ un su ocupaci´on, como clase alta, media o baja, que etiquetamos como estados 1, 2 y 3, respectivamente, y que la matriz de transici´on que relaciona la clase de un hijo con la de su padre es   0,45 0,05 0,05   P =  0,45 0,70 0,50  . 0,10 0,25 0,45

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

128

Aprende MATLAB/OCTAVE en 25 horas

De tal forma que, por ejemplo, la probabilidad de que un hijo sea de clase alta, media o baja cuando su padre es de clase baja viene dada por la u ´ltima columna de P. As´ı, si p0 es el vector de las proporciones iniciales de hombres de cada clase social, la proporci´ on de hombres en cada clase social tras n generaciones ser´ a: pn = P pn−1 = P (P pn−2 ) = . . . = P n p0 . Un simple an´ alisis de los autovalores y autovectores de P revela que P tiene un u ´nico autovector p∞ cuyas coordenadas son positivas y suman 1. Veamos c´omo podemos calcularlo:

>> P = [0.45, 0.05, 0.05; 0.45, 0.70, 0.50; 0.10, ... 0.25, 0.45] >> [U,D] = eig(P); [a,i] = max(eig(P)); >> u = -U(:,i); pinf = u/sum(u)

El vector p∞ predice la distribuci´ on por edades tras una cantidad considerable de generaciones. Nuestra predicci´ on es, por tanto, que en el futuro la poblaci´on masculina consistir´ a en un 8.3 % de clase alta, un 62 % de clase media y un 29.7 % de clase baja. Comprobemos experimentalmente que la proporci´on entre las entradas de p∞ rige la distribuci´ on por clases cuando el tiempo es suficientemente grande. Comencemos fijando un vector que recoja la proporci´on inicial de poblaci´on masculina de cada clase, por ejemplo, 

 0   p0 =  0,25  , 0,75 y veamos en una gr´ afica que efectivamente la proporci´on de poblaci´on en cada clase se estabiliza con el tiempo.

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

CAP´ITULO 6. AUTOVALORES Y AUTOVECTORES

>> >> >> >> >> >> >> >> >>

129

p0 = [0;0.25;0.75]; g = 10; % Numero de generaciones. X = zeros(3,g); X(:,1)=p0; for t=2:g X(:,t) = P*X(:,t-1); end plot(X’) legend(’Clase alta’,’Clase media’,’Clase baja’)

Si quieres puedes cambiar el n´ umero de generaciones y observar que la distribuci´on por clases se estabiliza igualmente. Veamos ahora que nuestra predicci´ on de equilibrio se ajusta a la realidad. Observemos, por ejemplo, qu´e ocurre tras 10 y 100 generaciones: >> >> >> >>

p10 = P^10*p0 err10 = norm(p10 - pinf)*100/norm(p10) P100 = P^100*p0 err100 = norm(p100 - pinf)*100/norm(p100)

Observemos finalmente que el resultado es el mismo para cualquier dato inicial: >> p0 = rand(3,1);p0 = p0/sum(p0) >> p100 = P*p0 >> err100 = norm(p100 - pinf)*100/norm(p100)

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

CAP´ITULO 7. ANIMACIONES CON MATLAB

131

Cap´ıtulo 7

Animaciones con MATLAB Aqu´ı se explican los comandos b´ asicos para realizar una animaci´on y crear una pel´ıcula con ella. Desafortunadamente, a nivel b´asico ´estas s´olo pueden ser realizadas con el programa MATLAB1 . Adem´as, al igual que en el cap´ıtulo sobre Gr´ aficos es importante recordar que al ejecutar cualquier comando de tipo gr´ afico, se obtiene una nueva ventana llamada Figure 1 donde se dibuja el objeto o se realiza el cambio requerido. As´ı, despu´es de ejecutar la primera orden gr´afica, organiza el escritorio de forma que puedas ver a la vez, tanto la ventana de comandos de MATLAB como la ventana Figure 1.

7.1.

Creaci´ on de animaciones

La forma m´as sencilla de producir una animaci´on es utilizando el comando comet introducido en la sesi´ on Gr´ aficos, donde pod´ıamos ver c´omo se trazaba una curva en el plano dada en forma param´etrica. Ahora, para producir animaciones m´ as complicadas necesitamos introducir el comando getframe que nos permitir´ a guardar la imagen (o fotograma) que se acaba de representar en la ventana Figure o ventana gr´afica activa. En el siguiente ejemplo crearemos una funci´ on que devuelva un vector formado por 100 im´agenes. Adem´ as, al ejecutar dicha funci´on obtendremos una animaci´ on. 1

Para realizar animaciones utilizando Octave se recomienda seguir las indicaciones de Karol Krizka dadas en su web http://www.krizka.net/2009/11/06/ creating-animations-with-octave/

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

132

Aprende MATLAB/OCTAVE en 25 horas

Es decir, veremos c´ omo la ventana Figure va cambiando como consecuencia de los comandos que se van ejecutando.

Ejemplo 1. Abrimos el editor de programas de MATLAB y escribimos: function M=string % Animaci´ on para ver como vibra un cord´ on. X=0:0.01:1; n=100; % N´ umero de fotogramas. for j=1:n plot(X,sin(j*pi/5)*sin(pi*X)) axis([0,1,-2,2]) M(j)=getframe(gcf); % Guardamos el fotograma j. end end Ahora, guardamos el archivo creado con el nombre string.m en el directorio de trabajo y volvemos a la ventana de comandos de MATLAB.  figure % Activamos una ventana gr´ afica. IMPORTANTE: Ahora nos aseguramos que la ventana Figure no se cubre con ninguna otra ventana ANTES de teclear la orden siguiente. Vemos la animaci´ on y guardamos los fotogramas en el vector M.  M=string;

7.2.

Pel´ıculas o MOVIES

Una vez creada una animaci´ on nos gustar´a poderla reproducir tantas veces como deseemos. Para ello utilizaremos el comando movie.

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

CAP´ITULO 7. ANIMACIONES CON MATLAB

133

Ejemplo 1. Reproducimos 4 veces la animaci´on M a 25 fotogramas por segundo.  movie(M,4,25) Como pod´eis observar la pel´ıcula se reproduce en la ventana Figure. Sin embargo, MATLAB posee una ventana especial con opciones adecuadas para la reproducci´on de pel´ıculas. El comando movieview reproducir´a la pel´ıcula en ´esta ventana. Ejemplo 2. Reproducimos la animaci´ on M en la ventana adecuada y mostramos el t´ıtulo de la pel´ıcula.  movieview(M,’Cuerda vibrando’) Finalmente, utilizando la funci´ on movie2avi podremos guardar la pel´ıcula generada a partir de una animaci´ on en un fichero AVI para poder visualizarla en cualquier otro programa de reproducci´ on.2 Ejemplo 3. Creamos la pel´ıcula ’string.avi’ a 25 fotogramas por segundo a partir de la animaci´ on M. WINDOWS movie2avi(M,’string.avi’,’fps’,25, ... ’compression’, ’Indeo3’) LINUX movie2avi(M,’string.avi’,’fps’,25, ... ’compression’, ’None’)

7.3.

Ejemplos de pel´ıculas o MOVIES

Recreando una cama el´ astica

2

WINDOWS indicar´ a que la orden debe ejecutarse solamente si el sistema operativo es WINDOWS y LINUX indicar´ a que la orden debe ejecutarse solamente si el sistema operativo es LINUX.

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

134

Aprende MATLAB/OCTAVE en 25 horas Abrimos el editor de programas de MATLAB y escribimos:

function C=cama % Animaci´ on para recrear una cama el´ astica. [x,y]=meshgrid(-1:.1:1); n=200; % N´ umero de fotogramas. for j=1:n t=(2*pi/19)*(j-1); z=2*sin(t)*exp(-x.^2-y.^2); surf(x,y,z) axis([-1,1,-1,1,-2,2]) C(j)=getframe(gcf); % Guardamos el fotograma j. end end Ahora, guardamos el archivo creado con el nombre cama.m en el directorio de trabajo y volvemos a la ventana de comandos de MATLAB.

 figure % Activamos una ventana gr´ afica. IMPORTANTE: Ahora nos aseguramos que la ventana Figure no se cubre con ninguna otra ventana ANTES de teclear la orden siguiente. Vemos la animaci´ on y guardamos los fotogramas en el vector C.  C=cama; Finalmente, reproducimos la animaci´ on C. Primero, lo hacemos a 25 fotogramas por segundo, segundo la reproducimos en la ventana adecuada y finalmente creamos la pel´ıcula cama.avi.

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

CAP´ITULO 7. ANIMACIONES CON MATLAB

 movie(C,1,25)  movieview(C,’Cama El´ astica’) WINDOWS movie2avi(C,’cama.avi’,’fps’,25, ... ’compression’, ’Indeo3’) LINUX movie2avi(C,’cama.avi’,’fps’,25, ... ’compression’, ’None’)

Creando un reloj

Abrimos el editor de programas de MATLAB y escribimos:

function R=reloj % Animaci´ on para ver girar las agujas de un reloj. n=100; % N´ umero de fotogramas. for j=1:n t=0:((2*pi)/1000):(2*pi); plot(cos(t),sin(t)) % Dibujamos el reloj axis square hold on horas=0:12; plot(.9*cos(horas*2*pi/12),.9*sin(horas*2*pi/12),’k*’) hor=pi/2-(j-1)*2*pi/(n-1); % horaria plot([0 .5*cos(hor)],[0 .5*sin(hor)]) min=pi/2-(j-1)*12*2*pi/(n-1); % minutera

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

135

136

Aprende MATLAB/OCTAVE en 25 horas

plot([0 .8*cos(min)],[0 .8*sin(min)]) hold off R(j)=getframe(gcf); % Guardamos el fotograma j. end end Ahora, guardamos el archivo creado con el nombre reloj.m en el directorio de trabajo y volvemos a la ventana de comandos de MATLAB.  figure % Activamos una ventana gr´ afica. IMPORTANTE: Ahora nos aseguramos que la ventana Figure no se cubre con ninguna otra ventana ANTES de teclear la orden siguiente.  R=reloj; % Vemos la animaci´ on y guardamos los fotogramas en el vector R. Finalmente, reproducimos la animaci´ on R. Primero, lo hacemos a 5 fotogramas por segundo, segundo la reproducimos en la ventana adecuada y finalmente creamos la pel´ıcula reloj.avi.  movie(R,1,5)  movieview(R,’Reloj’) WINDOWS movie2avi(R,’reloj.avi’,’fps’,5,’compression’, ’Indeo3’) UNIX movie2avi(R,’reloj.avi’,’fps’,5,’compression’, ’None’)

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

CAP´ITULO 8. ECUACIONES DIFERENCIALES

137

Cap´ıtulo 8

Ecuaciones diferenciales En este cap´ıtulo veremos como resolver num´ericamente ecuaciones diferenciales. Por razones exclusivamente metodol´ogicas, nos centraremos en MATLAB, que tiene diferentes funciones para los distintos m´etodos de resoluci´on de ecuaciones diferenciales, mientr´ as que Octave emplea esencialmente una s´ola funci´on.

8.1.

Ecuaciones Diferenciales Ordinarias

Las diversas funciones que tiene MATLAB para calcular de modo num´erico las soluciones de una ecuaci´ on diferencial ordinaria son ode23, ode45, ode113, ode15s, ode23s, ode23t, ode23tb. Vamos a utilizar ode45, esto es, el m´etodo Runge-Kutta (4,5), por ser el que primero se deber´ıa probar. En caso de que el m´etodo devuelva alg´ un error o sea demasiado lento, se deber´a cambiar a otro m´etodo de resoluci´ on (la ayuda de MATLAB proporciona una muy buena informaci´on sobre qu´e m´etodo utilizar en cada caso). Para pasar una ecuaci´ on diferencial a MATLAB, debemos escribirla como una ecuaci´on diferencial de primer orden, es decir, de la forma x (t) = f (t, x(t)),

t ∈ R, x(t) ∈ Cn , f : R × Cn → Cn .

La funci´on ode45 tiene la siguiente sintaxis: [t,x]=ode45(f,T,x0),

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

138

Aprende MATLAB/OCTAVE en 25 horas

donde f es la funci´ on que define el lado derecho de la ecuaci´on, T es un vector cuyos extremos son los instantes inicial y final de tiempo y x0 es el valor de x(t) en el instante inicial. Consideremos la ecuaci´ on log´ıstica: x = x(x − 1). Podemos calcular la soluci´ on que comienza en t = 0, x = 1/2, entre t = 0 y t = 1, con el comando  f=@(t,x) x*(x-1);  [T,X]=ode45(f,[0,1],[0.5]); Y representarla  plot(T,X) Puedes probar pintando ahora una gr´ afica con las soluciones que comienzan en t = 0 y x = −0.5, x = 0, x = 0.5, x = 1. Para trabajar con ecuaciones de grado superior, debemos transformarlas en un sistema equivalente. Veamos un ejemplo con el oscilador de Van der Pol: x (t) − µ(1 − x2 (t))x (t) + x(t) = 0. Mediante el cambio y(t) = x (t), tenemos x (t) = y(t),

  

 y  (t) = µ(1 − x2 )y − x. 

Escribimos el lado derecho como una funci´on que recibe dos variables, siendo la segunda un vector de longitud dos y devuelve un vector columna de longitud dos.  mu=2;  f=@(t,x) [x(2),mu*(1-x(1)^ 2)*x(2)-x(1)]’; Obtenemos la soluci´ on determinada por la condici´on inicial (x(0), y(0)) = (0, 2):  [t,x]=ode45(f,[0,1000],[0;2]);

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

CAP´ITULO 8. ECUACIONES DIFERENCIALES

139

Y podemos representar bien la evoluci´ on de las coordenadas respecto del tiempo, bien la gr´ afica de (x(t), y(t)).  plot(t,x(:,1),t,x(:,2))  plot(x(:,1),x(:,2)) Prueba a dibujar varias soluciones o la soluci´on con la misma condici´on inicial pero distintos valores del par´ ametro µ.

8.2.

Ecuaciones en derivadas parciales

El comando para resolver num´ericamente ecuaciones en derivadas parciales es pdepe, que resuelve sistemas de ecuaciones parab´olicas o el´ıpticas en una variable espacial x y otra temporal t, de la forma:  ∂  m c(x, t, u, ux )ut = x−m x f (x, t, u, ux ) + s(x, t, u, ux ), ∂x

donde t0 ≤ t ≤ tf , a ≤ x ≤ b y m = 0, 1, 2. Adem´as, hay que proporcionar una condici´on inicial para x cuando t = t0 : u(t0 , x) = v(x), y una condici´on en la frontera (x = a ´ o x = b) de la forma:  pa(t, u) + qa(t)f (a, t, u, ux ) = 0    pb(t, u) + qb(t)f (b, t, u, ux ) = 0. 

Con las anteriores definiciones, la soluci´on se calcular´ıa como: sol = pdepe(m,cfs,v,pqab,x,t); donde cfs es una funci´ on que devuelve un vector resultado de evaluar las funciones c,f,s, pqab es una funci´ on que devuelve un vector resultado de evaluar pa,qa,pb,qb y v es la funci´ on dada por las condiciones fronteras (todas estas funciones habr´ıa que crearlas, bien como archivos “.m”, bien como funciones an´onimas) y x, t ser´ıan los puntos en los que se van a evaluar las variables x y t. Ve´amoslo mejor con un ejemplo, la ecuaci´on del calor en una dimensi´on.

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

140

Aprende MATLAB/OCTAVE en 25 horas

Supongamos que tenemos la siguiente ecuaci´on del calor con condiciones frontera: ut = uxx ,

u(t, 0) = 0, u(t, 1) = 0,

u(0, x) =

2x . 1 + x2

Comparando la ecuaci´ on anterior con la forma general que necesitamos para MATLAB, tenemos: c(t, x, u, ux ) = 1, f (t, x, u, ux ) = ux , s(t, x, u, ux ) = 0, m = 0. y para las condiciones frontera: v(x) =

2x , pa(t, u) = u, qa(t) = 0, pb(t, u) = u − 1, qb(t) = 0. 1 + x2

Debemos definir ahora las funciones auxiliares en archivos de funci´on “.m”. Comencemos con las que definen la ecuaci´ on: function [c,f,s]=cfs(x,t,u,ux) c=1; f=ux; s=0; end La condici´on de frontera para t = t0 se puede definir tambi´en como funci´on an´onima:  v=@(x) 2*x/(1+x^ 2); Las condiciones frontera en los bordes de x tambi´en han de definirse en un archivo “.m”: function [pa,qa,pb,qb]=pqab(xa,ua,xb,ub,t) pa=ua; qa=0; pb=ub-1; qb=0; end Finalmente, definimos la malla de puntos donde vamos a calcular la soluci´on:

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

CAP´ITULO 8. ECUACIONES DIFERENCIALES  x = linspace(0,1,20);  t = linspace(0,2,10); Ahora podemos calcular la soluci´ on:  u = pdepe(0,@cfs,v,@pqab,x,t); y representarla:    

surf(x,t,u); title(’Superficie solucion.’); xlabel(’Distancia x’); ylabel(’Tiempo t’);

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

141

BIBLIOGRAF´IA

143

Bibliograf´ıa 1. G. Borrell i Nogueras, Introducci´ on Informal a Matlab y Octave. http://iimyo.forja.rediris.es/ 2. R. Echevarr´ıa L´ıbano, Breves apuntes para comenzar con MATLAB. http://personal.us.es/echevarria/documentos/APUNTESMATLAB.pdf 3. J. Garc´ıa de Jal´ on, J.I. Rodr´ıguez y J. Vidal, Aprenda Matlab como si estuviera en primero. http://mat21.etsii.upm.es/ayudainf/ aprendainf/Matlab70/matlab70primero.pdf 4. P. Howard, Partial Differential Equations in MATLAB 7.0. Spring 2005 5. B. Hunt, R. Lipsman, J. Rosenberg, K. Coombes, J. Osborn y G. Stuck, A guide to MATLAB for beginners and experienced users. Cambridge University Press, Cambridge, 2006 6. R. Johnson, MATLAB Programming Style Guidelines. www.datatool. com/downloads/matlab_style_guidelines.pdf 7. I. Ojeda Mart´ınez de Castilla y J. Gago Vargas, M´etodos matem´ aticos para estad´ıstica. Manuales UEx, 58, 2008 8. A. Quarteroni y F. Saleri, C´ alculo cient´ıfico con MATLAB y Octave. Springer-Verlag Italia, 2006 9. G. W. Recktenwald, Numerical Methods with Matlab: Implementations and Applications. Prentice-Hall 2001

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

144

Aprende MATLAB/OCTAVE en 25 horas

10. The Connected Curriculum Project: Interactive Learning Materials for Mathematics and Its Applications. Department of Mathematics, Duke University, Durham, USA. http://www.math.duke.edu/education/ ccp/.

© Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF