Вы находитесь на странице: 1из 96

Herramientas Informticas

Paco Arandiga

ndice general
1. Algoritmos bsicos en MATLAB 1.1. Programacin en MATLAB . . . . . . . . . . . . . . . . . . . . . . . 1.1.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2. Introduccin de matrices . . . . . . . . . . . . . . . . . . . . 1.1.3. Operaciones con matrices, operaciones a coordenadas . . . . 1.1.4. Declaraciones, expresiones y variables; almacenamiento de una sesin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.5. Formato de salida . . . . . . . . . . . . . . . . . . . . . . . . 1.1.6. Funciones en MATLAB . . . . . . . . . . . . . . . . . . . . 1.1.7. For, while, if y relaciones . . . . . . . . . . . . . . . . . . 1.1.8. Submatrices y notacin de dos puntos . . . . . . . . . . . . . 1.1.9. Comparacin de la eciencia de algoritmos: etime, cputime, tic, toc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.10. Cadenas de texto, mensajes de error, input . . . . . . . . . . . 1.1.11. Archivos .m . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.12. Grcos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.13. Consulta . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Clculo Matricial Bsico . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1. Normas de vectores . . . . . . . . . . . . . . . . . . . . . . . 1.2.2. Tipos de matrices . . . . . . . . . . . . . . . . . . . . . . . 1.2.3. Matrices simtricas. . . . . . . . . . . . . . . . . . . . . . . 1.3. Solucin ecuaciones no lineales . . . . . . . . . . . . . . . . . . . . 1.3.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2. Mtodos Iterativos . . . . . . . . . . . . . . . . . . . . . . . 1.3.3. Mtodo de la Biseccin . . . . . . . . . . . . . . . . . . . . . 1.3.4. Mtodo de rgula falsi . . . . . . . . . . . . . . . . . . . . . 1.3.5. Mtodo de Newton-Raphson . . . . . . . . . . . . . . . . . . 1.3.6. Mtodo de la secante . . . . . . . . . . . . . . . . . . . . . . 1.3.7. Races mltiples . . . . . . . . . . . . . . . . . . . . . . . . 1.3.8. Problemas resueltos . . . . . . . . . . . . . . . . . . . . . . 1.3.9. Problemas propuestos . . . . . . . . . . . . . . . . . . . . . 2. Latex 1 3 4 4 4 5 6 8 9 11 13 15 15 16 20 22 32 32 34 37 38 38 38 41 44 46 50 52 52 56 58

NDICE GENERAL
3. Clcul Simbolic 3.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Deniendo variables simblicas . . . . . . . . . . . . . . 3.3. Expresiones y ecuaciones simblicas . . . . . . . . . . . . 3.3.1. Substituciones . . . . . . . . . . . . . . . . . . . 3.3.2. Qu variables simblicas hay en F? . . . . . . . . 3.4. Resolucin de ecuaciones . . . . . . . . . . . . . . . . . . 3.5. La funcin inline . . . . . . . . . . . . . . . . . . . . . . 3.5.1. Operadores relacionales y lgicos . . . . . . . . . 3.5.2. La funcin inline . . . . . . . . . . . . . . . . . . 3.6. Dominios, lmites y continuidad . . . . . . . . . . . . . . 3.6.1. Clculo de lmites: Lmites laterales. . . . . . . . . 3.6.2. Continuidad de funciones . . . . . . . . . . . . . 3.7. Simplicadores . . . . . . . . . . . . . . . . . . . . . . . 3.8. Clculo de derivadas. . . . . . . . . . . . . . . . . . . . . 3.9. Aplicaciones de la derivada: Mximos-mnimos-Puntos de Optimizacin. . . . . . . . . . . . . . . . . . . . . . . . . 3.10. Clculo integral e integracin numrica . . . . . . . . . .

2 59 60 61 62 63 64 65 67 68 69 72 74 76 82 85 90 93

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inexin. . . . . . . . . . . . .

Captulo 1 Algoritmos bsicos en MATLAB

1.1. PROGRAMACIN EN MATLAB

1.1.

Programacin en MATLAB

1.1.1. Introduccin
MATLAB es un sistema interactivo basado en matrices para clculos cientcos y de ingeniera. Se pueden resolver problemas numricos relativamente complejos sin escribir un programa en realidad. El nombre MATLAB es una abreviatura para MATrix LABoratory. El propsito de estas notas es ayudar en la iniciacin a MATLAB. La mejor forma de utilizarlas es poner manos a la obra. Se aconseja, en general, trabajar en el ordenador a la vez que se leen las notas, as como a experimentar libremente con ejemplos. Se puede utilizar la ayuda de la instruccin help para una informacin ms detallada. Despus de entrar en MATLAB, la instruccin help mostrar una lista de funciones para las que se puede obtener ayuda mientras se est trabajando; la instruccin help nombre_de_funcin nos dar informacin sobre una funcin especca. As, la instruccin help eig, nos dar informacin sobre la funcin eig, que calcula los autovalores de una matriz. Se pueden ver algunas de las capacidades de MATLAB usando la instruccin demo. El alcance y la potencia de MATLAB van ms all de lo que podemos ver en estas notas. En algn momento puede desear una informacin ms detallada. Es el momento de consultar algun manual ms avanzado.

1.1.2. Introduccin de matrices


MATLAB trabaja esencialmente con un solo tipo de objetos: una matriz numrica rectangular con entradas posiblemente complejas; todas las variables representan matrices. A veces, las matrices 1 1 se consideran escalares, y las matrices con una sola la o columna se consideran como vectores. Hay varias formas diferentes para introducir una matriz en MATLAB. A saber: Introduciendo una lista explcita de elementos, Generndola mediante funciones y declaraciones, Crendola en un archivo .m (ver secciones 1.1.8 y 1.1.10) Cargndola de un archivo de datos externo (lo veremos ms adelante). Por ejemplo, cualquiera de las declaraciones A = [1 2 3; 4 5 6; 7 8 9] y

1.1. PROGRAMACIN EN MATLAB


A = 1 4 7 [ 2 5 8

3 6 9 ]

crea la matriz 33 que se espera y la asigna a una variable A. Intntelo. Los elementos en una la de una matriz pueden separarse tanto por comas como por espacios en blanco. Cuando alguno de los nmeros se escribe en forma exponencial (por ejemplo 2.34e-9), deben evitarse los espacios en blanco. La escritura de una matriz grande debe hacerse preferentemente en un archivo .m, donde es ms sencillo corregir errores (ver secciones 1.1.8 y 1.1.10)). Las funciones internas rand, magic, y hilb, por ejemplo, proporcionan una forma sencilla para crear matrices con las que experimentar. La instruccin rand(n), resp. rand(m,n), crear una matriz n n, resp. m n, con entradas aleatoriamente generadas, distribuidas uniformemente entre 0 y 1. magic(n) crear una matriz cuadrada mgica (las las y las columnas suman la misma cantidad) con entradas enteras; hilb(n) crear la matriz de Hilbert de orden n, la reina de las matrices mal condicionadas. m y n, por supuesto, denotan enteros positivos. Tambin se pueden crear matrices utilizando bucles for (ver seccin 1.1.6). Intntelo. Las entradas individuales de una matriz o de un vector se pueden obtener poniendo los ndices entre parntesis de la forma usual. Por ejemplo, A(2, 3) denota la entrada en la segunda la y tercera columna de la matriz A y x(3) denota la tercera coordenada del vector x. Intntelo. Slo se pueden usar como ndices de vectores y de matrices enteros positivos.

1.1.3. Operaciones con matrices, operaciones a coordenadas


Disponemos en MATLAB de las siguientes operaciones con matrices: + adicin sustraccin multiplicacin potenciacin traspuesta \ divisin izquierda / divisin derecha Estas operaciones para matrices se aplican tambin a escalares (matrices 11). Si los tamaos de las matrices son incompatibles para la operacin matricial se obtiene un mensaje de error, exceptuando el caso en que uno de los operandos sea un escalar y el otro una matriz (para la adicin, sustraccin, divisin y multiplicacin). En esta situacin se opera el escalar con cada trmino de la matriz.

1.1. PROGRAMACIN EN MATLAB

La divisin matricial merece un comentario especial. Si A es una matriz invertible y b es una columna, resp. la, compatible, entonces >> x=A\b es la solucin de A x = b y, resp., >> x=A/b es la solucin de x A = b. En la divisin izquierda, si A es cuadrada, se factoriza utilizando eliminacin gaussiana. Con los factores se resuelve A x = b. Si la matriz A no es cuadrada, se factoriza utilizando la ortogonalizacin de Householder con pivoteo de columnas. Con los factores se resuelve el sistema indeterminado o sobredeterminado en el sentido de los mnimos cuadrados. La divisin derecha se dene a partir de la izquierda por b/A = (A \b ) . Operaciones a coordenadas. Las operaciones de adicin y sustraccin operan intrnsecamente a coordenadas pero las otras operaciones matriciales dadas antes no: Son operaciones matriciales. Es importante observar que para estas otras operaciones, , , \, y /, puede hacerse que operen a coordenadas precediendolas de un punto. Por ejemplo, tanto >> [1,2,3,4].*[1,2,3,4] como >> [1,2,3,4].^2 darn >> [1,4,9,16] Intntelo. Esto es particularmente til cuando se utilizan los grcos de MATLAB.

1.1.4. Declaraciones, expresiones y variables; almacenamiento de una sesin


MATLAB es un lenguaje de expresiones; las expresiones que se escriben son interpretadas y evaluadas. Las instrucciones de MATLAB son, normalmente, de la forma variable = expresin, o simplemente expresin Las expresiones se componen, usualmente, a partir de operadores, funciones y nombres de variables. La evaluacin de una expresin produce una matriz, que se

1.1. PROGRAMACIN EN MATLAB

muestra en pantalla, y se asigna a la variable para su posterior uso. Si se omiten la variable y el signo =, se crea una variable llamada ans (por answer) a la que se asigna el resultado de la expresin. Una instruccin termina, normalmente, con el retorno de carro (comando return). Si se desea continuar una expresin en la lnea siguiente, basta escribir tres (o ms) puntos antes del retorno de carro. Si por el contrario, deseamos escribir varias instrucciones en una misma lnea, podemos hacerlo separandolas por comas o puntos y comas. Si el ltimo carcter de una instruccin es un punto y coma el resultado no se mostrar en pantalla, aunque por supuesto se realizar la asignacin. Esto es esencial para evitar prdidas de tiempo al mostrar los resultados intermedios. MATLAB distingue las letras maysculas de las minsculas en los nombres de instrucciones, funciones y variables. As, resolvente no es lo mismo que ReSoLvEnTe. La instruccin who muestra las variables que se encuentran en el espacio de trabajo. Por ejemplo, Con who se lista las variables que tenemos. Per ejemplo, >> who Your variables are: A ans

Para ver el tamao de las variables hemos de escribir whos y aparecer: Name A ans Size 2x2 1x1 Bytes 32 8 Class double double

Cada elemento de una matriz real requiere 8 bytes de memoria. Escribiendo what aparecer M-files in the current directory /home/paco/manual/matlab obj peli plotf1 pn1 plotf2 pn2 prod1 prod2 prod3 prod4 tra trape

afun

esto es, todas *m les (que ya explicaremos ms adelante en que consisten) que tenemos en el directorio en el que estamos treballajando. Hay otros comandos que tambien se pueden ejecutar directamente desde MATLAB como cd, ls, mkdir, etc. Para eliminar una variable de la memoria se utiliza la instruccin clear nombre_variable. Si se escribe slo clear se borran todas las variables no permanentes. La variable permanente eps (psilon) da la precisin de la mquinaalrededor de 1016 en la mayora de ellas. Es til para determinar la tolerancia en procesos iterativos.

1.1. PROGRAMACIN EN MATLAB

Cualquier tipo de clculo, grco, o impresin puede detenerse sin salir del programa con CTRL-C (CTRL-BREAK en PC). Almacenamiento de sesiones. Cuando salimos de MATLAB se pierden todas las variables. Para evitarlo se puede utilizar la instruccin save antes de salir. Esto hace que las variables se almacenen en el archivo de disco matlab.mat. Al acceder de nuevo a MATLAB, se pueden recuperar todas las variables con la instruccin load. Con diary se pueden salvar los datos en un chero que despues se puede editar. Habria que escribir >> diary nom >> . . . >> >>diary off y todo lo que hace entre diary nom y diary off queda arxivado en un chero ASCII llamado nom. Al terminar, se puede editar el archivo como se desee. Con save name podemos salvar datos en un chero binario llamado name.dat. Los datos almacenados aqu pueden ser recuperados con load. Si queremos salvar los datos en formato ASCII lo podemos hacer de la forma siguiente: manera: >> A=rand(4,2); >> save enter.dat A -ascii que crea un chero llamado enter.dat que contiene 3.4119357e-01 5.3407902e-01 7.2711322e-01 3.0929016e-01 8.3849604e-01 5.6807246e-01 3.7041356e-01 7.0273991e-01

1.1.5. Formato de salida


Aunque todos los clculos en MATLAB se efectan en doble precisin, el formato de la salida en pantalla puede ser controlado con las siguientes instrucciones. format format format format short long short e long e coma ja con 4 decimales (el defecto) coma ja con 14 decimales notacin cientca con 4 decimales notacin cientca con 15 decimales

Una vez que se ordena un formato, se mantiene hasta que se ordena un cambio. La orden format compact evitar la mayor parte de las lneas en blanco, con lo que se puede mostrar ms informacin en pantalla. Es independiente de las dems instrucciones de formato.

1.1. PROGRAMACIN EN MATLAB

Ejercicio 1.1.1. Calcular A=rand(4,2) y ver como queda en cada uno de los formatos anteriores.

1.1.6. Funciones en MATLAB


Funciones para la construccin de matrices Las siguientes funciones estn disponibles en MATLAB: eye zeros ones diag triu tril rand hilb magic toeplitz matriz identidad matriz de ceros matriz de unos ver ms adelante parte triangular superior de una matriz parte triangular inferior de una matriz matriz generada aleatoriamente matriz de Hilbert matriz mgica ver help toeplitz

Por ejemplo, zeros(m,n) produce una matriz nula mn, y zeros(n) produce otra cuadrada de orden n; si A es una matriz, entonces zeros(A) produce una matriz de ceros del mismo orden que A. Si x es un vector, diag(x) es la matriz diagonal con x en su diagonal; si A es una matriz cuadrada, diag(A) es un vector formado por la diagonal de A. Qu ser entonces diag(diag(A))? Intntelo. Las matrices se pueden construir por bloques. Por ejemplo, si A es 3 3, entonces >> B = [A, zeros(3,2); zeros(2,3), eye(2)] dar una cierta matriz 5 5. Intntelo. Funciones escalares Algunas funciones de MATLAB operan esencialmente sobre escalares, aunque lo hacen tambin sobre matrices (elemento a elemento). Las funciones ms comunes entre estas son: sin cos tan asin acos atan exp log(natural) rem(resto) abs sqrt sign round f loor ceil

1.1. PROGRAMACIN EN MATLAB


Funciones vectoriales

10

Otras funciones de MATLAB operan fundamentalmente sobre vectores (la o columna), aunque tambin pueden operar sobre matrices m n (m 2) haciendolo en este caso columna a columna, produciendo, por tanto, un vector la que contiene el resultado de su aplicacin a cada columna. Para conseguir que acten por las basta usar la traspuesta; por ejemplo, mean(A). Veamos algunas de estas funciones: max min sort sum prod median mean std any all

Por ejemplo, la entrada mxima de un matriz A se obtiene con max(max(A)) en vez de max(A). Intntelo. Funciones matriciales Las funciones matriciales ms tiles de MATLAB son las siguientes: size eig chol svd inv lu qr hess schur rref expm sqrtm poly det norm cond rank tamao autovalores y autovectores factorizacin de Cholesky descomposicin en valores singulares inversa factorizacin LU factorizacin QR forma de Hessenberg descomposicin de Schur forma escalonada reducida por las matriz exponencial matriz raz cuadrada polinomio caracterstico determinante norma 1, norma 2, norma de Frobenius, norma nmero de condicin en la norma 2 rango

Las funciones de MATLAB admiten argumentos de salida simples o mltiples. Por ejemplo, y = eig(A) , o simplemente eig(A) genera un vector columna conteniendo los autovalores de A mientras que [U,D] = eig(A) produce una matriz U cuyas columnas son los autovectores de A y una matriz diagonal D con los autovalores de A en su diagonal. Pruebe.

1.1. PROGRAMACIN EN MATLAB

11

1.1.7. For, while, if y relaciones


Bsicamente, las instrucciones para el control de ujo de MATLAB operan como en la mayor parte de los lenguajes usuales. for. Por ejemplo, las instrucciones >> x = []; for i = 1:n, x=[x,i^2], end o >> x = []; >> for i = 1:n >> x = [x, i^2] >> end darn como resultado un cierto vector mientras que >> x = []; for i = n:-1:1, x=[x,i^2], end dar el mismo vector en orden inverso. Pruebe con ellas. Las instrucciones >> for i = 1:m >> for j = 1:n >> H(i, j) = 1/(i+j-1); >> end >> end >> H producirn e imprimirn en pantalla la matriz de Hilbert m n. El punto y coma de la instruccin interior suprime la impresin no deseada de los resultados intermedios mientras que el ltimo H muestra el resultado nal. while. La forma general de un bucle while es while relacin instrucciones end Las instrucciones se repetirn mientras la relacin sea cierta. Por ejemplo, dado un nmero a, las instrucciones siguientes calculan y muestran el menor entero no negativo n tal que 2n a: >> >> >> >> >> n = 0; while 2^n < a n = n + 1; end n

1.1. PROGRAMACIN EN MATLAB

12

if. La forma general de un bucle if simple es if relacin instrucciones end Las instrucciones se ejecutarn slo si la relacin es cierta. Tambin son posibles las ramicaciones mltiples, como se ilustra con >> >> >> >> >> >> >> if n < 0 paridad = 0; elseif rem(n,2) == 0 paridad = 2; else paridad = 1; end

Si slo tenemos dos ramicaciones podemos omitir, desde luego, la porcin correspondiente a elseif. Relaciones. Los operadores relacionales en MATLAB son < > <= >= == = menor que mayor que menor o igual que mayor o igual que igual no igual.

Hagamos notar que se usa = en las asignaciones mientras que para las relaciones se usa ==. Las relaciones pueden conectarse o cuanticarse por los operadores lgicos & | y o no.

Cuando se aplican a escalares, una relacin es realmente el escalar 1 o 0 dependiendo de si la relacin es verdadera o falsa: Ejercicio 1.1.2. Ver los resultados obtenidos con >> 3 < 5, 3 > 5, 3 == 5, 3 == 3 Cuando se aplica a matrices del mismo orden, una relacin entre ellas da lugar a una matriz de ceros y unos, dando el valor de la relacin entre las correspondientes entradas. Ejercicio 1.1.3. Ver el resultado obtenido con >> a = rand(5), b = triu(a), a == b.

1.1. PROGRAMACIN EN MATLAB

13

Cuando se utiliza una relacin entre matrices en un bucle while o if, la relacin se entiende verdadera si cada una de las entradas de la matriz de relacin es no nula. Por tanto, si se quiere ejecutar algo cuando las matrices A y B sean iguales, se puede escribir: if end pero si se desea ejecutar la misma instruccin si A y B son distintas, hay que recurrir a: if end o, ms simplemente, if end Recalcamos que la aparentemente obvia if A ~= B, algo, end A == B algo else any(any(A ~= B)) algo A == B algo

no har lo que deseamos ya que la instruccin slo se ejecutar si todas las entradas de A son distintas de las de B. Las funciones any y all pueden utilizarse de forma creativa para reducir relaciones entre matrices a relaciones entre vectores y escalares. Se requieren dos anys en el ejemplo anterior ya que any es un operador vectorial (ver seccin 1.1.6).

1.1.8. Submatrices y notacin de dos puntos


Los vectores y submatrices son utilizados a menudo en MATLAB para conseguir efectos de manipulacin bastante complejos. La notacin de dos puntos (que se utiliza para generar vectores y submatrices), y la indexacin por vectores son las llaves para una manipulacin eciente de estos objetos. Su uso de forma creativa permite minimizar el nmero de bucles (que enlentecen a MATLAB) y hacen que las instrucciones sean ms simples y legibles. Debe hacerse un esfuerzo especial para familiarizarse con esta notacin. La expresin 1:5 (que ya encontramos en los bucles for) es realmente un vector la: el [1 2 3 4 5]. Los nmeros no tienen que ser enteros ni el incremento uno. Por ejemplo,

1.1. PROGRAMACIN EN MATLAB


>> 0.2:0.2:1.2 da como resultado >> [0.2 0.4 0.6 0.8 1.0 1.2]

14

mientras que con >> 5:-1:1 se obtiene el vector >> [5 4 3 2 1] Las siguientes instrucciones, por ejemplo, generarn una tabla de senos. Pruebe. >> x = [0.0:0.1:2.0]; >> y = sin(x); >> [x y] Hagamos notar que al operar sin a coordenadas, produce un vector y a partir de x. La notacin de dos puntos permite acceder a submatrices. Por ejemplo, A(1:4,3) es el vector columna con las cuatro primeras entradas de la tercera columna de A. Dos puntos sin ms especicacin denotan una la o columna completa: A(:,3) es la tercera columna de A, y A(1:4,:) son las cuatro primeras las. Se pueden usar como ndices vectores enteros arbitrarios: A(:,[2 4]) est formada por las columnas segunda y cuarta de A. Estos ndices se pueden usar a ambos lados de una instruccin de asignacin: A(:,[2 4 5]) = B(:,1:3) reemplaza las columnas 2, 4 y 5 de A por las tres primeras de B. Se muestra y asigna la matriz A alterada completa. Pruebe. Las columnas 2 y 4 de A pueden multiplicarse por la derecha por una matriz 2 2: >> A(:,[2,4]) = A(:,[2,4])*[1 2;3 4] Ejercicio 1.1.4. Dado >> A=round(10*rand(4,5)) calcular >> >> >> >> >> >> A(1:4,3) A(:,3) A(1:4,:) A(:,[2 4]) B; A(:,[2 4 5]) = B(:,1:3)} A(:,[2,4]) = A(:,[2,4])*[1 2;3 4]

Si denotamos por x un vector con n componentes, cul es el efecto de la instruccin x = x(n:-1:1)? Haga la prueba. Para comprobar la utilidad de esta notacin, comparar estas instrucciones de MATLAB con una rutina de Pascal, FORTRAN, o C que d los mismos resultados.

1.1. PROGRAMACIN EN MATLAB

15

1.1.9. Comparacin de la eciencia de algoritmos: etime, cputime, tic, toc


La funcin clock da la hora actual aproximada hasta la centsima de segundo (ver help clock). Dados dos tiempos t1 y t2, etime(t2,t1) proporciona el tiempo transcurrido de t1 a t2. Se puede, por ejemplo, medir el tiempo que requiere la resolucin de un sistema de ecuaciones dado Ax = b usando eliminacin gaussiana como sigue: >> tiempo = clock; x = A\b; tiempo = etime(clock,tiempo) Hagamos notar que, en mquinas que operan a tiempo compartido, etime no es una medida able de la eciencia de un algoritmo ya que la velocidad de ejecucin depende de lo ocupada que est la mquina en un momento determinado. La funcin cputime da el tiempo de CPU en segundos que ha sido utilizado por MATLAB desde que se inicio la sesin. As >> t1 = cputime; x = A\b; cputime-t nos da el tiempo CPU que se ha utilizado para calcular x=A\b. Puede ser utilizado para calcular tiempos parciales entre distintas operaciones. Con los comandos tic, toc calculamos el tiempo trancurrido entre uno y el otro. Por ejemplo, >> tic, x = A\b; toc

1.1.10. Cadenas de texto, mensajes de error, input


Las cadenas de texto se introducen en MATLAB entre comillas simples. Por ejemplo, >> s = Esto es una prueba asigna la cadena de texto dada a la variable s. Las cadenas de texto pueden mostrarse con la funcin disp. Por ejemplo: >> disp(Este mensaje se est mostrando aqu) Los mensajes de error se muestran mejor con la funcin error >> error(Lo siento, la matriz debe ser sim\etrica) ya que sta hace que la ejecucin salga del archivo .m. En un archivo .m el usuario puede ser avisado para introducir datos interactivamente con la funcin input. Si MATLAB se encuentra, por ejemplo, con la instruccin >> iter = input(Introduzca el nmero de iteraciones: ) la cadena entre comillas se muestra y la ejecucin se detiene mientras el usuario introduce los datos. Tras pulsar el retorno de carro los datos se asignan a la variable iter y contina la ejecucin.

1.1. PROGRAMACIN EN MATLAB

16

1.1.11. Archivos .m
MATLAB puede ejecutar una sucesin de instrucciones almacenadas en archivos de disco. Estos archivos se denominan archivos .m", debido a que su sujo debe ser m". Gran parte del trabajo con MATLAB ser el de crear y renar archivos .m. Hay dos tipos de archivos .m: archivos de instrucciones y archivos de funciones. Archivos de instrucciones. Un archivo de instrucciones consiste en una sucesin de instrucciones normales de MATLAB. Si tuviramos un archivo denominado nombre.m, las instrucciones del archivo pueden ser ejecutadas sin ms que escribir la instruccin nombre. Las variables en un archivo de instrucciones son globales y, por tanto, cambiarn los valores del espacio de trabajo. Los archivos de instrucciones son utilizados a menudo para introducir datos en una matriz grande. En un archivo de este tipo es bastante sencillo corregir los errores sin tener que repetir todo el trabajo. Si, por ejemplo, se escribe en el archivo datos.m A = [ 1 2 3 4 5 6 7 8 ]; entonces la instruccin de MATLAB datos har que se efecte la asignacin especicada en datos.m. Un archivo .m puede hacer referencia a otros, incluyendo a l mismo. Archivos de funciones. Los archivos de funciones hacen que MATLAB tenga capacidad de crecimiento. Se pueden crear funciones especcas para un problema concreto, y, a partir de su introduccin, tendrn el mismo rango que las dems funciones del sistema. Las variables en las funciones son locales aunque se pueden declarar las variables para que sean globales. Veremos, en primer lugar, un ejemplo sencillo de archivo de funcin: function a = ental(m,n) %ENTAL Matriz entera generada aleatoriamente. % ental(m,n) produce una matriz mxn con entradas % enteras entre 0 y 9 a = floor(10*rand(m,n)); Una versin ms general de esta funcin es la siguiente: function a = ental(m,n,a,b) %ENTAL Matriz entera generada aleatoriamente. % ental(m,n) produce una matriz mxn con entradas % enteras entre 0 y 9 % ental(m,n,a,b) produce las entradas de la matriz entre a y b. if nargin < 3, a = 0; b = 9; end a = floor((b-a+1)*rand(m,n))+a;

1.1. PROGRAMACIN EN MATLAB

17

Esto debe escribirse en el archivo ental.m (correspondiente al nombre de la funcin). La primera lnea declara el nombre de la funcin, argumentos de entrada, y argumentos de salida; sin esta lnea el archivo sera uno de instrucciones. La instruccin >> z = ental(4,5), por ejemplo, har que los nmeros 4 y 5 pasen a las variables m y n en el archivo de funcin y el resultado se asigna a la variable z. Como las variables en un archivo de funcin son locales, sus nombres son independientes de los que se encuentren en el espacio de trabajo. Hagamos notar que el uso de nargin (nmero de argumentos de entrada) permite asignar un valor por defecto a una variable que se omitacomo a y b en el ejemplo. Una funcin puede tener tambin argumentos de salida mltiples. Por ejemplo: function [media, desv] = estad(x) %ESTAD Media y desviacin tpica. Para un vector x, % estad(x) da la media y la desviacin tpica de x. % Para una matriz x, estad(x) da dos vectores fila conteniendo, % resp., la media y la desviacin tpica de cada columna. [m n] = size(x); if m == 1 m = n; % caso de un vector fila end media = sum(x)/m; desv = sqrt(sum(x.^2)/m - media.^2) Una vez situado en el archivo de disco estad.m, la instrucin de MATLAB >> [xm, xd] = estad(x), por ejemplo, asignar la media y la desviacin tpica de x a las variables xm y xd, respectivamente. Cuando se dispone de una funcin con argumento de salida mltiple, se pueden efectuar asignaciones simples. Por ejemplo, >> xm = estad(x) (no son necesarios los corchetes alrededor de xm) asignar la media de x a xm. El smbolo % indica que el resto de la lnea es un comentario; MATLAB ignorar el resto de la lnea. Las primeras lneas de comentario, que documentan el archivo, son accesibles con la instruccin help. As, para que se muestren en pantalla basta escribir help estad. Dicha documentacin debe incluirse siempre en un archivo de funcin. Esta funcin ilustra algunas de las formas en que MATLAB puede usarse para obtener un cdigo eciente. Hagamos notar, por ejemplo, que x.2 es la matriz de

1.1. PROGRAMACIN EN MATLAB

18

los cuadrados de las entradas de x, que sum es una funcin vectorial (seccin 1.1.6), que sqrt es una funcin escalar (seccin 1.1.7), y que la divisin en sum(x)/m opera una matriz con un escalar. La siguiente funcin, que da el mximo comn divisor de dos enteros va el algoritmo de Euclides, ilustra el uso de un mensaje de error (ver seccin siguiente). function a = mcd(a,b) % MCD Mximo comn divisor % mcd(a,b) es el mximo comn divisor de a y b no nulos a la vez. a = round(abs(a)); b = round(abs(b)); if a == 0 & b == 0 error(El mcd no est definido si ambos nmeros son nulos) else while b ~= 0 r = rem(a,b); a = b; b = r; end end MATLAB esta preparado pera hacer operacions con matrices y vectores ms rpido que si las programaramos como lo hariamos si no existieran esas operaciones directas. As, es conveniente vectoritzar el algoritmeo al mximo en las M-las pera obtener algoritmos ms rpidos. Siempre que sea posible hay que convertir secuencias for y while en operaciones matriciales o vectoriales. Por ejemplo, es equivalente calcular >> i=0; >> for t=0:0.001:10; >> i=i+1; >> y(i)=sin(t); >> end que >> t=0:0.001:10; >> y=sin(t); A pesar de que en MATLAB no es necesario predimensionar los vectores a veces puede ser conveniente hacerlo. Si no se pre-dimensionan, MATLAB redimensiona los vectores cada paso de la iteracin. Esto se elimina predimensionando y, de esta forma, lo calcula mas rpidamente. Para predimensionar (hay que saber la dimensin que tendr el vector y) hay que hacer y=zeros(1,10001). Ejercicio 1.1.5. Comparar la diferencia, en tiempo computacional, de ejecutar los dos programas anteriores para evaluar y=sin(t) sin tener los vectores predimensionados (hacer clear t y previamente) y ejecutarlos despues de haberlos predimensionado previamente (t=zeros(1,10001);y=t;.

1.1. PROGRAMACIN EN MATLAB

19

En MATLAB, dados dos vectores v i u de dimensin n 1 es equivalente, calcular su producto interior escribiendo p=v*u que haciendo function c=prodi(a,b) %producto interior for i=1:n p(i)=v(i)*u(i); end Grcies a esta capacidad tenemos que si queremos multiplicar dos matricess, las siguientes funciones nos dan el mismo resultado: function C=prod1(A,B) %Producto de la matrices A y B [n,m]=size(A); [p,q]=size(B); for i=1:n for j=1:m C(i,j)=0; for k=1:q C(i,j)=C(i,j)+A(i,k)*B(k,j); end end end function C=prod2(A,B) %Producto de la matrices A y B [n,m]=size(A); [p,q]=size(B); for i=1:n for j=1:q C(i,j)=A(i,:)*B(:,j); end end function C=prod3(A,B) %Producto de la matrices A y B [n,m]=size(A); for i=1:n C(i,:)=A(i,:)*B(:,:); end function C=prod3(A,B) %Producto de la matrices A y B C(:,:)=A(:,:)*B(:,:); %Aco es equivalent a C=A*B;

1.1. PROGRAMACIN EN MATLAB

20

Si la matriz tiene una estructura especial podemos aprovecharla para hacer menos operaciones. Por ejemplo, si queremos evaluar C = A B con A= A11 0 0 A22 ; B= B11 0 0 B22 (1.1)

siendo A11, A22, B11 y B22 matrices de dimensin n n, con cualquiera de las funciones prod anteriores estaramos muchas veces multiplicando por cero y, por tant, haciendo operaciones no necesarias. Obtendriamos el mismo resuldo haciendo [n,m]=size(A11); C=[A11*B11, zeros(n);zeros(n),A22*B22]; pero con muchas menos operaciones. Ejercicio 1.1.6. Dadas las matrices >> A11=hilb(20); A22=magic(20); B11=pascal(20); B22=rand(20); (utilizar el comando help para ver que matrices hemos obtenido), queremos evaluar (1.1), hacerlo utilizando las distintas alternativas. Calcular el tiempo necesario para cada una de las alternativas (Utilizar las funciones de MATLAB ETIME, TIC, TOC, CLOCK i/o CPUTIME) y compararlos.

1.1.12. Grcos
MATLAB puede producir grcos planos y grcos de malla de supercies tridimensionales. Para ver algunas de sus posibilidades escriba plot demo. Grcos planos. La instruccin plot crea grcos en el plano XY; si x e y son vectores de la misma longitud, la orden plot(x,y) accede a la pantalla grca y realiza un grco plano de los elementos de x contra los elementos de y. Por ejemplo, podemos dibujar la grca de la funcin seno sobre el intervalo [4, 4] con las instrucciones siguientes: x = -4:.01:4; y = sin(x); plot(x,y) Intntelo. El vector x es una particin del dominio con paso 0.01 mientras que y es un vector (sin es vectorial) con los valores que toma el seno en los nodos de esta particin. Para volver a la pantalla alfanumrica desde la grca, se pulsa cualquier tecla. Por el contrario, para acceder a la pantalla grca, se usa la orden shg (show graph). Si su mquina soporta ventanas mltiples con una ventana grca aparte, puede desear mantener la ventana grca expuesta aunque a un lado y la ventana alfanumrica activa. 2 Como un segundo ejemplo, puede dibujar la grca de y = ex sobre el intervalo [1,5, 1,5] como sigue:

1.1. PROGRAMACIN EN MATLAB


x = -1.5:.01:1.5; y = exp(-x.^2); plot(x,y)

21

Hagamos notar que est precedido por un punto para asegurarnos que opera a coordenadas (ver seccin 1.1.2). Pueden hacerse tambin grcos de curvas denidas paramtricamente. Por ejemplo, t=0:.001:2*pi; x=cos(3*t); y=sin(2*t); plot(x,y) La instruccin grid har un cuadriculado en el grco actual. Pueden ponerse ttulos, comentarios en los ejes o en cualquier otra parte con los siguientes comandos que tienen una cadena como argumento: title ttulo del grco xlabel comentario en el eje x ylabel comentario en el eje y gtext texto posicionado interactivamente text texto posicionado mediante coordenadas Por ejemplo, la instruccin title(La funci\on m\as bella) proporciona un ttulo al grco. El comando gtext(La mancha) permite posicionar una cruz en el grco con las echas o el ratn, donde se situar el texto cuando se pulse cualquier tecla. Por defecto, los ejes se autoescalan. Para evitarlo se usa el comando axis. Si c = [xm , xmx , ym , ymx ] es un vector con 4 elementos, entonces axis(c) establece el n a n a escalado de ejes a los lmites prescritos. axis, por s mismo congela el escalado actual para grcos subsecuentes; Escribiendo axis de nuevo volvemos al autoescalado. El comando axis(square) asegura que se use la misma escala en ambos ejes. Dos formas de obtener dibujos mltiples se ilustran con >> x=0:.01:2*pi;y1=sin(x);y2=sin(2*x);y3=sin(4*x); >> plot(x,y1,x,y2,x,y3) y formando una matriz Y conteniendo los valores funcionales como columnas >> x=0:.01:2*pi; Y=[sin(x), sin(2*x), sin(4*x)]; >> plot(x,Y)} Otra forma es con hold. El comando hold congela la pantalla grca actual de forma que los grcos posteriores se sobreimponen en ella. Escribiendo hold de nuevo se libera el hold. Los comandos hold on y hold off tambin se pueden utilizar. Se pueden evitar los tipos de lnea y de punto por defecto. Por ejemplo, >> x=0:.01:2*pi; y1=sin(x); y2=sin(2*x); y3=sin(4*x); >> plot(x,y1,--,x,y2,:,x,y3,+)}

1.1. PROGRAMACIN EN MATLAB

22

produce lneas a trazos y de puntos para las dos primeras, mientras que para la tercera se obtiene el smbolo + en cada nodo. Los tipos de lneas y de puntos son: Tipos de lnea: slido (-), a trazos (-). puntos (:), punto y trazo (-.) Tipos de puntos: punto (.), ms (+), estrella (*), crculo (o), equis (x) Ver help plot para los colores de las lneas y puntos. El comando subplot se usa para dividir la pantalla de forma que puedan verse hasta cuatro grcos a la vez. Ver help subplot. Grcos de malla de supercies tridimensionales. Los grcos de malla de supercies tridimensionales se hacen con la funcin mesh. La instruccin mesh(z) crea un grco tridimensional en perspectiva de la matriz z. La supercie de malla est denida por las coordenadas z de los puntos sobre un cuadriculado rectangular en el plano XY. Por ejemplo, pruebe con mesh(eye(10)). Para dibujar la grca de una funcin z = f (x, y) sobre un rectngulo, se denen en primer lugar los vectores xx e yy que dan particiones de los lados del rectngulo. Con la funcin meshdom (mesh domain) se crea una matriz x, en la que cada la es igual a xx, y de igual forma una matriz y, con todas sus columnas iguales a yy, como sigue: [x,y] = meshdom(xx,yy); Entonces se computa la matriz z, obtenida evaluando f entrada a entrada sobre las matrices x e y, para aplicarle la funcin mesh. 2 2 Se puede, por ejemplo, dibujar la grca de z = ex y sobre el cuadrado [2, 2] [2, 2] como sigue (intntelo): >> >> >> >> >> xx = -2:.1:2; yy = xx; [x,y] = meshdom(xx,yy); z = exp(-x.^2 - y.^2); mesh(z) Se podra, desde luego, cambiar las tres primeras lneas en lo anterior por >> [x,y] = meshdom(-2:.1:2, -2:.1:2); Para ms detalles sobre mesh, ver la Gua del usuario. Consulte la ayuda para plot3, mesh, y surf.

1.1.13. Consulta
Hay muchas caractersticas de MATLAB que no pueden incluirse en estas notas introductorias. Mostraremos a continuacin algunas de las funciones disponibles en MATLAB, agrupadas por reas (Fuente: MATLAB Users Guide, versin 3.5.). Use la instruccin help o consulte la Gua del usuario para una informacin ms detallada sobre las funciones. Hay muchas funciones aparte de estas. Existen, en particular, varias cajas de herramientas de funciones para reas especcas; entre ellas, las de proceso de seales, teora de control, control robusto, identicacin de sistemas, optimizacin, splines,

1.1. PROGRAMACIN EN MATLAB

23

quimiometra, -anlisis y sntesis, identicacin, y redes neurales Las cajas de herramientas, que son opcionales, pueden no estar instaladas en su sistema.. Para explorar siempre se puede usar la instruccin help.

help demo who what size length clear computer C exit quit

G ENERAL ayuda demostraciones muestra variables en memoria muestra archivos .m en el disco nmero de las y columnas longitud de un vector limpia el espacio de trabajo tipo de computadora interrupcin local salida de MATLAB lo mismo que exit

O PERADORES MATRICIALES + suma resta multiplicacin / divisin derecha \ divisin izquierda potenciacin conjugada traspuesta

O PERADORES PUNTUALES + suma resta . multiplicacin ./ divisin derecha .\ divisin izquierda . potenciacin . traspuesta

O PERADORES L GICOS Y R ELACIONALES < menor que & y <= menor o igual que | o > mayor que no >= mayor o igual que == igual = no igual

1.1. PROGRAMACIN EN MATLAB


C ARACTERES ESPECIALES = instruccin de asignacin [ usado para formar vectores y matrices ] ver [ ( precedencia aritmtica ) ver ( . punto decimal ... la instruccin contina en la siguiente lnea , separa ndices y argumentos de funcin ; acaba las, suprime la impresin % comentarios : indexacin, generacin de vectores ! ejecuta instruccin del sistema operativo

24

VALORES E SPECIALES ans respuesta cuando no se asigna la expresin eps precisin pi i, j 1 inf NaN No Nmero (Not-a-Number) clock reloj de pared date fecha nargin nmero de argumentos de entrada de una funcin nargout nmero de argumentos de salida de una funcin

chdir delete diary dir load save type what fprintf pack

A RCHIVOS DE DISCO cambiar de directorio borrar archivo diario de la sesin directorio de archivos en el disco cargar variables de un archivo guardar variables en un archivo mostrar funcin o archivo mostrar archivos .m en el disco escribir en un archivo compactar memoria va save

1.1. PROGRAMACIN EN MATLAB


M ATRICES E SPECIALES compan compaera diag diagonal eye identidad gallery esotrica hadamard Hadamard hankel Hankel hilb Hilbert invhilb inversa de Hilbert linspace vectores igualmente espaciados logspace vectores logartmicamente espaciados magic mgica cuadrada meshdom dominio para puntos de malla ones constante pascal Pascal rand elementos aleatorios toeplitz Toeplitz vander Vandermonde zeros cero

25

rot90 iplr ipud diag tril triu reshape . :

M ANIPULACIN DE MATRICES rotacin invierte el orden de las columnas invierte el orden de las las diagonal parte triangular inferior parte triangular superior reordena una matriz en otra traspuesta convierte una matriz en una columna simple; A(:)

F UNCIONES L GICAS Y R ELACIONALES any condiciones lgicas all condiciones lgicas nd encuentra ndices de valores lgicos isnan detecta NaNs nite detecta innitos isempty detecta matrices vacas isstr detecta variables de cadena strcomp compara variables de cadena

1.1. PROGRAMACIN EN MATLAB


C ONTROL DE F LUJO if ejecuta instrucciones condicionalmente elseif usado con if else usado con if end termina if, for, while for repite instrucciones un nmero de veces while repite instrucciones mientras una sentencia lgica sea verdadera break sale de los bucles for y while return salida desde funciones pause pausa hasta que se pulse una tecla

26

P ROGRAMACIN Y ARCHIVOS . M input obtiene nmeros desde el teclado keyboard llamada al teclado como si fuera un archivo .m error muestra mensaje de error function dene funcin eval evala un texto en variables feval evala funcin dada por una cadena echo permite mostrar las instrucciones en pantalla exist comprueba si las variables existen casesen sensibilidad a las maysculas global dene variables globales startup archivo de inicializacin getenv accede a una variable de entorno menu genera un men etime tiempo gastado

T EXTO Y C ADENAS abs convierte cadena en valores ASCII eval evala texto como instrucciones num2str convierte nmeros en cadenas int2str convierte enteros en cadenas setstr indicador de cadenas sprintf convierte nmeros en cadenas isstr detecta variables de cadena strcomp compara variables de cadena hex2num convierte cadenas hexadecimales en nmeros

1.1. PROGRAMACIN EN MATLAB


V ENTANA ALFANUMRICA limpia pantalla mueve cursor al comienzo establece el formato de salida muestra matriz o texto imprime nmero formateado permite la muestra de las instrucciones G RFICOS grco lineal en el plano XY grco logartmico en el plano XY grco semilogartmico grco semilogartmico grco polar supercie de malla tridimensional plano de contornos dominio para grcos de supercie grcos de barras grcos de escaleras aade barras de errores A NOTACIN G RFICA ttulo anotacin en el eje x anotacin en el eje y dibuja cuadriculado posiciona un texto arbitrariamente posiciona un texto con el ratn input grco

27

clc home format disp fprintf echo

plot loglog semilogx semilogy polar mesh contour meshdom bar stairs errorbar

title xlabel ylabel grid text gtext ginput

C ONTROL DE LA V ENTANA G RFICA axis escalado manual de ejes hold mantiene grco en pantalla shg muestra la pantalla grca clg limpia la pantalla grca subplot divide la pantalla grca I MPRESIN DE GRFICOS print enva grco a impresora prtsc volcado de pantalla meta archivo de grcos

1.1. PROGRAMACIN EN MATLAB


F UNCIONES ELEMENTALES abs mdulo complejo angle argumento complejo sqrt raz cuadrada real parte real imag parte imaginaria conj conjugado complejo round redondeo al entero ms cercano x redondeo hacia cero oor redondeo hacia ceil redondeo hacia sign funcin signo rem resto exp exponencial base e log logaritmo natural log10 logaritmo base 10

28

F UNCIONES T RIGONOMTRICAS sin seno cos coseno tan tangente asin arcoseno acos arcocoseno atan arcotangente atan2 arcotangente de x/y sinh seno hiperblico cosh coseno hiperblico tanh tangente hiperblica asinh arcoseno hiperblico acosh arcocoseno hiperblico atanh arcotangente hiperblica

bessel gamma rat erf inverf ellipk ellipj

F UNCIONES E SPECIALES funcin de Bessel funcin Gamma aproximacin racional funcin de error inversa de la funcin de error integral completa elptica de primera especie integral elptica de Jacobi

1.1. PROGRAMACIN EN MATLAB


D ESCOMPOSICIONES Y FACTORIZACIONES balance forma equilibrada backsub sustitucin regresiva cdf2rdf convierte diagonales complejas en diagonales reales chol factorizacin de Cholesky eig autovalores y autovectores hess forma de Hessenberg inv inversa lu factores de la eliminacin gaussiana nnls mnimos cuadrados con restricciones null base ortonormal del ncleo orth base ortonormal de la imagen pinv pseudoinversa qr factorizacin QR qz algoritmo QZ rref forma escalonada reducida por las schur descomposicin de Schur svd descomposicin en valores singulares

29

cond norm rank rcond

C ONDICIONAMIENTO DE MATRICES nmero de condicin en la norma 2 norma 1, norma 2, norma de Frobenius, norma rango estimacin de la condicin (inverso)

F UNCIONES MATRICIALES ELEMENTALES expm matriz exponencial logm matriz logaritmo sqrtm matriz raz cuadrada funm funcin arbitraria de matriz poly polinomio caracterstico det determinante trace traza kron producto tensorial de Kronecker

1.1. PROGRAMACIN EN MATLAB


P OLINOMIOS polinomio caracterstico races de polinomiosmtodo de la matriz compaera races de polinomiosmtodo de Laguerre evaluacin de polinomios evaluacin polinomio matricial multiplicacin divisin desarrollo en fracciones parciales ajuste por un polinomio

30

poly roots roots1 polyval polyvalm conv deconv residue polyt

A NLISIS DE DATOS POR COLUMNAS max valor mximo min valor mnimo mean valor medio median mediana std desviacin tpica sort ordenacin sum suma de elementos prod producto de elementos cumsum suma acumulativa de elementos cumprod producto acumulativo de elementos diff derivadas aproximadas hist histogramas corrcoef coecientes de correlacin cov matriz de covarianza cplxpair reordena en pares complejos abs angle conv corrcoef cov deconv fft fft2 ifft ifft2 fftshift P ROCESO DE S EALES mdulo complejo argumento complejo convolucin coecientes de correlacin covarianza deconvolucin transformada rpida de Fourier FFT 2-dimensional FFT inversa FFT inversa 2-dimensinal cambia las dos mitades de un vector

I NTEGRACIN N UMRICA quad funcin de integracin numrica quad8 funcin de integracin numrica

1.1. PROGRAMACIN EN MATLAB


S OLUCIN DE ECUACIONES DIFERENCIALES ode23 mtodo de Runge-Kutta de orden 2/3 ode45 mtodo de Runge-Kutta-Fehlberg de orden 4/5 E CUACIONES NO LINEALES Y O PTIMIZACIN fmin mnimo de una funcin de una variable fmins mnimo de una funcin de varias variables fsolve solucin de un sistema de ecuaciones no lineales (ceros de una funcin de varias variables) fzero cero de una funcin de una variable I NTERPOLACIN spline spline cbico table1 genera tablas 1-D table2 genera tablas 2-D

31

1.2. CLCULO MATRICIAL BSICO

32

1.2.

Clculo Matricial Bsico

Los escalares se representarn habitualmente por letras griegas minsculas: , , , . . .. Interpretaremos los vectores como vectores columna cuando no se especica el contrario y los representaremos habitualmente por letras romanas minsculas: x, y, a, b, . . .. Las matrices las representaremos por letras romanas maysculas: A, B, X, . . .. Los vectores de la base cannica de Rn los representaremos por ei , donde ei ser el vector que tiene un 1 en la componente i-sima y ceros en el resto. El conjunto de las matrices m n lo representamos por Rmn , es decir, implcitamente identicamos una matriz con el vector formado por sus elementos, en algn orden (por las o por columnas). El elemento (i, j) de una matriz A se representa por Aij o A(i, j) o aij , si hemos especicado previamente que A = (aij ). La notacin que utilizaremos para referirnos a las las, las columnas y las submatrices de una matriz es de tipo matlab, por ejemplo A(i, :) la i-sima de A. A(:, i) columna i-sima de A. As mismo, si v1 , . . . , vn Rm , entonces representaremos la matriz, las columnas de la cual son v1 , . . . , vn , por [v1 . . . vn ]. De la misma forma, si u1 , . . . , um Rn son vectores la, entonces representaremos la matriz, las las de la cual son u1 , . . . , um , por u1 . . . . um Mirad la seccin 1.1.8 para ms detalles.

1.2.1. Normas de vectores


Denici 1.2.1. Una norma vectorial es una aplicacin f : Rn R+ {0} que cumple: 1. f (x) = 0 x = 0. 2. f (x) = ||f (x). 3. f (x + y) f (x) + f (y) (desigualdad triangular). Exemple 1.2.2. 1. x 2. x
1

= mx1in |xi |. a
n i=1

|xi |.

1.2. CLCULO MATRICIAL BSICO


3. x 4. x
p

33

=( =(

n i=1

|xi |p ) p . |xi |p wi ) p , wi > 0.


2
1

p,w

n i=1

5. La norma eucldea x para p = 2.

=(

n i=1

x2 ) 2 es un caso particular de la norma i

p,

Ejercicio 1.2.3. Hacer cuatro programs de matlab, que utilicen for y que se llamen nori.m, nor1.m,norp.m y norw.m que calculen las normas 1-4 del ejemplo anterior. Hacer-lo de forma que las funciones sean llamadas de la siguiente forma: >> >> >> >> sol=nori(x); sol=nor1(x); sol=norp(x,p); sol=norw(x,p,w);

Comprobar numricamente que x, norp(x,1)-nor1(x)=0. Comprobar numricament que si w=x*01+, entonces x, norw(x,p,w)-norp(x,p)=0. Hacer un nico programa, llamado, nor.m, que calcule lo mismo que calculan las cuatro funciones anteriores. El programa nuevo, para obtener los mismos resultados que antes, deberia de utilizarse de la forma siguente: >> >> >> >> sol=nor(x,0); sol=nor(x,1); sol=nor(x,p); sol=nor(x,p,w);

Si haceis >> help norm vereis: NORM vector norm. NORM(V,P) = sum(abs(V).^P)^(1/P). NORM(V) = norm(V,2). NORM(V,inf) = max(abs(V)). NORM(V,-inf) = min(abs(V)). Intentar reproduir, utilizando la funcin norm.m, los resultados obtenidos con les funcions nori.m, nor1.m,norp.m i norw.m.

1.2. CLCULO MATRICIAL BSICO


Propietats 1.2.4. Diremos que dos normas f1 , f2 son equivalentes si M, m > 0 tal que mf1 (x) f2 (x) M f1 (x). No es difcil probar que x 2 x 1 n x 2. x x 2 n x . x

34

n x

Esto prueba que las normas 1, 2, son equivalentes en Rn . De hecho, se puede probar tambin que en Rn todas las normas son equivalentes. Toda norma en Rn es una funcin continua. Desigualdad de Hlder: |xT y| x
p

y q,

x, y Rn ,

p, q,

1 1 + = 1. p q

(1.2)

Desigualdad de Cauchy-Schwartz: caso particular de la de Hlder, para p = 2: |xT y| x


2

y 2,

x, y Rn .

(1.3)

Ejercicio 1.2.5. Hacer un programa tal que dados p, q = 0, 1, 2, p = q, Calcule C > 0 tal que nor(x, p) C( nor(x, p) Cnor(x, q)) nor(x, q) x Rn .
1

(1.4) i x

Utilizar este programa para deducir, que no probar, que las normas x 2 , x son equivalentes. Deducir les constantes m y M en cada caso.

1.2.2. Tipos de matrices


Denici 1.2.6. La diagonal k-sima de una matriz A est formada por los elementos Aij con j i = k. La diagonal 0-sima recibe el nombre de diagonal principal y est formada por los elementos Aii i = 1, . . . , n. Ver la gura ?? para una visin esquemtica de la localizacin de las diagonales. Una matriz se llama diagonal cuando Aij = 0 para i = j, es decir, los elementos que no estn en la diagonal principal son nulos.

1.2. CLCULO MATRICIAL BSICO


0 -1 1 diagonals positives

35

diagonals negatives

Figura 1.1: Diagonales de una matriz Denici 1.2.7. La matriz A Rnn se llama triangular superior si aij = 0 para i > j a11 a12 . . . a1n 0 a22 . . . a2n A= (1.5) . . . . . . . . . . . . . . . . . . . 0 0 . . . ann Con el comando triu podemos calcular la parte triangular superior de una matriz. Por ejemplo >> A=rand(4); B=triu(A), Notemos que son equivalentes: >> triu(A), >> triu(A,0), Denici 1.2.8. La matriz A Rnn se llama triangular inferior si aij = 0 para i < j a11 0 . . . 0 a a ... 0 A = 21 22 (1.6) . . . . . . . . . . . . . . . . . . . an1 an2 . . . ann Con el comando tril podemos calcular la parte triangular inferior de una matriz. Por ejemplo >> A=rand(4); B=tril(A), Notad que son equivalentes: >> tril(A), >> tril(A,0),

1.2. CLCULO MATRICIAL BSICO

36

Denici 1.2.9. Diremos que una matriz A = (aij ) m n tiene un ancho de banda inferior l m cuando aij = 0, si i > j + l, es decir, cuando las diagonales m + 1, . . . , l 1 son nulas (notad que la diagonal m no existe). Diremos que una matriz A m n tiene un ancho de banda superior u n cuando aij = 0, si j > i + u, es decir, cuando las diagonales u + 1, . . . , n 1 son nulas (notad tambin que la diagonal n tampoco existe). Diremos que una matriz A mn tiene un ancho de banda b (b m, n) cuando aij = 0, si |i j| > b, es decir, cuando las diagonales m + 1, . . . , b 1, b + 1, . . . , n 1 son nulas. Mirad el resultado que obtenemos evaluando: >> A=rand(4); B=tril(triu(A,-1),2) Ejercicio 1.2.10. Realizad un programa el cual, dada la matriz A y los enteros l y u, devuelva una matriz que tenga un ancho de banda inferior l y un ancho de banda superior u y que los valores diferentes de cero de esta matriz coincidan con los de A. En el caso en que solo le introducimos un matriz A y un escalar b, el programa debe devolver una matriz con un ancho de banda b. Denici 1.2.11. Una matriz A se llama estrictamente diagonalmente dominante por las cuando i=j |aij | < |aii |. Anlogamente denimos la dominancia diagonal por columnas. Ejercicio 1.2.12. Haced un programa que dada una matriz A compruebe si la matriz es diagonalmente dominante por las. Denici 1.2.13. La transposicin de una matriz m n A es una matriz n m AT que satisface (AT )(i, j) = A(j, i) 1 i n, 1 j m. (1.7) Esta operacin corresponde a la expresin coloquial de cambiar las por columnas. Resumimos seguidamente las propiedades fundamentales del operador transposicin: (AT )T = A. (A + B)T = AT + B T . (A)T = AT . (AB)T = B T AT . Ejercicio 1.2.14. En matlab, para calcular la transpuesta de una matriz haremos A. Comprueba con dos matrices, que las propiedades anteriores son ciertas. Denici 1.2.15. Una matriz A Rnn es invertible si existe una matriz B Rnn tal que AB = BA = I; en este caso, la matriu que satisface esta condicin es nica, se llama la inversa de A y se representa habitualmente por A1 .

1.2. CLCULO MATRICIAL BSICO

37

1.2.3. Matrices simtricas.


Denici 1.2.16. Una matriz A se llama simtrica si coincide con su transpuesta, es decir: AT = A. Denici 1.2.17. Una matriz se llama denida positiva cuando xT Ax > 0 x = 0. Las matrices simtricas y denidas positivas tienen un papel muy importante en muchos campos de la matemtica. Ejercicio 1.2.18. Comprobad, utilizando matlab, si una matriz no es denida positiva.

1.3. SOLUCIN ECUACIONES NO LINEALES

38

1.3.

Solucin ecuaciones no lineales

1.3.1. Introduccin
Dada una funcin real de una variable f (x), tratamos de hallar los valores de x en los que la funcin se anula, es decir, las soluciones o races de la ecuacin f (x) = 0. Si tenemos un polinomio de grado 2 (o uno), existe una formula para calcular la solucin. Si el polinomio es de grado 3 o 4 tambin se puede resolver. No existen formulas generales para obtener la solucin de polinomios de grado 5. Si no es posible resolver analticamente la ecuacin f (x) = 0 despejando x, nos vemos abocados a utilizar mtodos iterativos, consistentes en obtener una sucesin de valores x1 , x2 , . . . , xn , . . . cada vez ms prximos a la raz buscada. En teora, nos planteamos si tal raz existe y si es o no nica. En la prctica, lo ms importante es determinarla con la precisin necesaria, con el menor nmero posible de operaciones. La respuesta a la cuestin de la existencia la proporciona el Teorema 1.3.1. (Teorema de Bolzano) Si f : [a, b] R es continua y f (a) y f (b) tienen signos diferentes (f (a) f (b) < 0), entonces f se anula en algn punto entre a y b. En este caso, la unicidad de la solucin puede garantizarse si la funcin es estrictamente creciente o estrictamente decreciente. Ambos resultados proporcionan condiciones sucientes, pero no necesarias. Por ejemplo, |x| tiene una nica raz en [1, 1] y, sin embargo, ni cambia el signo ni es montona en dicho intervalo. Veamos ahora cmo analizar la convergencia de los mtodos iterativos y cmo estimar la precisin del resultado.

1.3.2. Mtodos Iterativos


En general, los mtodos iterativos consisten en: Obtener una aproximacin inicial x1 de la solucin. Esta aproximacin es la informacin previa de que disponemos. En algunos mtodos, la eleccin de la aproximacin inicial determina la convergencia del mtodo. La representacin grca de la funcin suele proporcionar aproximaciones iniciales aceptables. Renar la aproximacin inicial mediante una frmula iterativa que genera nuevos valores (llamados tambin iterados), x2 , x3 , x4 , . . ., que idealmente, convergern a la solucin buscada x . Establecer un criterio de parada o test de nalizacin, satisfecho el cual, se detiene el proceso de obtencin de iterados. En caso de convergencia, se toma el ltimo iterado como raz aproximada.

1.3. SOLUCIN ECUACIONES NO LINEALES

39

Los mtodos iterativos tambin pueden consistir en dado un intervalo. [a0 , b0 ], que contenga a la solucin, vamos calculando una sucesin de intervalos, [ak , bk ] cada vez ms pequeos y que tambin contengan a la solucin. A xk lo llamamos iterado k-simo (xk seria (ak + bk )/2 en el caso de intervalos) y el error de esta aproximacin viene determinado por k = |xk x |. Que la sucesin de iterados xk converja a x es equivalente a que k tienda a cero cuando k tiende a innito. En la prctica, k no es calculable, ya que no conocemos x . En cambio, obtenidos los iterados x1 , x2 , x3 , . . . , xk , xk+1 , . . . , podemos calcular ek = |xk+1 xk |, k = 1, 2, . . . . Observemos que ek aproxima k siempre que k+1 k . Por ello, podemos utilizar en nuestros algoritmos como criterio de parada que la cantidad ek sea sucientemente pequea, |xk+1 xk | < tol o 0,5 |xk+1 xk | < tol. Debemos detener en cuenta que si el mtodo convergente lentamente, estamos subestimando el error, al contrario, si converge rpidamente, el error ser seguramente inferior a tol. Otro posible criterio es la satisfaccin aproximada de la ecuacin, es decir, que |f (xk )| < tol. Conviene tambin limitar el nmero mximo de iteraciones, en previsin de que el algoritmo diverja, oscile indenidamente o converja muy lentamente. Tipos de convergencia Para comparar la eciencia de los distintos mtodos iterativos, vamos a medir la rapidez con la que los iterados x1 , x2 , . . . , xk , . . ., convergen o no a la solucin. Al desconocer la solucin, medimos la velocidad de convergencia de la sucesin de incrementos ek , k = 1, 2, 3, . . . Si los cocientes ek+1 /ek tienden a K, 0 < K < 1, diremos que el mtodo converge linealmente. Si los cocientes ek+1 /ek tienden a cero y los ek+1 /e2 tienden a estabilizarse, k diremos que el mtodo converge cuadrticamente. Si los cocientes ek+1 /ek tienden a cero y los ek+1 /ep , para cierto 1 << p < 2, k tienden a estabilizarse, se dice que el mtodo tiene convergencia superlineal.

1.3. SOLUCIN ECUACIONES NO LINEALES

40

En la prctica, el tipo de convergencia nos indica el trabajo necesario para alcanzar determinada precisin. Con un mtodo que converge linealmente, cada tantas iteraciones, por ejemplo cada 3, se obtiene un dgito adicional exacto en la solucin. En cambio, si hay convergencia cuadrtica, cada tantas iteraciones se duplica el nmero de decimales exactos. Los mtodos de biseccin y regula falsi convergen linealmente. El mtodo de Newton converge cuadrticamente, si se dan las condiciones adecuadas. El mtodo de la secante tiene generalmente convergencia superlineal. Ejemplo de convergencia lineal La sucesin (xn ) presenta convergencia lineal con ratio de convergencia R, 0 < R < 1, cuando l m
n

|xn+1 x | =R |xn x |
|xn+1 x | |xn x |

Ejemplo xn = 1 + 0,2n + (n + 1)n converge a x = 1. x n x 2,000000e 00 7,000000e 01 1,511111e 01 2,362500e 02 3,200000e 03 4,486008e 04 7,249986e 05 1,327684e 05 2,583231e 06 5,130000e 07 1,024386e 07 2,048135e 08 4,096043e 09 8,192013e 10 1,638400e 10 3,276800e 11

3,500000e 01 2,158730e 01 1,563419e 01 1,354497e 01 1,401878e 01 1,616133e 01 1,831291e 01 1,945667e 01 1,985885e 01 1,996853e 01 1,999379e 01 1,999890e 01 1,999982e 01 1,999997e 01 2,000000e 01

En la tabla anterior vemos que la segunda columna, la que corresponde a los cocientes |xn+1 x| | se estabiliza en 0,2, lo que quiere decir que esta |xn x sucesin converge a cero linealmente con radio de convergencia 0.2. Observemos que se gana una cifra decimal en cada cierto numero de iteraciones. Ejemplo convergencia cuadrtica

1.3. SOLUCIN ECUACIONES NO LINEALES


(xn ) tiene convergencia cuadrtica cuando l m
n

41

|xn+1 x | = 0, . (xn x )2
n

Ejemplo: xn = 1 + 0,22 + (n + 1)2 converge a x = 1. x n x 1,2000e + 00 2,900000e 01 1,394568e 02 1,781879e 05 1,310720e 11 4,307532e 23 1,844674e 45 3,402824e 90 1,157921e 179
|xn+1 x | |xn x | |xn+1 x | (xn x )2

2,416667e 01 4,808855e 02 1,277728e 03 7,355831e 07 3,286386e 12 4,282439e 23 1,844674e 45 3,402824e 90

2,013889e 01 1,658226e 01 9,162181e 02 4,128132e 02 2,507314e 01 9,941746e 01 1,000000e + 00 1,000000e + 00

En la tabla anterior vemos que la columna segunda, la cual corresponde a los cocientes |xn+1 x| | no se estabiliza. En cambio, la tercera columna, la |xn x cual corresponde a |xn+1 x)2| si que se estabiliza, a 1 concretamente, lo que (xn x quiere decir que esta sucesin converge a cero cuadrticamente. Observemos que en cada paso se obtiene el doble de cifras decimales exactas que en el anterior.

1.3.3. Mtodo de la Biseccin


Si f es una funcin continua en el intervalo [a, b] y f (a) y f (b) tienen distinto signo, sabemos por el teorema de Bolzano que la ecuacin f(x)=0 tiene una solucin a+b en dicho intervalo. Tomamos el punto medio c = del intervalo y elegimos el 2 subintervalo [a, c] o [c, b] en el que f cambia de signo. As localizamos la raz en el intervalo de longitud mitad de la inicial. Repitiendo varias veces este proceso se determina la solucin con la precisin deseada.

Algoritme bisecci

1.3. SOLUCIN ECUACIONES NO LINEALES

42

a0 a1 m2

m1 b1

b0

Figura 1.2: Mtodo de la biseccin Input: a, b, f , max_its, tol Output: m if ( signe(f (a)) = signe(f (b)) ) stop end for i = 1, . . . , max_its m = 0,5 (a + b) %punt mig [a, b] if ( 0,5 |a b| < tol ) break end if ( signe(f (a)) = signe(f (m)) ) b=m else a=m end end Observemos que el intervalo [a, b] contiene la raz. La cota del error esta dividida por 2 a cada iteracin Funcin biseccin.m function [m i]=biseccio( a, b, def_func, max_its, tol) % [m i]=biseccio( a, b, max_its, tol) % Biseccio per a trobar solucio de f(x)=0 % La funci seria def_func % % INPUT: % a: a_0 % b: b_0

1.3. SOLUCIN ECUACIONES NO LINEALES


% % % % % % % % % % % % % % max_its: tol: OUTPUT: m: maxim nmero diteracions % tolerancia per a error relatiu iteracio

43

solucio

LOCALS a: a_i % fa: f(a_i) b: b_{i} % fb: f(b_i) m: m_i % fm: f(m_i) i: index iteracions EXEMPLES: [m,i]=biseccio(1,2,x^3-3*x+1,100000,.0001) [m,i]=biseccio(0,1,x^3-3*x+1,100000,.0001)

func=inline(def_func, x); fa=func(a); fb=func(b); if ( fa*fb > 0 ) fprintf(No nhi ha canvi de signe en [%e, %e]\n, a, b); return; end i=0; while ( 0.5*abs(b-a) > tol & i < max_its ) m=0.5*(a+b); fm=func(m); fprintf(%d\t% .16e\t% .16e\n, i,m, fm); if ( fm*fa < 0 ) b=m; fb=fm; else a=m; fa=fm; end i=i+1; end if ( i < max_its & 0.5*abs(b-a) < tol ) fprintf(Convergit en %d iteracions,\nsolucio en interval...

1.3. SOLUCIN ECUACIONES NO LINEALES


determinat per: [% .16e, % .16e]\n, end

44 i, a, b);

1.3.4. Mtodo de rgula falsi


El mtodo de biseccin converge linealmente puesto que en cada paso se divide por 2 la amplitud del intervalo que contiene la raz. Se puede acelerar la convergencia si no slo se tiene en cuenta el signo de la funcin en los extremos del intervalo, sino que se elige un punto intermedio ms prximo al extremo en el que la funcin sea menor en valor absoluto. El mtodo de regula falsi procede como biseccin, pero en lugar de tomar el punto medio, calcula la interseccin con el eje de abscisas de la recta que pasa por los puntos (a, f (a)) y (b, f (b)). Es decir, y f (b) = f (b)f (a) (x b). El punto de corte de la ba (b)af (a)b ba secante con el eje de les abscisas: y = 0 x = b f (b) f (b)f (a) = ff (b)f (a) . quedando, c= af (b) bf (a) f (b) f (a)

Las iteraciones convergen a la solucin ms rpidamente que las de biseccin, pero la

a0

m1 a1 m2

b0 b1

Figura 1.3: Mtodo de regula falsi amplitud del intervalo de bsqueda, b a, no tiende a 0. Por ello, hay que modicar el criterio de convergencia, terminando cuando dos iteraciones sucesivas dieran poco. Algoritme regulafalsi

Rgula falsi

1.3. SOLUCIN ECUACIONES NO LINEALES


Input: a, b, f , max_its, tol Output: m if ( signe(f (a)) = signe(f (b)) ) stop end mold = b for i = 1, . . . , max_its m = (f (b)a f (a)b)/(f (b) f (a)) if ( 0,5 |a b| < tol | 0,5 |m mold | < tol ) break end if ( signe(f (a)) = signe(f (m)) ) b=m else a=m end mold = m end Funcin regulafalsi.m

45

function [m i]=regulafalsi( a, b, def_func, max_its, tol) % [m i]=regulafalsi( a, b, max_its, tol) % Biseccio per a trobar solucio de f(x)=0 % La funci seria def_func % % INPUT: % a: a_0 % b: b_0 % max_its: maxim nmero diteracions % % tol: tolerancia per a error relatiu iteracio % % OUTPUT: % m: solucio % % LOCALS % a: a_i % fa: f(a_i) % b: b_{i} % fb: f(b_i) % m: m_i % fm: f(m_i) % i: index iteracions % EXEMPLES: % [m,i]=regulafalsi(1,2,x^3-3*x+1,100000,.0001)

1.3. SOLUCIN ECUACIONES NO LINEALES


% [m,i]=regulafalsi(0,1,x^3-3*x+1,100000,.0001) func=inline(def_func, x);

46

fa=func(a); fb=func(b); mo=b; if ( fa*fb > 0 ) fprintf(No nhi ha canvi de signe en [%e, %e]\n, a, b); return; end i=0; while ( 0.5*abs(b-a) > tol& 0.5*abs(m-mo) > tol & i < max_its ) m=(fb*a-fa*b)/(fb-fa); fm=func(m); fprintf(%d\t% .16e\t% .16e\n, i,m, fm); if ( fm*fa < 0 ) b=m; fb=fm; else a=m; fa=fm; end i=i+1; mo=m; end if ( i < max_its & 0.5*abs(b-a) < tol ) fprintf(Convergit en %d iteracions,\nsolucio en interval... determinat per: [% .16e, % .16e]\n, i, a, b); end

1.3.5. Mtodo de Newton-Raphson


La idea del mtodo de Newton para resolver la ecuacin f (x) = 0 es aproximar la funcin f por su tangente l en una aproximacin de la raz y resolver la ecuacin l(x) = 0. Tomamos esta solucin como nueva estimacin de la raz de f (x) = 0 y repetimos el proceso hasta obtener la precisin deseada. Sea x1 la estimacin inicial de la solucin. Hallamos la tangente a la grca de f en el punto (x1 , f (x1 )) y tomamos la interseccin x2 de la tangente con el eje OX como nueva estimacin de la solucin.

1.3. SOLUCIN ECUACIONES NO LINEALES

47

x0

x2

x1

Figura 1.4: Mtodo de Newton La ecuacin de la recta tangente es y = f (x1 ) + f (x1 )(x x1 ) y la interseccin con el eje OX se obtiene haciendo y = 0: x 2 x = x1 f (x1 ) f (x1 )

siempre que la derivada f no se anule en x1 . Procediendo de forma iterativa, en el paso k determinamos xk+1 = xk f (xk ) , k = 1, 2, . . . f (xk ) (1.8)

Algoritme de Newton-Raphson Newton-Raphson Input: x0 , f , f , max_its, tol Output: x1 for i = 1, . . . , max_its x1 = x0 f (x0 )/f (x0 ) if ( |x1 x0 | < tol ) break end x0 = x1 end Funcin newton.m

1.3. SOLUCIN ECUACIONES NO LINEALES

48

function [x1 i]=newton( x0, def_func, def_derfunc, max_its, tol) % [x1 i]=newton( x0, max_its, tol) % Newton per a trobar solucio de f(x)=0 % la funcio deu de estar definida en def_func, % la derivada en def_derfunc % % % % % % % % % % % % % % % % INPUT: x0: max_its: tol: OUTPUT: x2:

x_0 maxim nmero diteracions tolerancia per a error relatiu iteracio

solucio

LOCALS xin: x_0 x0: x_n % x1: x_{n+1} fx0: f(x0) % fpx0: f(x0) i: index iteracions EXEMPLES: [m,i]=newton(2,x^3-3*x+1,3*x^2-3,100000,.0001) [m,i]=newton(1,x^3-3*x+1,3*x^2-3,100000,.0001)

func=inline(def_func, x); derfunc=inline(def_derfunc, x);

i=1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % bucle, % condicio dentrada: # iteracions < maxim # iteracions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% while ( i < max_its ) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % calcular fx0 i fpx0 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% fx0= func(x0); fpx0= derfunc(x0); if ( fpx0 ~= 0 )

1.3. SOLUCIN ECUACIONES NO LINEALES

49

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Si fpx0 != 0 calcular x1, si no eixir %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% x1=x0-fx0/fpx0 ; else error(tangent horizontal\n); end

fprintf(%d\t% .16e\t% .16e\n, i,x0, fx0); if ( abs ( x1-x0 ) < tol ) fprintf(Aproximacio solucio: %.15e\n valor funcio:... %e, #its: %d\n,x1, func(x1), i); return; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % renovar i, x0 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% x0= x1 ; i=i+1; end fprintf(Aproximacio solucio: %.15e\nfuncio: %e, #its: %d\n, ... x1, func(x1), i); El error cometido en la iteracin k es proporcional al cuadrado del error cometido en la iteracin anterior. En la prctica, esto supone que el nmero de cifras decimales exactas se duplica cada cierto nmero de iteraciones. Las condiciones que garantizan la convergencia cuadrtica del mtodo de Newton son las siguientes: Teorema 1.3.2. Sea f C 2 ([a, b]). Si x [a, b] es una raz de la ecuacin f (x) = 0 tal que f (x ) = 0 (es decir, es una raz simple), entonces la sucesin de iterados xk obtenida por el mtodo de Newton converge a x , para cualquier aproximacin inicial x1 elegida sucientemente prxima a la raz. Adems, la citada convergencia es cuadrtica. Notemos que si la derivada de la funcin f se anula en un iterado, el siguiente paso de Newton no est denido. En este caso, puede hacerse inestable, aunque haya una raz prxima. Sin embargo, si la derivada se anula en la raz, el mtodo de Newton converge linealmente, en lugar de cuadrticamente.

1.3. SOLUCIN ECUACIONES NO LINEALES

50

1.3.6. Mtodo de la secante


El mtodo de Newton converge muy rpidamente, pero necesita evaluar la derivada de la funcin en cada paso y es muy sensible a la estimacin inicial. El mtodo de la secante tiene la ventaja de no utilizar la derivada y ser ms robusto que el de Newton. En cambio, es ms lento que el de Newton, pero ms rpido que el de biseccin o regula falsi. Geomtricamente, a partir de dos estimaciones x1 y x2 de la raz, el mtodo de la secante aproxima la funcin f por la recta que pasa por los puntos (x1 , f (x1 )) y (x2 , f (x2 )) y toma su interseccin con el eje OX, x3 , como siguiente estimacin. Expresamos la iteracin genrica de la secante en trminos anlogos a la de Newton como xk+1 = xk

f (xk ) f (xk )f (xk1 ) xk xk1

k = 1, 2, . . . .

(1.9)

El mtodo de la secante tambien puede ser decucido del de Newton si se substituye k )f (xk1 f (xk ) en (1.8) por f (xxk xk1 ) .

x0

x2

x3

x4

x1

Figura 1.5: Mtodo de la Secante Algoritme de la secant Secant Input: x0 , x1 , f , max_its, tol Output: x2 for i = 1, . . . , max_its x2 = (f (x1 )x0 f (x0 )x1 )/(f (x1 ) f (x0 )) if ( |x2 x1 | < tol ) break end x0 = x1 x1 = x2 end

1.3. SOLUCIN ECUACIONES NO LINEALES

51

Funcin secante.m function [m i]=secant( x0, x1, def_func, max_its, tol) % [m i]=secant( x0,x1, max_its, tol) % Biseccio per a trobar solucio de f(x)=0 % La funci seria def_func % % INPUT: % x0: x0_0 % x1: x1_0 % max_its: maxim nmero diteracions % % tol: tolerancia per a error relatiu iteracio % % OUTPUT: % m: solucio % % LOCALS % x0: x0_i % fx0: f(x0_i) % x1: x1_{i} % fx1: f(x1_i) % m: m_i; % fm: f(m_i) % i: index iteracions % EXEMPLES: % [m,i]=secant(1,2,x^3-3*x+1,100000,.0001) % [m,i]=secant(0,1,x^3-3*x+1,100000,.0001)

func=inline(def_func, x); t=linspace(x0,x1,100);hold off;plot(t,func(t));grid;hold on i=0; while ( 0.5*abs(x1-x0) > tol & i < max_its ) fx0=func(x0); fx1=func(x1); m=(fx1*x0-fx0*x1)/(fx1-fx0); fm=func(m); plot(x0,fx0,*,x1,fx1,*,m,fm,o);pause(1) fprintf(%d\t% .16e\t% .16e\n, i,m, fm); x0=x1; x1=m;

1.3. SOLUCIN ECUACIONES NO LINEALES


i=i+1; end

52

if ( i < max_its & 0.5*abs(x1-x0) < tol ) fprintf(Convergit en %d iteracions,\nsolucio en interval... determinat per: [% .16e, % .16e]\n, i, x0, x1); end El mtodo de la secante tiene convergencia supralineal con p = (1 + 2)/2.

1.3.7. Races mltiples


Denicin: x es una raz de orden p de f (x) = 0 cuando 0 = f (x ) = f (x ) = . . . = f p1 (x ). orden 1 raz simple. orden 2 raz doble. Convergencia mtodo de Newton races mltiples: Si x es raz de orden p, el 1 mtodo de Newton converge linealmente con ratio de convergencia R = 1 p . En particular, para una raz doble, velocidad de Newton velocidad mtodo de biseccin: necesitamos otra mtodos. Si x es raz de orden q entonces x es raz simple de u(x) = Newton converge cuadrticamente para u. Newton para u(x) = 0: xn+1 = xn f (xn )f (xn ) u(xn ) = xn . u (xn ) f (xn )2 f (xn )f (xn )
f (x) , f (x)

entonces

1.3.8. Problemas resueltos


Ejercicio 1.3.3. Determinar las races del polinomio p(x) = 2x3 3x 1 mediante el mtodo de biseccin mostrando el proceso paso a paso. Solucin. Representamos grcamente el polinomio en el intervalo [2, 2]: x = linspace(-2,2); p = [2 0 -3 -1]; y=polyval(p,x); plot(x,y) grid on

1.3. SOLUCIN ECUACIONES NO LINEALES


10

53

10

15 2

1.5

0.5

0.5

1.5

Figura 1.6: p(x) = 2x2 3x 1 Grcamente parece que x = 1 es una raz del polinomio p(x), en efecto p(1) = 0. Observando la Figura 1.6 partiremos del intervalo [a1 , b1 ] = [0, 2] para hallar la raz positiva. Procediendo de forma anloga, se obtendra la otra raz negativa. Vericamos que el polinomio tiene distinto signo en los extremos del intervalo p(0) = 1 < 0 y p(2) = 9 > 0. Calculamos el punto medio del intervalo y evaluamos en ste el polinomio c1 = (a1 + b1 )/2 = 1 y p(1) = 2 < 0. A continuacin, comprobamos que p(b1 ) (c1 ) < 0 por lo que el intervalo [c1 , b1 ] = [1, 2] contiene a la raz, nos centramos en l haciendo a2 = c1 y b2 = b1 , realizamos una nueva iteracin en [a2 , b2 ] = [1, 2]: c2 = (a2 + b2 )/2 = 1,5, p(c2 ) = 1,25. Ahora p(a2 ) p(c2 ) < 0 entonces b3 = c2 y a3 = a2 nos quedamos con el subintervalo izquierdo ya que la raz est en [a3 , b3 ] = [1, 1,5] cuyo punto medio c3 = (a3 + b3 )/2 = 1,25, p(1,25) = 0,843750. por lo que haremos a4 = c3 y b4 = b3 , nos centraremos en [a4 , b4 ] = [1,25, 1,5] y continuaremos el proceso hasta que la longitud del intervalo [ak , bk ] sea tan pequea como queramos, en este caso tras 25 iteraciones se alcanza la solucin 1.366025, para tolerancia de 107 . En la gura 1.7 mostramos los primeros iterados. La ventaja del algoritmo de biseccin de biseccin es que siempre converge, si partimos de un intervalo que contiene a la raz. sin embargo, la convergencia es lenta y puede darse el caso de que el punto medio calculado en un paso est ms alejado de la raz que el iterado del paso anterior.

1.3. SOLUCIN ECUACIONES NO LINEALES


8

54

2 a a a a 0 b b b b 2

0.2

0.4

0.6

0.8

1.2

1.4

1.6

1.8

Figura 1.7: Mtodo de la biseccin Ejercicio 1.3.4. Halla la menor raz positiva de la ecuacin ex cos x = 0 con una tolerancia de 105 , utilizando el mtodo de regula falsi y mostrando los pasos en las primeras iteraciones. Solucin. En primer lugar, representamos grcamente la funcin para elegir el intervalo de partida. x = -3:0.1:3; y = exp(-x.^2)-cos(x); plot(x,y) grid on Observando la grca de la funcin (Figura 1.8) partimos del intervalo [a1 , b1 ] = [1, 2] para hallar la raz. Evaluamos la funcin en los extremos: f (a1 ) = ea1 cos(a1 ) = 0,172423 f (b1 ) = eb1 cos(b1 ) = 0,434462 Calculamos el punto c1 donde la recta que une los puntos (a1 , f (a1 )) y (b1 , f (b1 )) corta al eje x: c1 = (a1 f (b1 ) b1 f (a1 ))/(f (b1 ) f (a1 )) = 1,284111 f (c1 ) = 0,090521 A continuacin, comprobamos en cul de los subintervalos [a1 , c1 ] y [c1 , b1 ] se encuentra la raz y nos centramos en l. Como f (b1 ) f (c1 ) < 0 entonces a2 = c1 y b2 = b1 , es decir, la raz se encuentra en [a2 , b2 ] = [1,284111, 2], realizamos una nueva iteracin:
2 2 2

1.3. SOLUCIN ECUACIONES NO LINEALES


1.2

55

0.8

0.6

0.4

0.2

0.2 3

Figura 1.8: f (x) = exp(x2 ) cos(x) c2 = (a2 f (b2 ) b2 f (a2 ))/(f (b2 ) f (a2 )) = 1,407549 f (c2 ) = 0,024619 De nuevo f (b2 ) f (c2 ) < 0 y por tanto, hacemos a3 = c2 y b3 = b2 , nos quedamos con el subintervalo derecho [a3 , b3 ] = [1,407549, 4] y la siguiente iteracin ser: c3 = (a3 f (b3 ) b3 f (a3 ))/(f (b3 ) f (a3 )) = 1,439320 f (c3 ) = 0,005119
0.5

0.4

0.3

0.2

0.1

0.1

0.2

1.1

1.2

1.3

1.4

1.5

1.6

1.7

1.8

1.9

Figura 1.9: Mtodo regula falsi Por lo que haremos a4 = c3 y b4 = b3 , nos centraremos en [a4 , b4 ] = [1,439320, 2]. En este caso vemos que el intervalo no se hace pequeo. Hemos de parar cuando abs(ck ck1 ) es pequeo. Ejercicio 1.3.5. Utiliza el mtodo de Newton para aproximar la raz quinta de 2 con tres cifras decimales exactas, ilustrando el mtodo paso a paso. Comprueba la convergencia del mtodo de Newton.

1.3. SOLUCIN ECUACIONES NO LINEALES

56

Solucin. Notemos que 5 2 es la solucin de la ecuacin f (x) = x5 2 = 0, cuya derivada f (x) = 5x4 utilizamos en el mtodo de Newton. Tomando una estimacin inicial x1 = 1 y aplicando el mtodo de Newton calculamos las siguientes iteraciones con x2 = x1 x3 x5 2 6 1 1 = = 1,2 =1 4 5x1 5 5 5 5 x 2 1,2 2 = x2 2 4 = 1,2 = 1,152901 5x2 5 1,24

siguiendo este proceso con dos iteraciones ms tenemos x5 = 1,148698, valor que 1 podemos comparar con el obtenido directamente al hacer 2 5 y observar que se tienen ms de tres cifras exactas. Utilizamos el chero newton.m para realizar los clculos. Haciendo >> [sol, x]=newton( 1,x.^5-2, 5*x.^4, 30, 1e-4) obtenemos la solucin sol = 1,148698, el vector de iterados x, el error 3,052991105 y el nmero de iteraciones k = 5. Obsrvese que con una iteracin ms se obtiene la solucin con un error menor que 108 , lo cual, en este caso, nos asegura que tenemos al menos 7 decimales exactos. Para estudiar la velocidad de convergencia, calculamos las tasas de convergencia a partir del vector de iterados x: >> >> >> >> n=max(size(x)); %Tambien podemos hacer n=length(x); er=abs(x-sol); tcl = er(2:n)./er(1:n-1); % Tasa de convergencia lineal. tcl = er(2:n)./er(1:n-1).^2;%Tasa de convergencia cuadrtica.

Observamos que las componentes del vector tcl tienden a cero y las tcc se estabilizan por lo que la convergencia es cuadrtica. Conclusin que tambin puede obtenerse a partir de las grcas de estos vectores. Un planteamiento ms general consistira en obtener una aproximacin de n a con a > 0, resolviendo la ecuacin f (x) = xn a = 0.

1.3.9. Problemas propuestos


Ejercicio 1.3.6. Dada la ecuaciones no lineales 1. 2 x log(x) 4 = 0; 2. sin(x) x + 0,5 = 0; 3. exp(x) + exp(3 x) 4 = 0;

1.3. SOLUCIN ECUACIONES NO LINEALES


4. x 2 sin(x) /3 + 5. x10 1 = 0; x = 0;

57

Haz una representacin grca para averiguar el nmero de soluciones y obtener una estimacin inicial de las mismas. Resulvela aplicando los distintos mtodos expuestos: biseccin, regula falsi, secante y Newton con tolerancia 105 . Estudiar numricamente la velocidad de convergencia de cada mtodo. Confeccionar una tabla indicando para cada mtodo cuntas iteraciones son necesarias para alcanzar la solucin con la precisin requerida.

Captulo 2 Latex
Aqu estara el documento titulado Redaccin de documentos cientcos usando Latex en ambiente Windows de Alfonso Zoraya. Da una idea de todo lo que se puede hacer con Latex. Este documento se encuentra en el aula virtual (SeminarioF.pdf). Lo que est mas ojo del documento es como poner acentos y como incluir dibujos. Mirar lo explicado en clase y en las prcticas. Los otros documentos que estn el el aula virtual son ms completos y os servirn de referencia ms adelante para consultar como hacer cosas ms complejas con LATEX.

58

Captulo 3 Clcul Simbolic

59

3.1. INTRODUCCIN

60

3.1.

Introduccin

Como su propio nombre indica, el clculo simblico consiste en manipular expresiones matemticas haciendo abstraccin de los valores numricos concretos de las variables involucradas, es decir tratndolas como smbolos. Segn la escuela favorita del autor de un artculo, este tipo de clculo puede recibir tambin los nombres de clculo formal, clculo algebraico, lgebra computacional, etc. En un principio, las computadoras fueron diseadas para realizar clculos numricos (slo con nmeros) como las calculadoras de mano o el famoso baco. La razn era muy simple; resultaba relativamente fcil reducir operaciones complejas a sucesiones de sumas y restas o aproximar funciones complicadas por un polinomio determinado (interpolacin) o una funcin racional de polinomios (aproximantes de Pad). Toda la teora matemtica de sucesiones y series permiti mas tarde elaborar algoritmos complejos para obtener resultados aproximados de casi cualquier funcin y la rapidez de los clculos hizo el resto. Pero de la misma forma que se puede reducir un producto de dos nmeros a un conjunto repetitivo (un algoritmo) de sumas ordenadas mediante una tabla de multiplicar de acceso rpido (y la divisin mediante otro algoritmo que use una tabla de dividir), hay un conjunto nito de derivadas elementales que se pueden considerar Reglas de Derivacin como la derivada de un producto, la de un cociente, la de una funcin de funcin, etc.. Tambin es nito el nmero de funciones elementales que sabemos derivar directamente, es decir, la Tabla de Derivar No se podrn construir algoritmos formales que usen esta Tabla de Derivar y apliquen repetitivamente las Reglas de Derivacin para automatizar estos clculos tediosos y permitir que las mentes matemticas dediquen mas tiempo a los problemas no resueltos an? En julio de 1836, Charles Babbage escribe en su libro de notas: Hoy tuve por primera vez una concepcin general, pero muy confusa, sobre la posibilidad de hacer una mquina que realice desarrollos algebraicos; es decir, sin ninguna referencia a los valores de las letras.... Tambin Leibniz soaba con construir un lenguaje formalizado con el que una mquina de clculo pudiera deducir todos los teoremas y resultados apetecidos. Son estas intuiciones y sueos las que motivaron a tantos y tantos seres humanos en la ardua tarea de construir mquinas con memoria suciente para albergar largas extensiones de desarrollos algebraicos y lo bastante rpidas para que el tiempo necesario para realizarlos estuviera a escala humana. Con cierto retraso, se pusieron a la tarea los creadores de software para generar aplicaciones propietarias (de pago) o de libre uso (gratuitas) que poco a poco fueron dando lugar a los actuales sistemas simblicos. Entre ellos destacan el legendario Macsyma y el no menos potente Maple. Una rpida visin de la actual disponibilidad de herramientas simblicas la podis ver en: http://en.wikipedia.org/wiki/Comparison_of_computer_algebra_systems Donde Matlab aparece como Symbolic Math Toolbox o con las caractersticas de Maple que es el motor simblico que usa. A su vez, Maxima, es un derivado gratuito del Macsyma del MIT (Instituto Tecnolgico de Massachusetts) y Scilab es lo mas

3.2. DEFINIENDO VARIABLES SIMBLICAS

61

parecido a la versin libre de Matlab en este campo. En lo que respecta al clculo simblico, cada alumno puede optar por el sistema en que se sienta mas cmodo ya que unos se basan en Algol, otros en Lisp, etc. Unos son fciles de obtener y otros cuestan caros. Nosotros vamos a hablar de las capacidades simblicas de Matlab por las razones siguientes: 1. Para no aadir el aprendizaje de una nueva aplicacin restando tiempo a la posibilidad de disfrutar de ella. 2. Porque muchas funciones simblicas tienen el mismo nombre que la funcin numrica similar, lo que ayuda a identicarla. 3. Porque ya conocemos una forma de interrelacionar Matlab y Latex. Aprender una interrelacin distinta con otra aplicacin sera confuso como poco.

3.2.

Deniendo variables simblicas

En la ventana Workspace de Matlab van apareciendo los nombres de todas las variables denidas junto con sus dimensiones (recordad que para Matlab toda variable es una matriz) y el tipo de variable (en principio ser double que es la precisin numrica por defecto). Al denir una variable simblica el tipo cambia automticamente a sym object fcilmente convertible en una serie de caracteres si es una nica expresin o un vector columna de series de caracteres donde cada la puede tener longitudes distintas. Tal conversin es la que realiza el comando latex(VarSym) o el propio Matlab cuando nos presenta en pantalla el resultado. Pero atencin; una variable simblica no es una serie de caracteres. En determinados casos necesitaremos convertirla en una serie de caracteres para aprovechar todas las capacidades de Matlab. funcin syms sym double Salida Crea variables simblicas Convierte a variable simblica Convierte a variable numrica

Ejemplos: >syms x y b t; % Crea 4 variablas simblicas x, y, b, t >a=sym(pi) % Guarda en a la constante pi dato simblico a = pi >n=double(a) % Guarda en n el valor numrico de a n = 3.1416

3.3. EXPRESIONES Y ECUACIONES SIMBLICAS


>A=[1 1/3;1 sqrt(2)] % A es matriz numrica 2 por 2 A = 1.0000 0.3333 1.0000 1.4142 >B=sym(A) % B es la expresin simblica de A B = [1, 1/3] [1, sqrt(2)] >C=double(B) % Recupera A en este caso

62

Para obtener este resultado de B, Matlab busca expresiones racionales de grandes enteros (o irracionales si no encuentra lo anterior) que queden en el rango [num , num + ] donde num es el dato que va a convertir y = num eps siendo eps la precisin del dato. Si encuentra mas de una expresin simblica elige la mas prxima a num. Como se supone que num es un resultado numrico obtenido por clculos anteriores, no siempre se gana precisin pasando de numrico a simblico. Otra cosa es que se obtenga el valor de num desde un proceso enteramente simblico. Mas adelante veremos ejemplos de este hecho al estudiar la funcin vpa. La funcin sym tambin admite la forma S=sym(A,flag) que permite controlar el tipo de representacin simblica que asignar a S. Para ms detalles hacer >help sym

3.3.

Expresiones y ecuaciones simblicas

Una vez denida una variable simblica, cualquier expresin vlida en Matlab que incluya dicha variable simblica y sea del tipo f=expresion hace que la variable f sea tambin una variable simblica. Si la expresin no se asigna a ninguna variable, entonces la variable por defecto ans se convierte en simblica por el momento. Tambin se puede denir una expresin simblica sin haber declarado previamente como simblicas las variables que contiene, por ejemplo: >clear, syms x, f=x^2+2*x+1 f = x^2+2*x+1 >g=z^2+1 g = z^2+1 % Crea expresin simblica f

Pese a que z no ha sido declarada explcitamente como variable simblica, se observa en el Workspace que g s tiene el tipo sym object. La forma de declarar g consiste en encerrar entre comillas simples la expresin, pero como ahora z no es sym object, cualquier referencia a esta variable deber hacerse tambin entre comillas simples (como si fuera una subexpresin simblica)

3.3. EXPRESIONES Y ECUACIONES SIMBLICAS

63

En el ejemplo anterior hemos encadenado en la misma lnea 3 comandos Matlab separados por una , (en vez de ;) porque nos interesa ver los resultados parciales y para ahorrar espacio en estos apuntes. Observad que la orden syms x no genera ninguna salida porque slo es una declaracin de variable simblica, no una asignacin a otra variable. Si ponemos >x=sym(x) s se produce una respuesta al asignar el carcter x a la variable simblica del mismo nombre. Este hecho es totalmente coherente con la declaracin de g. Nota: Si el carcter = aparece en una expresin simblica, dejamos de hablar de expresin para hablar de ecuacin simblica. En este caso el signo = no se considera una asignacin de valor a la variable de su izquierda, sino otro carcter de la expresin simblica.

3.3.1. Substituciones
Si en una expresin simblica queremos sustituir una variable por otra o por una constante para obtener su valor en un punto utilizamos la orden subs(f,antiguas,nuevas) Si hay que sustituir ms de una variable se ponen entre llaves separadas por comas. Por ejemplo, si queremos calcular f(3) y g(1) haramos: >subs(f,x,3), subs(g,z,1) ans = 15 ans = 2 Ntese la referencia a la variable z no declarada como sym. Si no ponemos las comillas simples el Matlab nos dir que la variable z no est denida ya que no ha recibido ningn valor ni est declarada como simblica.. Exemple 3.3.1. Construir f = ax2 + bx + c. Sustituir la variable x por t. Para a=2, b=1, c=0, obtener el valor de f cuando t=2. Para los mismos valores anteriores, obtener el valor de f para t=[1:4]. Solucin >syms x a b c t >f=a*x^2+b*x+c; >g=subs1(f,x,t) g = a*t^2+b*t+c >h=subs(g,{a,b,c},{2,1,0}) % 3 variables y 3 valores ==> llaves h = 2*t^2+t

3.3. EXPRESIONES Y ECUACIONES SIMBLICAS


>u=subs(h,t,2) u = 10 >v=subs(h,t,[1:4]) v = 3 10 21

64

% 1 variable con 4 valores 36

Exemple 3.3.2. Realizar los cambios que se indican en las siguientes frmulas: a) En x3 + 2x + 5 ln(x) + 1 sustituir x por e. b) En x + cosx realizar el cambio de variable x = y 2 + 1 a) >> syms x >> subs(x^3+2*x+5*log(x)+1,exp(1)) >> ans = 31.5221 b) >> syms y >> subs(x+cos(x),y^2+1) >> ans = y^2+1+cos(y^2+1) Notad que la substitucin para obtener v no precisa llaves { y } pues los 4 valores reemplazan a la misma variable t y dan 4 respuestas. Por lo tanto se puede sustituir una variable por todo un vector o matriz de constantes denido previamente.

3.3.2.

Qu variables simblicas hay en F?

Una expresin simblica puede contener varias variables simblicas y parmetros (sean o no simblicos). Por ejemplo F=a*t^2+b*t+c es la forma estndar de denir un polinomio de grado 2 en la variable t, siendo a, b y c 3 parmetros. Si queremos encontrar la forma simblica de las races de F=0 vamos a tener que denir como sym tanto t como a, b y c. Para saber qu variables simblicas hay denidas en una expresin, se usa la funcin findsym, que busca todas las variables sym de una expresin (o todas las denidas si no le damos ninguna expresin simblica y la versin de Matlab lo permite), exceptuando la constante pi y las variables i, j que Matlab usa para representar la parte imaginaria de un complejo. La salida de esta funcin es una lista de variables sym separadas por comas y ordenadas alfabticamente. A la que est ms cerca de la variable por defecto que es x, la llamamos en adelante nd1.Si hay dos a igual distancia de x se toma la primera posterior a x. La lista no es cclica, por lo que a es siempre la ms lejana a x. Es importante destacar que el propio Matlab llama a esta funcin cada vez que vamos a trabajar con una expresin simblica y no le indicamos explcitamente qu variable debe considerar como variable principal. En tal caso, Matlab considera como

3.4. RESOLUCIN DE ECUACIONES

65

variable principal nd1. Si queremos saber cual de todas las variables simblicas es nd1 en la expresin A, basta hacer findsym(A,1) Ejemplos: funcin ndsym(alpha+a+b) ndsym(cos(alpha)*b*x1 + 14*y,2) ndsym(y*(4+3*i) + 6*j) Salida a, alpha, b x1,y y nd1 b x1 y

3.4.

Resolucin de ecuaciones

Para resolver ecuaciones Matlab utiliza el comando solve con alguna de las siguientes sintaxis: solve(ecuacin, variable) Variable es el nombre de la incgnita que se quiere averiguar. Si la ecuacin tiene una nica variable, no es necesario escribirla. Si la ecuacin tiene la estructura f(x)=0 y la variable x est denida como simblica, el comando admite la siguiente estructura: solve(f(x),x) Exemple 3.4.1. Resolver las ecuaciones: 1. x2 + 2x + 1 = 0 2. x3 + 8 = 0 Solucin: si no lo habas hecho ya en otro ejercicio, debers denir la variable x como simblica. En caso contrario bastar con que escribas la ecuacin entre comillas simples. 1. >> solve(x^2+2*x+1) ans = -1 -1 >> solve(x^3+8) ans = -2 1+i*3^(1/2) 1-i*3^(1/2)

2.

3.4. RESOLUCIN DE ECUACIONES


Pasamos las tres soluciones a su valor numrico. >> double(ans) ans = -2.0000 1.0000 + 1.7321i 1.0000 - 1.7321i Si tenemos sistemas de ecuaciones hemos de resolverlos de la siguiente forma:

66

>> [x,y] = solve(x^2 + x*y + y = 3,x^2 - 4*x + 3 = 0) x = 1 3 y = 1 -3/2 Las soluciones serian (1, 1) y (3, 3/2). Si la ecuacin que vamos a resolver esta igualada a 0 (= 0) estos se puede omitir. Obtendramos las mismas soluciones haciendo: >> [x,y] = solve(x^2 + x*y + y - 3,x^2 - 4*x + 3 ) x = 1 3 y = 1 -3/2 Si hacemos solve(p*x = r) decide que la incgnita es x y devuelve ans = r/p Si ahora hacemos >> S = solve(x^2+y^2 - 2*x - 1 = 0,x^2 - y^2 - 1 = 0) S = x: [4x1 sym] y: [4x1 sym] que serian

3.5. LA FUNCIN INLINE


>> S.x ans = 5^(1/2)/2 + 1/2 1/2 - 5^(1/2)/2 5^(1/2)/2 + 1/2 1/2 - 5^(1/2)/2 >> S.y ans = (5^(1/2)/2 + 1/2)^(1/2) (1/2 - 5^(1/2)/2)^(1/2) -(1/2*5^(1/2) + 1/2)^(1/2) -(1/2 - 1/2*5^(1/2))^(1/2) vemos que si tomamos >> x=5^(1/2)/2 + 1/2 x = 1.6180 >> y=(5^(1/2)/2 + 1/2)^(1/2) y = 1.2720 obtenemos >> [x^2+y^2 - 2*x - 1,x^2 - y^2 - 1 ] ans = 0 0

67

Si tenemos dos ecuaciones con tres incgnitas podemos calcular las soluciones de dos en funcin de la tercera. Esto es: >> [u,v] = solve(a*u^2 + v^2 = 0,u - v = 1) u = 1 - (a + (-a)^(1/2))/(a + 1) 1 - (a - (-a)^(1/2))/(a + 1) v = -(a + (-a)^(1/2))/(a + 1) -(a - (-a)^(1/2))/(a + 1)

3.5.

La funcin inline

Esta sirve para denir funciones denidas a trozos. En primer lugar veamos

3.5. LA FUNCIN INLINE

68

3.5.1. Operadores relacionales y lgicos


Para dibujar grcas de funciones denidas a trozos, hay que hacer uso de las llamadas variables lgicas. Lo mejor es ver un ejemplo. Creemos un vector del 1 al 8 equiespaciado >> x=1:8 x = 1 2 3 4 5 6 7 8 Ahora escribimos >> x>5 ans = 0 0 0 0 0 1 1 1 Lo que ha ocurrido es que donde no se cumple la condicin (x>5), aparece un 0 y donde s se cumple un 1. La nueva variable creada es una variable lgica. Para crear estas variables lgicas pueden utilizarse los siguientes operadores relacionales O PERADORES RELACIONALES < Menor que > Mayor que <= Menor o igual >= Mayor o igual == Igual = distinto Adems estos operadores relacionales se pueden combinar con los operadores lgicos O PERADORES LGICOS & y | o no Observar la notacin del punto delante de la operacin del producto (.*) para operar elemento a elemento. Ahora la dibujaramos con >> plot(x,y,.);grid on (conviene dibujarla con un trazado de puntos o cruces para que se vean las discontinuidades si las hay)

3.5. LA FUNCIN INLINE

69

3.5.2. La funcin inline


Hay otra forma de evaluar una funcin en un punto incluso cuando sta es una funcin a trozos, consiste en utilizar la funcin de matlab inline. Supongamos que queremos evaluar la funcin en el punto x=2, x=3,x=-1, hacemos f=inline((x^2+2*x-8)/(x+1)) f = Inline function: f(x) = (x^2+2*x-8)/(x+1) >> f(2) ans = 0 >> f(3) ans = 1.7500 >> f(-1) Warning: Divide by zero. % Aqui nos avisa de que dividimos % por cero, luego cuidado con el % punto x=-1, anula el denominador. > In inlineeval at 13 In inline.subsref at 25 ans = -Inf Hay otra forma de sustituir una variable por un valor, con el comando subs, >> subs(x+1,3) ans = 4 pero ste no funciona sobre funciones a trozos, pues requiere que la variable sea simblica. Veamos un ejemplo de inline sobre una funcin a trozos: >> f=inline((x.^2+1).*(x<0)+1.*((0<=x)&(x<1))+(-x+3).*(1<=x)) f = Inline function: f(x) = (x.^2+1).*(x<0)+1.*((0<=x)&(x<1))+(-x+3).*(1<=x) >> f(-2) ans =5 >> f(0) ans =1 >> f(2) ans =1

3.5. LA FUNCIN INLINE

70

Hay dos nociones distintas aunque relacionadas que son importantes para el Clculo: Una son las expresiones simblicas como sen x o x2. La otra son las reglas o algoritmos que permiten obtener una salida numrica a partir de unas entradas tambin numricas. La segunda denicin es ms general; sirve, por ejemplo, para denir una funcin f(x) como x2 si x es negativa o 0 y sen x si x es positiva. Por otro lado, cualquier expresin simblica implica una regla de evaluacin. Es decir, si sabemos que f (x) = x2 entonces sabemos que f (4) = 42 = 16. En MATLAB, la diferencia fundamental entre una funcin y una expresin simblica radica en que una funcin puede ser invocada con argumentos y una expresin simblica no. Por otra parte, una expresin simblica puede ser derivada mientras que una funcin no puede. En MATLAB las funciones son creadas de dos formas: como cheros .m y como funciones inline. La forma tpica de denir una expresin simblica es la siguiente: syms x f=x^2-sin(x) f = x^2-sin(x) Las dos lneas siguientes muestra que podemos derivar f, pero que no podemos evaluarla, al menos de una forma obvia. Ntese que MATLAB reconoce la variable. En caso de que haya varias variables simblicas, podemos especicar aquella respecto a la cual queremos derivar diff(f) ans = 2*x-cos(x) f(4) ??? Index exceeds matrix dimensions. Podemos evaluar f(4) sustituyendo x por 4 de la siguiente forma: subs(f,x,4) ans = 16.7568 Podemos tambin convertir f en una funcin inline con el comando: fin=inline(char(f)) fin = Inline function: fin(x) = x^2-sin(x)

3.5. LA FUNCIN INLINE

71

Lo que est sucediendo aqu es que el comando inline requiere una cadena como entrada y char convierte f, expresin simblica, en la cadena x^2-sin(x). (Si simplemente hubiramos escrito fin=inline(f) obtendramos un mensaje de error puesto que f no es una cadena). La funcin inline n acepta ahora argumentos: fin(4) ans = 16.7568 De forma similar podemos construir una funcin a partir de la derivada de f: fxin=inline(char(diff(f))) fxin = Inline function: fxin(x) = 2*x-cos(x) La funcin MATLAB char reemplaza el argumento que recibe por la cadena que lo representa, hacindolo as accesible a funciones que requieren cadenas como argumento, como por ejemplo inline. Sin embargo, cuando char es aplicado a una expresin simblica, el resultado an es una expresin simblica y puede ser derivada: diff(char(f)) ans = 2*x-cos(x) La otra forma de crear una funcin evaluable es escribiendo una funcin en chero .m Esta es la forma principal de denir funciones en la mayor parte de aplicaciones de MATLAB. Recordemos que un chero .m se crea de forma separada. Supongamos que hemos escrito el chero .m fun1.m que contiene lo siguiente: function out=fun1(x) out=x^2-sin(x); Ahora la funcin fun1 puede ser invocada con un argumento: fun1(4) ans = 16.7568 Una de las cosas que podemos querer hacer con una funcin es representar su grca. La operacin ms elemental en MATLAB es dibujar un punto con unas coordenadas especcas: plot(4,4) La salida de este comando es el punto azul centrado en la gura. Para dibujar una curva MATLAB dibuja una secuencia de puntos conectados mediante segmentos de recta.

3.6. DOMINIOS, LMITES Y CONTINUIDAD

72

La entrada para tales dibujos consiste en dos vectores (listas de nmeros). El primer argumento es el vector de coordenadas x y el segundo el vector de coordenadas y. MATLAB conecta los puntos cuyas coordenadas aparecen en posiciones consecutivas de los vectores de entrada. Dibujemos la funcin que denimos en la transparencia anterior. En primer lugar se necesita un vector de coordenadas x: X1=-2:.5:2 X1 = Columns 1 through 7 -2.0000 -1.5000 -1.0000 -0.5000 0 0.5000 1.0000 Columns 8 through 9 1.5000 2.0000 X1 es un vector de nueve componentes, comenzando en -2 y avanzando hasta 2 con incrementos de 0,5. Ahora se debe preparar un vector de coordenadas y aplicando nuestra funcin sobre las coordenadas x. Para ello debemos modicar nuestra funcin de tal forma que pueda operar sobre las componentes individuales de un vector. La funcin MATLAB vectorize reemplaza los operadores *, ^ y / por .*, .^ y ./ respectivamente. Recordemos que MATLAB trabaja fundamentalmente sobre vectores y matrices, y su interpretacin por defecto de la multiplicacin, divisin y exponenciazin es que son operaciones sobre matrices. El punto antes del operador indica que se debe aplicar componente a componente. fin=inline(vectorize(f)) fin = Inline function: fin(x) = x.^2-sin(x) Y1=fin(X1) Y1 = Columns 1 through 7 4.9093 3.2475 1.8415 0.7294 0 -0.2294 0.1585 Columns 8 through 9 1.2525 3.0907 plot(X1,Y1)

3.6.

Dominios, lmites y continuidad

Tras conocer como representar funciones y algunos aspectos de clculo simblico en matlab, vamos a utilizarlos para trabajar en conceptos como clculo de dominios, lmites y continuidad de funciones.

3.6. DOMINIOS, LMITES Y CONTINUIDAD


4

73

8 4

Figura 3.1: funcin f (x) =

x2 x 6 x2 x 6.

Exemple 3.6.1. Determinar el dominio de la funcin f (x) = >> sym x >> solve(x^2-x-6) >> ans = 3 -2

Los dos valores que anulan son x = 3 y x = 2. Dibujando el polinomio (Figura 3.1), detectamos cuando es positivo y cuando negativo. >> fplot(x^2-x-6,[-4 4 -8 5]); >> hold on; fplot(x*0,[-4 4 -8 5]) % Dibujo el eje x para % situar los cambios de % signo del polinomio. Esto es suciente para darse cuenta que ] , 2[ es positiva, ] 2, 3[ es negativa y ]3, +[ es positiva. Luego el dominio de f (x) es ] , 2[]3, + nf]. Si intentamos dibujar la grca de la funcin inicial (Figure 3.2), sin pensar en el dominio de la funcin, >> fplot(sqrt(x^2-x-6),[-4 4 -1 5]) Warning: Imaginary parts of complex X and/or Y arguments ignored. > In fplot at 158 Nos avisa de que estamos tomando valores de x que producen races de nmeros negativos, es decir, complejos, an as dibuja la grca, aunque podramos pensar que entre [2, 3] la funcin vale cero y eso no es cierto, pues en ese intervalo la funcin no existe.

3.6. DOMINIOS, LMITES Y CONTINUIDAD


5

74

1 4

Figura 3.2: funcin f (x) =

x2 x 6

sto nos permite darnos cuenta que hay imagen para los x que caen dentro de ] , 2[]3, +], pero cuidado cmo ya he dicho antes, podramos pensar que entre [2, 3] la funcin vale cero y eso no es cierto, pues en ese intervalo la funcin no existe.

3.6.1. Clculo de lmites: Lmites laterales.


. Matlab permite calcular lmites mediante el comando limit, que admite las siguientes sintaxis: limit(f,x,a) calcula el lmite de una expresin simblica f cuando x tiende al punto a. Si slo hay una variable se puede omitir. limit(f,a) calcula el lmite de una expresin simblica f , con respecto a la variable independiente de la funcin, cuando sta tiende al punto a, si hay ms de una variable toma la primera por orden alfabtico. limit(f) calcula el lmite anterior cuando a = 0.

limit(f,x,a,right) calcula el lmite por la derecha de a.

limit(f,x,a,left) calcula el lmite por la izquierda de a.

3.6. DOMINIOS, LMITES Y CONTINUIDAD


funcin limit(f,x,a) limit(f,a) limit(f) limit(f,x,a,left) limit(f,x,a,right) Salida lim. cuando x a Como no est x usa nd1 a Si tampoco est a, usa a=0 lim. por la izquierda. lim. por la derecha.

75

Como se observa en el cuadro anterior disponemos de todas las opciones. Veamos algunos ejemplos tras denir >clear, syms x a t h; funcin limit(sin(x)/x) limit((x-2)/(x^2-4),2) limit((1+2*t/x)^(3*x),x,inf) limit(1/x,x,0,right) limit(1/x,x,0,left) limit((sin(x+h)-sin(x))/h,h,0) Salida 1 1/4 exp(6*t) inf -inf cos(x)

Otro ejemplo. Si hemos hecho v = [(1 + a/x)^x, exp(-x)]; entonces: limit(v,x,inf,left) % debe dar [exp(a), 0]

con lo que hemos obtenido dos lmites simultneos ya que v tiene 2 expresiones simblicas (vector la de expresiones). Exemple 3.6.2. Para calcular l ( m >> >> >> >> 2 x + 3 (x+1) ) hemos de hacer x 2 x + 5 limit(((2*x+3)/(2*x+5))^(x+1)) ans = 3/5 limit(((2*x+3)/(2*x+5))^(x+1),x,inf) ans = exp(-1)

y resuelve la indeterminacin 1 . 1 Exemple 3.6.3. Calcular l m . x0 x Tal y como sabemos por teora, hay una divisin por cero y por tanto hay que estudiar lateralidad. Si calculamos con matlab el lmite total, se obtiene >> limit(1/x) >> ans = NaN lo que nos obliga a estudiar lateralidad para poder concluir.

3.6. DOMINIOS, LMITES Y CONTINUIDAD


>> limit(1/x,x,0,right) >> ans = Inf >> limit(1/x,x,0,left) >> ans = -Inf

76

Concluyendo como ya debemos saber que el lmite no existe, pues los laterales existen pero son distintos. 0 Veamos que Matlab resuelve perfectamente las indeterminaciones . 0 Exemple 3.6.4. Calcular l m x2 4 . x2 x 2

>> limit((x^2-4)/(x-2),x,2) >> ans = 4

3.6.2. Continuidad de funciones


Para estudiar la continuidad de una funcin utilizando Matlab, lo ms conveniente es compaginar toda la informacin grca y analtica. La informacin grca la obtendremos representado la funcin convenientemente en su dominio y la analtica estudiando el valor de la funcin en el punto de estudio y los lmites laterales. x2 + 3 1 Exemple 3.6.5. Estudiar la continuidad de la funcin f (x) = . x2 1 Represento la funcin, >> fplot((sqrt(x^2+3)-1)/(x^2-1),[-6 6 -6 6]); grid on El estudio grco (Figura 3.3) nos permite armar que la funcin est denida en todos los reales menos en x = 1, x = 1, que analticamente se puede deducir pues son los nicos puntos que anulan el denominador y el numerador est denido para todo nmero real. Observar como Matlab dibuja el comportamiento asinttico en esos puntos. Grcamente tambin puedo armar que los lmites totales en 1 y en 1 no existen, pues para ambos puntos los lmites laterales dan diferente. Compruebo esta armacin analticamente: Hay una forma de evaluar la funcin en un punto concreto: comando inline >> f=inline((sqrt(x^2+3)-1)/(x^2-1)) f = Inline function:

3.6. DOMINIOS, LMITES Y CONTINUIDAD


6

77

6 6

Figura 3.3: funcin f (x) =

x2 + 3 1 x2 1

f(x) = (sqrt(x^2+3)-1)/(x^2-1) >> f(1) Warning: Divide by zero. > In inlineeval at 13 In inline.subsref at 25 >> ans = Inf >> f(-1) Warning: Divide by zero. > In inlineeval at 13 In inline.subsref at 25 >> ans = Inf Notemos que la funcin no est denida en x = 1 y tampoco en x = 1. >> syms x % Necesario para utilizar limit. >> limit((sqrt(x^2+3)-1)/(x^2-1),x,1) >> ans = NaN Estudio lateralidad, >> limit((sqrt(x^2+3)-1)/(x^2-1),x,1,right) >> ans = Inf >> limit((sqrt(x^2+3)-1)/(x^2-1),x,1,left) >> ans = -Inf

3.6. DOMINIOS, LMITES Y CONTINUIDAD

78

Este estudio me permite concluir que en x = 1 hay una discontinuidad asinttica. Hacemos lo mismo en el punto x = 1. >>limit((sqrt(x^2+3)-1)/(x^2-1),x,-1) >> ans = NaN Estudio lateralidad, >> limit((sqrt(x^2+3)-1)/(x^2-1),x,-1,right) >> ans = -Inf >> limit((sqrt(x^2+3)-1)/(x^2-1),x,-1,left) >> ans = Inf ca. Este estudio me permite concluir que en x = 1 hay una discontinuidad asintti-

Exemple 3.6.6. Estudiar la continuidad de la funcin f (x) = si x < 2 (2x + 2) si x 2


1 x+1

(3.1)

Estudiamos el dominio de la funcin: >>f=inline(1./(x+1).*(x<2)+(2*x+2).*(x>=2)) f = Inline function: f(x) = 1./(x+1).*(x<2)+(2*x+2).*(x>=2) >> f(-1) Warning: Divide by zero. > In inlineeval at 13 In inline.subsref at 25 >> ans = Inf >> f(2) >> ans = 6 Si x = 1, la funcin no est denida, >> x=-3:0.01:3; >> y=1./(x+1).*(x<2)+(2*x+2).*(x>=2); Warning: Divide by zero. >> plot(x,y,*);grid on

3.6. DOMINIOS, LMITES Y CONTINUIDAD


100

79

80

60

40

20

20

40

60

80

100 3

Figura 3.4: funcin 3.1 Aparentemente se ve una discontinuidad (Figure 3.4) asinttica y otra de salto nito. Estudio analtico: Lo primero es denir la variable independiente x como simblica para que el comando limit funcione adecuadamente. >> syms x Como no disponemos de una funcin simblica que almacene la funcin a trozos f (x), para calcular los lmites laterales, debemos de elegir manualmente la expresin analtica (rama) que le corresponde a la funcin segn nos acercamos a 2 por la derecha o por la izquierda, y lo mismo con el 1. >> limit(1/(x+1),x,2,left) >> ans = 1/3 >> limit(2*x+2,x,2,right) >> ans = 6 Discontinuidad de salto nito en x = 2. >> limit(1/(x+1),x,-1,left) >> ans = -Inf >> limit(1/(x+1),x,-1,right) >> ans = Inf Discontinuidad asinttica en x = 1.

3.6. DOMINIOS, LMITES Y CONTINUIDAD


1

80

0.8

0.6

0.4

0.2

0.2

0.4

0.6

0.8

1 6

Figura 3.5: funcin (3.2) Exemple 3.6.7. Estudiar la continuidad de la funcin f (x) = sin(x) si x < cos(x) si x > (3.2)

Si la funcin presenta alguna discontinuidad sta ocurrir en l punto de ruptura x = . Represento la funcin en [6, 6], denindola como funcin a trozos, >> x=-6:0.01:6; >> y=sin(x).*(x<pi)+cos(x).*(x>=pi); >> plot(x,y,*) Muestra claramente (Figura 3.5) la discontinuidad de salto nito en x = . Para estudiar la discontinuidad analticamente, necesitamos estudiar el valor de la funcin en el punto y los lmites laterales. >> f=inline(sin(x).*(x<pi)+cos(x).*(x>=pi)) f = Inline function: f(x) = sin(x).*(x<pi)+cos(x).*(x>=pi) >> f(pi) >> ans = -1 Lo primero es denir la variable independiente x como simblica para que el comando limit funcione adecuadamente. >> syms x Ahora no disponemos de una funcin simblica que almacene la funcin a trozos f (x). Para calcular los lmites laterales, del mismo modo, debes de elegir t la expresin analtica (rama) que le corresponde a la funcin segn te acerques a por la derecha o por la izquierda,

3.6. DOMINIOS, LMITES Y CONTINUIDAD


40

81

30

20

10

10

20

30 6

Figura 3.6: funcin (3.3) >> limit(cos(x),x,pi,right) >> ans = -1 Si vamos por la derecha de , la funcin que debo coger es cos(x). >> limit(sin(x),x,pi,left) >> ans = 0 Si vamos por la izquierda de , la funcin que debo coger es sin(x). Por tanto, se concluye que la funcin es continua slo a la izquierda de , presentando en x = una discontinuidad de salto nito. Exemple 3.6.8. Estudiar la continuidad de la funcin si x < 1 2x 8x + 7 si x 1 Representamos la funcin a trozos, >> x=-6:0.01:6; >> y=(-3.*(x+1)./(2*x.^2-x-6)).*(x<1)+(2*x.^2-8*x+7).*(x>=1); Warning: Divide by zero. >> plot(x,y,*);grid on Observamos (Figura 3.6) un punto de discontinuidad asinttica, que estar en un valor que anula un denominador, y luego habr que llevar cuidado tambin con el punto de ruptura x = 1. Estudiamos si dentro del conjunto x < 1 hay algn valor que anule el denominador 2 x2 x 6.
3(x+1) 2x2 x6 2

(3.3)

3.7. SIMPLIFICADORES
>> solve(2*x^2-x-6) >> ans = 2 -3/2

82

Efectivamente el punto x = 3/2 cae dentro de los menores que 1 y de x = 2 me olvido. Estudio analtico entorno al punto x = 3/2: >> syms x >> limit((-3*(x+1)/(2*x^2-x-6)),x,-3/2,left) >> ans = Inf >> limit((-3*(x+1)/(2*x^2-x-6)),x,-3/2,right) >> ans = -Inf Discontinuidad asinttica en x = 3/2. Estudio del punto de ruptura, x = 1: >> limit((-3*(x+1)/(2*x^2-x-6)),x,1,left)>> ans = 6/5 >> limit(2*x^2-8*x+7,x,1,right) >> ans = 1 Discontinuidad de salto nito en x = 1.

3.7.

Simplicadores

Supongamos que F es una expresin simblica con la forma F=P*exp(sqrt(3*x^2/a^4)), donde P representa un polinomio en la variables x que puede tener grado elevado. Si estamos buscando extremales (mximos y mnimos relativos) de F debemos anular su derivada. Pero en ella va a aparecer la exponencial multiplicando a cada trmino del polinomio resultante y sabemos que esta exponencial nunca podr anularse en el rango de los reales. Resulta pues intil derivar F y endosarle todo el mogolln que salga a cualquier resolvedor simblico de ecuaciones, bajo la excusa de que si lo puede hacer l, para qu tengo que hacer yo el trabajo?. Nos podemos encontrar sorpresas inesperadas y no sern aceptables quejas del tipo aes que a m se me ha colgado! o esta otra aes que mi ordenador va muy lento!. Hay que buscar una forma de denir esa exponencial como una subexpresin simblica, luego pedir que simplique o factorize con esa subexpresin y, nalmente, buscar los ceros del otro factor. El Matlab dispone de varias funciones simplicadoras que deben aplicarse en los procesos de derivacin e integracin (sobretodo en el primero). Estas son:

3.7. SIMPLIFICADORES
Uso del comando simplify.

83

Matlab permite hacer clculos algebraicos como simplicar, factorizar o expandir. Algunas simplicaciones sencillas las efecta directamente el programa. El comando que permite simplicar una expresin es simplif y, su sintaxis es: simplif y(expresion) donde las variables debern denirse previamente como simblicas. Exemple 3.7.1. Simplicar las siguientes expresiones: a) x3 + 5xy 5x3 11xy y 3 b) c) (x2 4)(x + 5) x+2 x2 x+4 + 7x + 12

d) sin2 x + cos2 x En el primer apartado bastar con escribir la frmula, tras denir las dos variables x e y como simblicas >> syms x y >> x^3+5*x*y-5*x^3-11*x*y-y^3 >> ans = -4*x^3-6*x*y-y^3 En el apartado b) necesito que recurra a una identidad notable, la suma por diferencia, diferencia de cuadrados, luego requiere del comando simplif y, >> simplify((x^2-4)*(x+5)/(x+2)) % prueba sin usar simplify y vers % cmo no realiza el clculo. >> ans = (x+5)*(x-2) En el c) se requiere el comando simplif y, porque el polinomio del denominador no est factorizado. >> simplify((x+4)/(x^2+7*x+12)) >> ans = 1/(x+3) En el d) tambin, porque la frmula contiene funciones trigonomtricas: >> simplify(sin(x)^2+cos(x)^2)>> ans = 1 Prueba sin usar simplify y vers cmo no efecta el clculo.

3.7. SIMPLIFICADORES
Uso del comando pretty.

84

Si se quiere que la frmula simplicada aparezca de una forma similar a como se escribe con el lenguaje matemtico ordinario se utiliza el comando pretty, de sintaxis: pretty(expresion) Exemple 3.7.2. Simplicar la expresin (x + 3)(x + 5) + 1 + 3 expresando el x+2 resultado como una funcin racional (cociente de dos polinomios). >> pretty((x+3)*(x+5)+1+3/(x+2)) 3 (x + 3) (x + 5) + ----- + 1 x + 2 Uso del comando factor El comando factor permite expresar un polinomio con coecientes racionales como producto de polinomios de menor grado con coecientes racionales. Su sintaxis es f actor(expresion) En el caso de que el polinomio tenga races complejas, aparecer como factor el producto de cada raz por su conjugada (es decir, el polinomio con coecientes reales). Exemple 3.7.3. Factorizar x6 + 1 y ((x + 3)(x + 4) (x + 2)2 )2 >> factor(x^6+1) >> ans = (x^2+1)*(x^4-x^2+1) >> factor(((x+3)*(x+4)-(x+2)^2)^2) >> ans = (3*x+8)^2 Uso del comando expand. expand(S) escribe cada elemento de una expresin simblica S como una producto de sus factores. se suele utilizar en los polinomios, aunque tambim espande las funciones trigonomtricas, exponenciales y logartmicas. El comando que realiza una serie de operaciones cuando su ejecucin no se corresponde necesariamente con una simplicacin de la frmula o cuando hay otra frmula que permite escribir la expresin de otro modo es expand. Su sintaxis es expand(expresion)

3.8. CLCULO DE DERIVADAS.


>> expand((3*x+8)^2) >> ans = 9*x^2+48*x+64 >> expand(cos(x+y)) >> ans = cos(x)*cos(y)-sin(x)*sin(y) >> expand(exp(x+y)) >> ans = exp(x)*exp(y) Uso del comando simple.

85

El comando simple sirve para que el sistema combine frmulas matemticas y exprese el resultado de la forma ms simple. Sintaxis simple(expresion) >> syms x >> p=simple(sin(x)^2+cos(x)^2); >> p p = 1 Tal y como hemos visto con el paquete simblico podemos calcular lmites, ahora vamos a utilizarlo para derivar.

3.8.

Clculo de derivadas.

Para calcular la derivada de orden n de una funcin de una variable se utiliza el comando diff cuya sintaxis es, diff(f,variable,n) que calcula la derivada de orden n de la funcin (expresin simblica) f , respecto de la variable escogida. Si no se especica el orden de la derivada, calcula la derivada primera. Si no se especica la variable y en la frmula de la funcin aparece la x, derivar respecto de esa variable. Si la funcin depende de una nica variable, no es necesario especicar sta para calcular la derivada. Exemple 3.8.1. Calcular d 2 d2 (x + cos(x + 1) sin(x2 )) y 2 (x ln(x)) dx dx

>> syms x >> diff(x^2+cos(x+1)*sin(x^2),x) >> ans = 2*x-sin(x+1)*sin(x^2)+2*cos(x+1)*cos(x^2)*x

3.8. CLCULO DE DERIVADAS.

86

Para que salga en formato matemtico basta con enlazar con el comando pretty >> pretty(diff(x^2+cos(x+1)*sin(x^2),x)) 2 2 2 x - sin(x + 1) sin(x ) + 2 cos(x + 1) cos(x ) x Para la segunda derivada >> pretty(diff(x*log(x),x,2)) 1/x Estudio de la derivabilidad de una funcin. Recordemos que si f (x) es una funcin denida en un intervalo [a, b[, si existe el f (x0 + h) f (x0 ) y es nito para todo x0 [a, b[, a dicho lmite se le llama l + m h0 h derivada por la derecha en el punto x0 , y se representa por:
f+ (x0 ) = l + m h0

f (x0 + h) f (x0 ) donde h > 0. h

Anlogamente si f (x) est denida en el intervalo ]a, b], se dene la derivada por la izquierda en el punto x0 , ]a, b] cmo:
f (x0 ) = l m h0

f (x0 + h) f (x0 ) donde h < 0 h

Teniendo denidas la derivada por la derecha y por la izquierda, concluimos que, f (x) es derivable en un punto x0 si su derivada por la derecha y por la izquierda existen y coinciden, es decir cuando existe el lmite total, y entonces la derivada de f (x) en el punto x0 es: f (x0 + h) f (x0 ) , f (x0 ) = f+ (x0 ) = f (x0 ) h Vamos a utilizar lo que sabemos de Matlab para estudiar si una funcin es derivable en un punto. f (x0 ) = l m
h0

Exemple 3.8.2. Calcula la derivada de la funcin f (x) = 4x2 5x + 7 haciendo uso de la denicin y del comando diff. >> syms x h >> f=4*x^2-5*x+7 % Guardamos en f la funcin. f = 4*x^2-5*x+7 >> g=(subs(f,x+h)-f)/h % Guardamos en g el cociente incremental % que hay que calcular en la definicin % de derivada en un punto.

3.8. CLCULO DE DERIVADAS.

87

>>

>>

>> >>

g = (4*(x+h)^2-5*h-4*x^2)/h g=expand(g) % Desarrollamos con el comando expand. g = 8*x+4*h-5 der_f=limit(g,h,0) % Calculo el lmite de g cuando h % tiende a cero, es decir, la % derivada, la guardo en der_f. der_f = 8*x-5 diff(f) % Ahora hago uso del comando diff, el resultado % debe ser el mismo. ans = 8*x-5

Exemple 3.8.3. Estudiemos la derivabilidad de la funcin valor absoluto f (x) = |x| en el punto x = 0. >> syms x h % Necesitamos dos variables simblicas, x y h. >> f=abs(x) % Guardamos en f la funcin valor absoluto de x. f =abs(x) >> g=(subs(f,0+h)-subs(f,0))/h % Guardamos en g el cociente % incremental que hay que % calcular en la definicin % de derivada en un punto. g =abs(h)/h >> limit(g,h,0,right) % Derivada por la derecha. >> ans = 1 >> limit(g,h,0,left) % Derivada por la izquierda. >> ans = -1 Al ser distintas la funcin no es derivable en 0. Si directamente realizamos el clculo de la derivada del valor absoluto con diff >> diff(abs(x)) >> ans = sign(x) Si sustituyo la derivada en x = 0 >> subs( diff(abs(x)),0) >> ans =0

3.8. CLCULO DE DERIVADAS.


8000

88

7000

6000

5000

4000

3000

2000

1000

1000

2000 5

Figura 3.7: funcin 3.4 nos dice que no es derivable pero no aporta informacin de las derivadas a la derecha y a la izquierda. Exemple 3.8.4. Estudiar la derivada de la funcin f (x) =
x3 , x2 2 2x6 , x2

x2 x>2

(3.4)

en x = 2. Empiezo dibujando la funcin a ver la informacin que obtengo, >> x=-5:0.001:5; >> y=(x-3)./(x.^2-2).*(x<=2)+(2*x-6)./x.^2.*(x>2); Warning: Divide by zero. >> plot(x,y,.) Observamos en la Figura 3.7 dos discontinuidades asintticas. En el punto x = 2, es aparentemente continua, lo estudio analticamente. Hallo el valor de f (2), recordad que como es una funcin a trozos puedo usar inline, o bien puedo usar el comando subs, eligiendo manualmente la rama que corresponde a x = 2. Como me interesan clculos simblicos, voy a denir la x como simblica y por tanto debo de usar, el comando subs para hallar f (2). Si elijo la rama manualmente. >> syms x >> subs((x-3)/(x^2-2),x,2) >> ans = -0.5000 Con el comando inline,

3.8. CLCULO DE DERIVADAS.


>> f=inline((x-3)/(x.^2).*(x<=2)+(2*x-6)/x.^2.*(x>2)) f = Inline function: f(x) = (x-3)/(x.^22).*(x<=2)+(2*x-6)/x.^2.*(x>2) >> f(2) >> ans = -0.5000 >> limit((2*x-6)/x^2,x,2,left) >> ans = -1/2 >> limit((x-3)/(x^2-2),x,2,right) >> ans = -1/2

89

Por tanto, funcin es continua en x = 2, puede ser derivable o no serlo. Estudio la derivabilidad en x = 2: Debo de calcular f (2 + h) para h > 0 y para h < 0, encontrndonos con el problema de siempre, al no disponer de una funcin simblica que almacene f (x) de forma simblica, debemos calcular f (2 + h) eligiendo manualmente la rama que toca, segn vamos por la derecha o por la izquierda de 2. >> >> >> >> syms x h rama_izq=(x-3)/(x^2-2); g=(subs(rama_izq,x,2+h)-f(2))/h g = ((-1+h)/((2+h)^2-2)+1/2)/h >> limit(g,h,0,right) >> ans = 3/2 La derivada por la izquierda en x = 2 vale 3/2 (f (2) slo sabr lo que es si deniste f con inline) >> rama_dcha=(2*x-6)/x^2; >> g=(subs(rama_dcha,x,2+h)-f(2))/h >> g = ((-2+2*h)/(2+h)^2+1/2)/h >> limit(g,h,0,left) >> ans = 1 La derivada por la derecha de x = 2 vale 1. Por tanto, la funcin es continua en x = 2 pero no es derivable en x = 2.

3.9. APLICACIONES DE LA DERIVADA: MXIMOS-MNIMOS-PUNTOS DE INFLEXIN. OPTIMIZAC

3.9.

Aplicaciones de la derivada: Mximos-mnimos-Puntos de Inexin. Optimizacin.

Exemple 3.9.1. Determinar los mximos-mnimos y puntos de Inexin de la funcin 1 f (x) = e x . Debemos saber que el dominio de la funcin es R\{0}. Puedo empezar dibujando la funcin, a ver la informacin que me aporta la grca, para despus corroborar dicha informacin analticamente. >> fplot(exp(1/x),[-10 10 -1 8])

1 10

10

Figura 3.8: funcin f (x) = e x . La grca (Figura 3.8) me indica que no hay ni mximos ni mnimos relativos; parece que existe un punto de inexin a la izquierda del cero? syms x f=exp(1/x); der_f=diff(f,x) der_f = -1/x^2*exp(1/x) >> solve(der_f,x) Warning: Explicit solution could not be found. > In solve at 140 In sym.solve at 49 >> ans = [ empty sym ]
1 La derivada es x2 e x que no se anula en el dominio de la funcin. De ah que no posea ni mximos ni mnimos relativos. Calculo la derivada segunda, para determinar los puntos de Inexin:
1

>> >> >> >>

3.9. APLICACIONES DE LA DERIVADA: MXIMOS-MNIMOS-PUNTOS DE INFLEXIN. OPTIMIZAC


>> der2_f=diff(f,x,2) >> der2_f = 2/x^3*exp(1/x)+1/x^4*exp(1/x) >> solve(der2_f,x) >> ans = -1/2 Al igualar la segunda derivada a cero, obtenemos un posible punto de inexin, que admitiremos como tal o descartaremos segn su valor en la tercera derivada, >> der3_f=diff(f,x,3) >> der3_f = -6/x^4*exp(1/x)-6/x^5*exp(1/x)-1/x^6*exp(1/x) >> subs(der3_f,x,-1/2) >> ans = 4.3307 % Al ser distinto de cero, afirmamos que % la funcin tiene un punto de % inflexin que se alcanza en x=-1/2. % El punto de inflexin es (-1/2, f(-1/2)). >> subs(f,-1/2) >> ans = 0.1353 % el punto de inflexin es (-0.5, 0.1353).
35 P 30

25

20

15

10

0 A 5 5 0 5 C 10 15 B 20

Figura 3.9: Dibujo exemple 3.9.2 Exemple 3.9.2. Un hombre conduce un vehculo y debe atravesar un terreno cenagoso. Se encuentra en un puto P a 32 Km del punto ms prximo (lnea recta) de una carretera (punto A) y desea llegar en el menor tiempo posible a un punto B que se encuentra a 16 Km de A, en la lnea de la carretera. A cuntos Km de A debe llegar a la carretera (punto C) si conduce a una velocidad a 48 Km/h por el terreno cenagoso y a 80 Km/h por la carretera? (ver Figura 3.9) Debemos de obtener la funcin a minimizar en trminos de una nica variable, y a partir de ah utilizar matlab como herramienta para determinar su mnimo absoluto.

3.9. APLICACIONES DE LA DERIVADA: MXIMOS-MNIMOS-PUNTOS DE INFLEXIN. OPTIMIZAC


>> >> % >> % >> syms x tiempo=sqrt(x^2+32^2)/48+(16-x)/80; funcin a minimizar en el intervalo [0,16]. der_tiempo=diff(tiempo,x) hallo su derivada, la guardo en der_tiempo. der_tiempo = 1/48/(x^2+1024)^(1/2)*x-1/80 >> pretty(der_tiempo) % la muestro en formato matemtico. x 1/48 -------------- - 1/80 2 1/2 (x + 1024) >> solve(der_tiempo,x) % Igualo la derivada a cero, y resuelvo. >> ans = 24 El mnimo relativo de la funcin tiempo se alcanza en x = 24, que queda fuera del intervalo [0, 16], por tanto lo desecho. Por el teorema de Weiertrass dado que la funcin tiempo es continua en [0, 16], existe un mnimo absoluto, que se alcanzar en uno de los extremos del intervalo. >> subs(tiempo,x,0) >> ans = 0.8667 >> subs(tiempo,x,16) >> ans = 0.7454 El menor valor de la funcin tiempo se alcanza en x = 16. Para llegar en el menor tiempo posible debe de ir directamente por el terreno cenagoso hasta el punto B, sin tocar la carretera. Ejercicios propuestos. Ejercicio 3.9.3. Estudiar la derivabilidad de la funcin f (x) = |x 3|. Ejercicio 3.9.4. Dada la funcin f (x) = Estudiar su derivabilidad en x = 1. Ejercicio 3.9.5. Determinar los mximos-mnimos y puntos de inexin de la funcin f (x) = 3x2 + 5x + 2. x<1 x 5x, x 1
x+3 , x2 2

3.10. CLCULO INTEGRAL E INTEGRACIN NUMRICA

93

Ejercicio 3.9.6. Dos postes con longitudes 6 y 8 m. se colocan verticalmente sobre el suelo con sus bases separadas por una distancia de 10 m. Calcular la longitud mnima de un cable que vaya desde la punta de uno de los postes hasta un punto en el suelo entre los dos postes y luego hasta la punta del otro poste.

3.10.

Clculo integral e integracin numrica

An no hemos hablado de la integracin. MATLAB dispone de un integrador simblico, denominado int, que puede integrar fcilmente f=x^2-sin(x): sol=int(f,0,2) sol = 5/3+cos(2) Sin embargo, si reemplazamos f por la funcin h denida de la siguiente forma: h=sqrt(x^2-sin(x^4)) h = (x^2-sin(x^4))^(1/2) int ser incapaz de evaluar la integral: int(h,0,2) Warning: Explicit integral could not be found. > In C:\MATLABR11\toolbox\symbolic\@sym\int.m at line 58 ans = int((x^2-sin(x^4))^(1/2),x = 0 .. 2) Sin embargo, si escribimos double (indicando nmeros de doble precisin) antes de la expresin integral, MATLAB retornar el resultado de una integracin numrica. double(int(h,0,2)) Warning: Explicit integral could not be found. > In C:\MATLABR11\toolbox\symbolic\@sym\int.m at line 58 ans = 1.7196 Podemos comprobar la plausibilidad de esta respuesta dibujando h entre 0 y 2 y estimando el rea bajo la curva: ezplot(h,[0,2]);grid

3.10. CLCULO INTEGRAL E INTEGRACIN NUMRICA


(x2 sin(x4))1/2

94

1.5

0.5

0.2

0.4

0.6

0.8

1 x

1.2

1.4

1.6

1.8

Figura 3.10: Dibujo h(x) =

x2 sin(x4 )

El valor numrico retornado por MATLAB (Figura 3.10) es algo menos que la mitad del rea de un cuadrado de 2 unidades de lado lo cual es consistente con nuestro grco. La integracin numrica invocada por la combinacin de double e int no es nativa, esto es no es propio sino de MAPLE del cual han sido tomadas las rutinas de clculo simblico de MATLAB. MATLAB tambin dispone de un integrador numrico denominado quadl. Las rutinas double(int(...)) y quadl(...) proporcionan respuestas ligeramente distintas. quadl(inline(vectorize(h)),0,2) ans = 1.7196 Para derivar e integrar una expresion simbolica f, disponemos de las instrucciones diff e int, que actuan como sigue: int(f) Calcula una primitiva de f respecto de la variable simbolica preferente. int(f,s) Calcula una primitiva de f respecto de la variable s. int(f,a,b) Calcula la integral denida de f respecto de la variable simbolica r preferente. int(f,s,a,b) Calcula la integral denida de f respecto de la variable s. r Nota: Por defecto, la variable preferente en una expresion simbolica es la letra x. Si esta no interviene en la expresion, se toma la letra minuscula mas proxima a ella segun el orden alfabetico y que no sea ni la i ni la j. En caso de que haya dos (una anterior y otra posterior), se considera variable preferente el caracter posterior. Exemple 3.10.1. Construyanse las expresiones simbolicas f = ax + b y g = y2 + z y calculense:

3.10. CLCULO INTEGRAL E INTEGRACIN NUMRICA


1. 2. 3. 4. f dx f da gdy
1 0

95

gdz

Solucion >> syms a b x; >> f=a*x+b;g=y^2+z;% practicamos los dos modos de definir expresiones >> I1=int(f) % integra respecto de la variable preferente x I1 = 1/2*a*x^2+b*x >> I2=int(f,a) % integra respecto de a I2 = 1/2*a^2*x+b*a >> I3=int(g) % integra respecto de la variable preferente y. % Equivale a int(g,y). I3 = 1/3*y^3+z*y >> I4=int(g,z,0,1) % integra respecto de la variable z. I4 = y^2+1/2

Вам также может понравиться