Matlab Teoria

March 30, 2018 | Author: Daniel Albarracin | Category: Complex Number, Matrix (Mathematics), Equations, Euclidean Vector, Multiplication


Comments



Description

1 Vectores y FuncionesEn esta primera Práctica, aprenderemos a utilizar las órdenes básicas de MATLAB para trabajar con escalares, vectores y matrices, evaluar funciones de una y dos variables y representarlas gráficamente. En prácticas posteriores usaremos habitualmente MATLAB para efectuar los cálculos. MATLAB (MATrix LABoratory) es un programa orientado al cálculo con matrices, al que se reducen muchos de los algoritmos que resuelven problemas de Matemática Aplicada e Ingeniería. MATLAB ofrece un entorno interactivo sencillo mediante una ventana (que llamaremos ventana de comandos) en la que podemos introducir ordenes en modo texto y en la que aparecen los resultados. Los gráficos se muestran en ventanas independientes. Cada ventana dispone de una barra de menús que controla su funcionalidad. Aprenderemos a asignar, borrar, guardar y recuperar variables, utilizar las funciones incorporadas y, más adelante, a definir funciones nuevas. En MATLAB todas las instrucciones tienen que estar escritas en minúsculas, de esa forma nos evitaremos errores de ejecución. MATLAB opera directamente con números complejos y con números reales como caso particular. Lo que distingue a MATLAB de otros sistemas de cálculo es su facilidad para trabajar con vectores y matrices. Las operaciones ordinarias, suma, producto, potencia, operan por defecto sobre matrices, sin más restricción que la compatibilidad de tamaños en cada caso. 1.1 Mandatos Básicos 1.1.1 Help, Dir, Pwd. help nos da una lista de temas sobre los que hay información de ayuda. helpwin abre una ventana de ayuda que es útil para consultar información sobre órdenes de MATLAB sin interferir con la ventana principal. help tema explica concisamente el tema elegido y añade información sobre temas relacionados. Ejemplo 1 La instrucción clc borra la ventana de comandos, esa información la obtendrás al ejecutar: help clc. Utiliza la ayuda que proporciona help siempre que no recuerdes bien el funcionamiento de alguna instrucción de MATLAB. La instrucción pwd nos informa del directorio actual de trabajo y el mandato dir lista los ficheros de dicho directorio, también tenemos what que solo muestra los ficheros de función (es decir, los que tienen extensión '.m', que más adelante comentaremos). 1.1.2 Path, Diary. Para cambiar de directorio tenemos que utilizar la instrucción path, que asigna el camino (directorios o subdirectorios) donde el programa buscará los archivos. Ejemplo 2 path nos informa del orden de los subdirectorios donde MATLAB busca los archivos. path(path,'a:') asigna el disco a: como primer subdirectorio de búsqueda, siempre y cuando nos hallamos asegurado de haber insertado un disco en la disquetera. Otra forma más visual de utilizar la instrucción, es en la barra de menús, en el menú File/Archivo la instrucción set path abre una ventana para cambiar el path, y también podemos ejecutar el mandato editpath que hace lo mismo directamente. Uno de los mandatos más útiles de MATLAB es diary, que permite guardar en un fichero todo el texto que aparece en la ventana de comandos. Escribe diary a:practi01.txt y todo lo que salga en pantalla se grabará en un fichero practi01.txt justo cuando vuelvas a introducir el mandato diary. Para añadir más texto en una misma sesión al diario creado usa diary on al principio de lo que quieras grabar y diary off al final (en este momento se graba realmente). Cuando utilices esta instrucción espera a que el LED de la disquetera se apague, para dejar tiempo al programa a que guarde los datos en el disco. Ten en cuenta que esta instrucción es del tipo interruptor y solo graba cuando se ejecuta la opción off. Una mala ejecución puede hacerte perder la información, además como puede ocurrir que el ordenador falle alguna vez es aconsejable ir grabando la información cada cierto tiempo, acordándote de volver a ejecutar el diary para que se vaya almacenando la siguiente información. La memoria de pantalla en MATLAB no es muy grande, y por tanto hay datos que van desapareciendo de la ventana, pero estos no se pierden si estas utilizando el diary. El mandato % que convierte en comentario lo que se escribe a continuación. % Esto es un comentario Con la tecla [↑] recuperas los mandatos antes escritos, evitando así tener que reescribir órdenes iguales o parecidas. También puedes 'copiar' con el ratón texto de cualquier sitio y 'pegar' en la (única) línea de mandatos activa, eligiendo estas opciones en el menú de edición. Vale usar [Ctrl]+C y [Ctrl]+V con el mismo fin. 1.2 Variables En MATLAB las variables se asignan de modo natural. Basta escribir un nombre de variable, a continuación el signo igual y luego el valor que toma esa variable. Para aceptar, como siempre, hay que pulsar [Intro]. Escribiendo sólo el nombre de una variable previamente asignada, MATLAB devuelve su valor. Los signos +, −, *, / y ^ denotan las operaciones aritméticas de suma, resta, multiplicación, división y elevación a una potencia (de modo que resultan válidas para matrices, como veremos más adelante). Si el resultado de una operación no es asignado a ninguna variable, MATLAB lo asigna a la variable del sistema ans. Al poner 'punto y coma', no se muestra el resultado por pantalla. Naturalmente, la asignación de la variable no resulta afectada. 1.2.1 Who, Whos. La orden who lista las variables definidas y con la orden whos obtenemos además el tipo de variable y su tamaño. Ejemplo 3 a = 3, b = 4, a a + b c = ans; who whos 1.2.2 Clear, Save, Load, Workspace. clear sin argumentos elimina todas las variables. La misma instrucción seguida de nombres de variables, elimina a estas. La instrucción save, guarda las variables definidas en el archivo que indiquemos para poderlas utilizar en otra sesión y lo hace con la extensión '.mat', lo mismo podemos hacer desde el Menú File con la instrucción save workspace. Para recuperar del disco un espacio de trabajo donde tengamos almacenados datos se utiliza la instrucción load junto con el nombre del fichero, también desde el Menú File con la instrucción load workspace o import data según versiones. La instrucción show workspace del Menú File, o la instrucción workspace muestran todas las variables de trabajo creadas en una ventana. 1.2.3 Variables especiales, format. MATLAB utiliza ciertos nombres de variable para fines especiales, como i o j, que designan ambas a la unidad imaginaria (i 2 = j 2 = –1) o pi, para el número π. El número e, base de los logaritmos neperianos, no está preasignado, pero se obtiene fácilmente como exp(1). La precisión relativa en operaciones de coma flotante se llama eps. El resultado de 1/0 en MATLAB es Inf y el de 0/0, NaN. 1/0 % Infinito 0/0 % Indeterminado Podemos utilizar estos nombres de variable para almacenar otros valores, prevaleciendo nuestra asignación sobre el valor por defecto de MATLAB. Por ejemplo, si no utilizamos números complejos, no hay inconveniente en representar por i y j los índices de fila y columna de una matriz. Igualmente podríamos llamar eps a una cantidad a utilizar como criterio de convergencia, pero en general conviene evitar equívocos empleando otros nombres de variable. Internamente MATLAB trabaja con mucha precisión, aunque por defecto muestra los resultados con cuatro decimales. La apariencia de los resultados se modifica por menú o con la orden format. format long aumenta el número de decimales visibles. format short vuelve al estado inicial. format rat aproxima el resultado por un cociente de enteros pequeños. Explora otras opciones con help format . pi,format long, pi format rat, pi 1.2.4 Cadenas De Caracteres. Podemos usar también cadenas de caracteres para manejar texto en funciones de MATLAB. Para introducir una cadena, basta escribir el texto entre comillas. Un texto sin comillas produce error porque MATLAB lo interpreta como un nombre de variable o función. El mandato ischar nos dice si una expresión es o no un carácter (responde 1 si es verdadero y 0 si es falso). Ejemplo 4 a='Esto es una cadena' b=Esto no c=3 ischar(a) ischar(c) 1.3 Vectores 1.3.1 Edición de Vectores Los vectores se utilizan, entre otras cosas, para representar: Puntos del plano y del espacio. Puntos de un espacio n-dimensional. Magnitudes físicas. Filas o columnas de una matriz (recuerda la discusión de sistemas de ecuaciones lineales). Para introducir un vector en MATLAB, escribimos sus componentes entre corchetes. Separando las componentes con comas o espacios obtenemos un vector fila. Separándolas por punto y coma o por [Intro], obtenemos un vector columna. Ejemplo 5 u = [1 2 3], v = [1,2,3] % Vectores fila w = [1;2;3] » z=[1 » 2 » 3] % Vectores columna Para calcular la longitud de un vector se utiliza el mandato length, ahora bien como MATLAB trabaja siempre todas las variables como matrices, tanto si son matrices como si son escalares como si son vectores, para obtener la dimensión de cualquier variable podemos utilizar la función size que devuelve un vector de dos componentes que son el número de filas y el número de columnas de la matriz. Ejemplo 6 length(u) length(w) [f,c]=size(u) dimension=size(w) 1.3.2 Vectores Progresivos. Es muy frecuente tener que editar vectores con componentes equiespaciadas, por ejemplo, para crear una tabla de valores de una función. Con a:h:b creamos un vector de componentes que van de a hasta b y distan h cada una de la siguiente. La orden linspace(a,b,n) crea n términos en progresión aritmética, desde a hasta b. Ejemplo 7 x=0:0.1:1 y=linspace(0,1,11) 1.3.3 Suma y producto por un escalar. La suma de dos vectores del mismo tamaño se efectúa componente a componente y se obtiene con MATLAB escribiendo directamente » u + v La orden sum(u) proporciona la suma de todas las componentes del vector u. Para multiplicar un vector u por un escalar a, basta escribir » a*u En ocasiones hay que multiplicar dos vectores elemento a elemento y eso MATLAB lo hace con la versión 'punto' del producto. u.*v % Producto elemento a elemento Si intentamos multiplicar por las buenas dos vectores del mismo tamaño, nos da un error, pues MATLAB aplica el producto matricial y los tamaños no son coherentes. El producto matricial requiere que el primer factor tenga tantas columnas como filas tiene el segundo. Por ejemplo, podemos multiplicar una fila por una columna del mismo número de elementos o viceversa. » u*w % Fila × Columna = Escalar » w*u % Columna × Fila = Matriz de rango 1 Finalmente, el producto de todas las componentes de un vector se obtiene con la función prod. 1.3.4 Producto escalar y vectorial de dos vectores. El producto escalar de dos vectores de la misma dimensión se efectúa con dot y el producto vectorial de dos vectores de longitud 3 con cross. Ejemplo 8 a = [1 2 3]; b = [4 5 6]; c = dot(a,b) d = cross(a,b) e = prod(a) f = prod(b) 1.3.5 ', .', flipud, fliplr La transpuesta (conjugada) de un vector (complejo) v es v', su instrucción equivalente es ctranspose, la transpuesta (no conjugada) de un vector (complejo) v es v.', su instrucción equivalente es transpose. Mediante fliplr volteamos un vector fila de izquierda a derecha y con flipud ponemos cabeza abajo un vector columna. Ejemplo 9 z=[1 i 2-i]; v=z' w=z.' 1.3.6 Diferencias, sumas y productos acumulados La instrucción diff aplicada a un vector X=[X(1), X(2), ..., X(n)], realiza la diferencia entre sus componentes de la siguiente forma [X(2)-X(1), X(3)-X(2), ..., X(n)- X(n-1)]. Las instrucciones cumsum y cumprod efectuan respectivamente las suma y los productos acumulados de un vector, son interesantes para el estudio de sumatorios y productorios finitos. Ejemplo 10 a = 1:6 b = cumsum(a) c = cumprod(a) 1.4 Matrices 1.4.1 Edición de Matrices Por defecto, MATLAB trabaja con matrices. Esto supone la ventaja substancial de no tener que declarar tipos de variable ni tamaños de fila o columnas para trabajar tanto con matrices de números reales o complejos como con vectores o escalares, que se consideran casos particulares de matrices. Las matrices se escriben por filas. Los elementos de una fila se separan por 'comas' y las distintas filas por 'puntos y comas'. A = [1,2;3,4] Lo mismo que con vectores, podemos también separar los elementos de una fila con espacios y las filas pulsando la tecla [Intro]. » B = [-1 -2 -3 -4] El elemento en la fila i y la columna j de la matriz A se denota por A(i,j). Modifica, por ejemplo, el elemento 2,1 de A: » A(2,1) = 0 A(i,:) denota la fila i de la matriz A. Análogamente, A(:,j) es la columna j de A. » A(2,:), A(:,1) En ocasiones resulta cómodo construir una matriz a partir de bloques. Con tal de que sus tamaños sean coherentes, basta escribir los bloques por filas, como si se tratase de elementos individuales. » M = [A,B;B,A] Para extraer una submatriz, indicaremos las filas y columnas de que se compone. » M41 = M(1:3,2:4) Las filas o columnas no tienen por que ser consecutivas » fil = [1,2,4], col = [1,3,4] » M32 = M(fil,col) 1.4.2 Matrices usuales Ya hemos visto cómo se escriben las matrices. MATLAB tiene varias funciones que facilitan la edición de matrices de uso frecuente: eye(n) proporciona la matriz identidad de orden n. zeros(n,m) inicializa una matriz m por n con todos los elementos nulos. ones hace lo mismo con elementos de valor 1. rand crea matrices con elementos aleatorios uniformemente distribuidos en el intervalo [0,1]. Ejemplo 11 M = eye(4) N = zeros(3) O = ones(2) P = rand(3,2) 1.4.3 Operaciones con Matrices Para sumar dos matrices del mismo tamaño, se suma cada elemento de una con el elemento correspondiente de la otra. » A + B El producto de matrices se hace multiplicando fila por columna y sumando los resultados. Comprueba que el elemento (1,1) de la matriz producto A*B es » A(1,1)*B(1,1)+A(1,2)*B(2,1) Observa que el producto de matrices NO es conmutativo » A*B - B*A MATLAB interpreta A/B como el producto de A por la inversa de B. Prueba: » A/B, A*inv(B), A*inv(A) La no conmutatividad del producto justifica que inv(A)*B se abrevie a A\B. Asimismo, la solución del sistema Ax=b, que formalmente es x=A –1 b, se obtiene en MATLAB con A\b. Bien entendido que la solución no se obtiene calculando la inversa de A, sino aplicando métodos numéricamente más eficientes (ver help slash ). Para multiplicar dos matrices elemento a elemento, en lugar de filas por columnas, usamos las variantes 'punto' de las operaciones correspondientes. Comprueba la diferencia entre » A*B, A.*B, A^-1, A.^-1 Si A es una matriz real, A' es la transpuesta de A. En el caso complejo, A' es la transpuesta conjugada. La transpuesta sin conjugar se obtiene con A.'. 1.5 Funciones MATLAB conoce las funciones matemáticas elementales: Trigonométricas: seno, coseno, tangente, cosecante, secante y cotangente. Trigonométricas inversas: arco seno, arco coseno, arco tangente, ... Exponencial y logaritmos neperiano, decimal y en base 2. Hiperbólicas: seno hiperbólico, coseno hiperbólico, tangente hiperbólica, ... Hiperbólicas inversas: argumento seno hiperbólico, coseno, tangente, ... Raíz cuadrada, parte entera, valor absoluto, ... 1.5.1 sqrt, abs. La función sqrt realiza la raíz cuadrada de un número, si este es negativo da como resultado un complejo. La orden abs calcula el valor absoluto de un número, si este es complejo devuelve su módulo. Ejemplo 12 sqrt(4),sqrt(-4) abs(4),abs(-4),abs(3+4*i) 1.5.2 exp,log,log10 Los mandatos exp, log y log10 realizan respectivamente la exponencial, el logaritmo neperiano y el logaritmo decimal de un número. Ejemplo 13 exp(1) log(ans) log10(10) 1.5.3 sin, cos, tan, atan, atan2 Las funciones trigonométricas tienen el argumento en radianes, aparte de estar el nombre en inglés. Ejemplo 14 sin(pi/2) sin(90) Cuidado, en este ejemplo MATLAB dará un resultado para ambas ordenes, pero solo la primera es correcta, pues su argumento de entrada es correcto, ya que el ángulo esta en radianes. La función atan devuelve la arcotangente de un número, sin embargo la función atan2 que en este caso tiene dos argumentos de entrada devuelve la arcotangente teniendo en cuenta el cuadrante. Ejemplo 15 Si intentamos determinar el ángulo de un punto (x,y) en el plano este viene dado por arcotangente(y/x), teniendo en cuenta el cuadrante para dar la respuesta correcta, Los puntos (1,1) y (-1,-1) se obtendrian con el mismo valor de la arcotangente, que si expresamos el resultado en grados seria atan(1)*180/pi ans = 45 luego considerando el cuadrante obtendriamos que los ángulos son respectivamente 45 y 225 (o –135) grados. Ahora bien si utilizamos la instrucción atan2(y,x) el resultado se obtiene directamente atan2(1,1)*180/pi,atan2(-1,-1)*180/pi ans = 45 ans = -135 1.5.4 sinh, cosh, tanh Estas órdenes representan a las funciones hiperbólicas, recuerda que para números reales se definen como: ( ) 2 ) exp( ) ( ) cosh( 2 ) exp( ) exp( x x epx x x x x sinh − + = − − = Ejemplo 16 sinh(1),(exp(1)-exp(-1))/2 cosh(1),(exp(1)+exp(-1))/2 tanh(1),sinh(1)/cosh(1) Una característica destacable de MATLAB es que evalúa una función sobre todas las componentes de un vector simultáneamente, lo cual es muy práctico. Ejemplo 17 x = -1:0.01:1; y = tanh(x); plot(x,y) Aparte de estas funciones MATLAB tiene definidas otras tantas menos conocidas pero no menos útiles, tanto funciones elementales que puedes consultar su sintaxis con help elfun . Y otras funciones especiales disponibles con help specfun . 1.6 Gráficas 1.6.1 Tipos de linea, colores y marcadores. En la siguiente tabla se muestran los tipos de color, marcadores y tipos de línea que admite la instrucción gráfica plot. Así como el código que los genera en el gráfico. color código marcador código tipo de línea código Amarillo y punto . sólida - Magenta m circulo o punteada : Cyan c x-marca x punto y raya -. Rojo r más + rayada -- Verde g estrella * Azul b cuadrado s Negro k diamante d Blanco w triángulo (abajo) v triángulo (arriba) ^ triángulo (izquierda) < triángulo (derecha) > pentagrama p hexagrama h Ejemplo 18 x = -1:0.01:1; y = sin(x); plot(x,y,'r') 1.7 Ficheros de función 1.7.1 Función y=f(x) La programación en MATLAB de efectúa mediante ficheros.m. Son simplemente ficheros de texto que contienen órdenes de MATLAB. Su utilización requiere Editar el fichero con el editor de MATLAB o con un editor ASCII. Guardarlo con extensión .m. Indicar a MATLAB dónde está el archivo con: path(path,'dirección'). Ejecutarlo escribiendo en la línea de órdenes el nombre de fichero y los parámetros de entrada necesarios. Como ejemplo, creamos un fichero para evaluar la llamada función de Runge, que utilizaremos más adelante en la teoría de interpolaciones: ( ) 2 25 1 1 x x f ⋅ + = Debemos escribir en el editor: function y=runge(x) % Función de Runge y=1./(1+25.*x.^2); Después de grabarlo con el nombre runge.m, e indicar el path a Matlab, podremos ejecutar llamadas a la función. Nótese que se han utilizado las operaciones con el punto delante, esto es por si la entrada es un vector o matriz efectuará las operaciones indicadas para cada uno de los elementos. A su vez hay que fijarse que el nombre asignado a la función es el mismo que el del archivo que se graba en el disco, también es aconsejable que este no contenga signos ni acentos y si es posible no supere 8 caracteres. Ejemplo 19 runge(0) runge([-1 0 1]) El fichero runge.m es un archivo de función, al incluir la palabra clave function. A continuación es obligatorio poner el nombre de función. Notar que las primeras líneas de comentario que escribimos inmediatamente después del nombre de la función son las que se obtienen con el help de matlab help runge El nombre de función suele ir precedido de los argumentos de salida, entre corchetes, y seguido de los nombres de los argumentos de entrada, entre paréntesis. Entre estos y el nombre de función aparece el signo 'igual'. Consideremos la función que da las coordenadas cartesianas de un punto, a partir de su radio vector y su ángulo respecto al eje OX: ( ) ( ) ¹ ´ ¦ ⋅ = ⋅ = θ θ sin r y r x cos Que llamaremos por ejemplo cartpol, en referencia al paso de polares a cartesianas, la definiríamos de la siguiente forma: function [x,y]=cartpol(r,z) % Entradas 'r':radio vector % y 'z' ángulo respecto al eje OX % Salidas 'x,y': coordenadas cartesinas x=r.*cos(z); y=r.*sin(z); Ejemplo 20 ro=ones(1,3); zeta=[pi/2 pi 3*pi/2]; [x,y]=cartpol(ro,zeta) help cartpol EJERCICIOS 1. Dados dos números a < b, obtén un vector x cuyas componentes sean los extremos de los intervalos obtenidos al dividir [a,b] en n partes iguales. El vector x tiene n + 1 componentes a las que llamamos a = x 0 < x 1 < x 2 < . . . < x n = b. Elegir adecuadamente a, b y n para obtener representaciones gráficas de los valores en x de las siguientes funciones: a) f(x) = sen x b) f(x) = cos x c) f(x) = tg x d) f(x) = sinh x e) f(x) = cosh x f) f(x) = tanh x g) f(x) = log x h) f(x) = exp x i) f(x) = 1/x j) f(x) = 1/x 2 k) f(x) = 1/(1+x 2 ) l) f(x) = x/(1+x 2 ) 2. Estudia de forma aproximada los siguientes límites de funciones sin resolverlos. Toma sucesiones de números que convergen al valor donde se evalúa el límite, evalúa estas sucesiones en la función para obtener su carácter convergente o divergente, y en el caso de convergencia obtener una aproximación al límite. ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) 2 2 ) 2 ) 2 1 ) 1 ) 2 log 3 log ) cos ) ) 2 1 ) 2 2 5 2 2 0 0 3 0 3 0 0 − − − − − − − − − → ∞ → → → → → → → x x lim h x lim g x x sin lim f x sin x sin e lim e x sin x sin lim d x x sin x x lim c x x atan x lim b x tan e lim a x x x x x x x x x x x x π π 3. Define las siguientes matrices en MatLab: | | | | | | . | \ | − = | | | . | \ | − = | | | . | \ | − = 1 1 6 1 1 5 2 3 1 8 1 4 1 2 1 , 5 5 1 2 3 4 4 3 2 , 4 1 5 1 2 3 1 1 2 C B A y efectúa las siguientes operaciones: a) Comprueba la no conmutatividad del producto de matrices calculando: A*B y B*A. b) Calcula C^3, utilizando las potencias de matrices y las potencias de matrices elemento a elemento. c) Define la matriz identidad de orden 3 con la orden correspondiente y con ella calcula la inversa de A utilizando la división izquierda de matrices. d) Calcula (A*B) -1 de dos formas diferentes utilizando la teoría de matrices. 4. Utilizando las otras opciones de la instrucción diff de MatLab que puedes consultar con el Help, calcula las siguientes derivadas y derivadas parciales: ( ) ( ) ( ) ( ) t tan dt d c t dt d b t sin t dt d a 1 ) 1 1 ) * ) 2 2 2 3 3 2 3 | . | \ | + ( ) ( ) ( ) ( ) ( ) ( ) x y y sin x y x e x y y sin x x d cos * * ) cos * * ) 2 − ∂ ∂ ∂ − ∂ ∂ 5. Los primeros términos no nulos de la serie de MacLaurin para la función arcotangente son 5 3 5 3 x x x + − . Calcula el error absoluto y relativo en las siguientes aproximaciones de π usando el polinomio en vez de la función arcotangente. a. | | . | \ | | . | \ | + | . | \ | ⋅ 3 1 2 1 4 atan atan b. | . | \ | ⋅ − | . | \ | ⋅ 239 1 4 5 1 16 atan atan Nota: Si p * es una aproximación de p se definen error absoluto como * p p − y error relativo como p p p * − si . 0 ≠ p 6. Calcula la norma euclídea del vector ( . Hazlo de tres formas diferentes usando los siguientes seudocódigos que definen dos algoritmos para determinar la norma euclídea de un vector : ) 6 , 10 , 3 , 2 , 1 , 1 − − n x x x x , , , 2 1 K = ( ) a) Nombre: norma1 Entrada : el vector x Salida : norma de x Paso1 : Determinar la longitud de x, que designaremos por 'n' Paso 2 : Hacer suma=0 Paso 3: Para i hacer n , , 2 , 1 K = suma=suma + x 2 i Paso 4: Hacer norma=suma^(1/2) b) Nombre: norma2 Paso 1: Elevar al cuadrado elemento a elemento el vector x y nombrarlo x2 utilizando la instrucción de MatLab correspondiente. Paso 2: Sumar los elementos de x2 utilizando la instrucción de MatLab correspondiente. Paso 3: Hacer norma igual a la raíz cuadrada del último valor obtenido en el Paso 2 utilizando la instrucción de MatLab correspondiente. c) Utilizar también la instrucción de MatLab que calcula directamente la norma euclídea. 7. El número π puede aproximarse teoricamente como la suma se la serie ( ) ∑ ∞ = + − ⋅ 0 1 2 1 4 n n n aunque veremos que en la prática este método no es el mejor, hemos visto ya en el ejercicio 5 una forma más efectiva de cáculo de π. a) Calcula las aproximaciones de π para n=100,1000,10000 utilizando la definición de vectores y la instrucción de MatLab sum, utilizando el valor de π de MatLab calcular la exactitud de las aproximaciones. b) Crea un archivo de función que tenga argumento de entrada 'n' y que devuelva la aproximación de π para ese número de sumandos. c) Fijándose en los datos obtenidos en el apartado a) da una estimación del 'n' necesario para aproximar π con una precisión del orden de 10 . 8 − SOLUCIONES 4.a) diff('t^3*sin(t)^2') ans = 3*t^2*sin(t)^2+2*t^3*sin(t)*cos(t) b) diff('1/(1+t^2)',3) ans = -48/(1+t^2)^4*t^3+24/(1+t^2)^3*t c) diff('tan(1/t)',2) ans = 2*tan(1/t)*(1+tan(1/t)^2)/t^4+2*(1+tan(1/t)^2)/t^3 d) diff('x*sin(y)-y*cos(x)','x') ans = sin(y)+y*sin(x) e) diff(diff('x*sin(y)-y*cos(x)','x'),'y') ans = cos(y)+sin(x) 6.a) a=[1,-1,2,3,-10,6]; function norma=norma1(x) n=length(x); suma=0; for i=1:n suma=suma+x(i)^2; end norma=suma^(1/2); norma1(a) ans = 12.2882 6.b) function norma=norma2(x) x2=x.^2; suma=sum(x2); norma=sqrt(suma); norma2(a) ans = 12.2882 6.c) norm(a) ans = 12.2882 7. a) n=0:100; % creamos el vector que va de 0 a 100 de 1 en 1. x=(-1).^n./(2*n+1); % a partir del vector anterior y evaluando elemento a elemento obtenemos el vector con los primeros sumandos de la serie hasta el número 100. y=4*sum(x) % evaluamos la suma y multiplicamos por 4 con lo que tendremos la aproximación. y = 3.15149340107099 abs(y-pi) % calculamos el error absoluto. ans = 0.00990074748120 Si ponemos todas las instrucciones en una fila será más fácil ir calculando las aproximaciones, sin necesidad de escribir más, sólo hará falta ir modificando la fila: n=0:1000;x=(-1).^n./(2*n+1);y=4*sum(x),abs(y-pi) y = 3.14259165433954 ans = 9.990007497511222e-004 n=0:10000;x=(-1).^n./(2*n+1);y=4*sum(x),abs(y-pi) y = 3.14169264359053 ans = 9.999000074145670e-005 7.b) function [s,e]=aproxpi(n) % Efectúa una aproximación de pi utilizando la serie % (-1)^(2n+1)/(2*n+1), hasta el sumando n % Da también como salida el error absoluto cometido i=0:n; x=(-1).^i./(2*i+1); s=4*sum(x); e=abs(s-pi); Comprobemos que funciona: [s,e]=aproxpi(1000) s = 3.14259165433954 e = 9.990007497511222e-004 7.c) Si creamos una tabla con los valores de n y los errores (redondeados) obtenidos tenemos: n error absoluto 10 2 10 -2 10 3 10 -3 10 4 10 -4 Con lo que aproximadamente necesitaremos un n=10 8 para obtener un error de 10 -8 , si utilizamos esta serie para calcular π. Se puede comprobar que en este caso nuestra función presenta problemas de memoria y de tiempo de cálculo a partir de cierto n grande, con lo que este método de aproximación de π no seria aplicable para aproximaciones con errores muy pequeños. En temas posteriores veremos un caso general para acelerar la convergencia de sucesiones y minimizar los cálculos necesarios. 2. Complejos. Polinomios.Curvas en polares. 2.1 Números complejos Los complejos tienen algo de real y algo de imaginario, pero hoy en día es imposible vivir sin ellos. Lo mejor es conocer sus mecanismos y acostumbrarse a sus repentinas apariciones. Vas tranquilamente por la calle resolviendo enigmas como ese de "la mayor toca el piano" y te tropiezas con un par de complejos conjugados. Puedes elegir entre echar a correr o seguir leyendo. Como has optado por lo segundo, te vas a enterar de todo lo que siempre quisiste saber sobre los números complejos y nunca te atreviste a preguntar. – La suma de las edades de dos hermanos es 13 y el producto 36. – Fácil, tienen 4 y 9 años. – Pues mi vecino tiene tres hijas cuyas edades también multiplican 36. El número de este portal es la suma de sus edades. – Me falta un dato. – ¡Ah, sí! La mayor toca el piano. – Está claro. ¿Y si la suma es 6 y el producto 13? – Imposible, te lo has inventado. – ¿Cómo lo sabes? Una ecuación de segundo grado con discriminante negativo no tiene solución real. Si insistimos en resolver todas estas ecuaciones, nos vemos en la necesidad de introducir unos entes que amplíen los números reales y contengan las soluciones de tales ecuaciones. Comenzando por la más elemental 0 1 2 = + x podemos llamar i a un "número imaginario" cuyo cuadrado sea –1 y añadirlo al sistema de números reales. Operando formalmente con , 1 − = i las raíces de cualquier ecuación de segundo grado con discriminante negativo se pueden expresar de la forma i b a z + = con a y b números reales. Veremos que estas expresiones constituyen un cuerpo llamado cuerpo C de los números complejos. La expresión z se denomina forma binómica del complejo z. Un número complejo de la forma a se identifica naturalmente con el número real a. Los complejos de la forma 0 se denominan imaginarios puros. En el cuerpo de los números complejos, no sólo las ecuaciones de segundo grado tienen solución, sino que toda ecuación polinómica de grado n tiene n soluciones en C. Este resultado se conoce como el Teorema Fundamental del Álgebra. i b a + = i 0 + i b + 2.1.1 Representación cartesiana Un complejo z consta de una parte real, a, y de una parte imaginaria, b. Por ello, resulta natural representarlo en coordenadas cartesianas mediante un vector o un punto de abscisa a y ordenada b. De aquí el llamar plano complejo al cuerpo C. i b a + = MATLAB trabaja por defecto con números complejos, que se introducen tal y como se escriben en matemáticas, utilizando i o j para la unidad imaginaria. Escribe, por ejemplo z = 4 + 3i. 0 1 2 3 4 5 0 1 2 3 4 4+3i Observa que no es necesario poner el signo de multiplicación, *, entre el 3 y la i. Las funciones real(z) e imag(z) proporcionan, respectivamente, la parte real y la parte imaginaria del complejo z. El complejo z se representa gráficamente como el punto del plano de coordenadas cartesianas (a, b) o como un vector con que va del origen al mismo punto. i b a + = En MATLAB, el afijo representa con plot(z,'*'), mientras que para obtener el vector puede usarse la orden compass(z). Esta última presenta el vector sobre uno ejes tipo radar (coordenadas polares). Podemos forzar el uso de los ejes cartesianos creándolos antes de representar el vector: close, axis, hold on, compass(z). 2.1.2 Operaciones con complejos 2.1.2.1 Suma, resta, opuesto Para sumar dos complejos basta sumar sus partes reales y sus partes imaginarias por separado. ( ) ( ) ( ) ( ) i 2 6 i 3 1 2 4 i 3 2 i 4 + = + − + + = + + − La suma tiene las propiedades habituales que confieren a C la estructura de grupo conmutativo. El neutro es el complejo 0 + 0i. El opuesto de es i b a z + = . i b a z − − = − 0 2 4 6 -2 0 2 4 -4 -2 0 2 4 -4 -2 0 2 4 Complejo Conjugado Opuesto Figura 1 a) Suma de complejos; b) Opuesto y conjugado de un complejo El concepto de conjugado juega un papel muy importante. Se define el conjugado de un complejo como el complejo i b a z + = . i b a − = z Gráficamente, tomar conjugados equivale a hacer una simetría respecto al eje real. La sintaxis en MATLAB es conj(z). 2.1.2.2 Producto, inverso, cociente La multiplicación de complejos se define de forma natural operando formalmente con las expresiones binómicas de los factores y aplicando la relación fundamental . 1 i 2 − = i ) ( ) ( i i i i) i)( ( 2 bc ad bd ac bd bc ad ac d c b a + + − = + + + = + + Por ejemplo, ( ) ( ) ( ) ( ) i 6 11 i 2 2 4 3 2 4 i 3 2 i 4 + = − ⋅ + + ⋅ = + ⋅ − La operación así definida hereda las propiedades conmutativa, asociativa y distributiva del producto de números reales. El número 1 se comporta como elemento unidad del producto. Se comprueba que todo complejo no nulo tiene inverso operando formalmente y usando el mismo truco que para eliminar una raíz cuadrada del denominador de una fracción. 2 2 2 2 2 2 i i i) i)( ( i i 1 b a b b a a b a b a b a b a b a b a + − + = + − = − + − = + Todas estas propiedades se resumen diciendo que C tiene estructura de cuerpo. MATLAB trabaja por defecto con números complejos, por lo que las operaciones anteriores se efectúan con el formalismo usual: si u y v son dos complejos, u u y u proporcionan los resultados de las operaciones indicadas. , v + v ∗ , / v Las expresiones binómicas del producto y del cociente no son muy sugerentes. Las nociones de módulo y argumento que introduciremos a continuación, aparte de otras propiedades más importantes, permiten dar una interpretación geométrica intuitiva de dichas operaciones. 2.1.3 Módulo y Argumento Si es un número complejo, a es un número real, cuya raíz cuadrada se llama módulo del complejo z y se denota por i b a z + = 2 2 b + z . θ e j e i m a g i n a r i o z O a eje real b |z| Geométricamente, el módulo representa la longitud del vector asociado a z. En MATLAB, el módulo se obtiene con abs. El módulo de un complejo juega un papel análogo al del valor absoluto para números reales. Listemos sus propiedades fundamentales. 1. 0 ; 0 = ≥ z z sólo si . 0 = z 2. w z zw = 3. w z w z + ≤ + Estas propiedades definen una norma en C. La segunda propiedad indica que el módulo del producto de dos complejos es igual al producto de sus módulos. Usaremos este hecho en la caracterización geométrica del producto. La tercera propiedad es la llamada desigualdad triangular. por la interpretación geométrica de la suma de complejos. Llamamos argumento de un número complejo no nulo z , al ángulo que forma el vector asociado con el semieje real positivo, medido en sentido contrario a las agujas del reloj. Al dividir z por su módulo, queda un complejo de módulo 1 cuyo afijo está sobre la circunferencia de centro el origen y radio 1. Si llamamos x e y a sus coordenadas, existe un único θ en [0, 2π[ tal que i b a + = θ θ sin cos = = y x Decimos que θ es un argumento del complejo z. Cualquier otro valor que difiera de θ en un múltiplo entero de 2π es también argumento de z. En MATLAB, el argumento se obtiene con angle. Un complejo z puede representarse en forma modulo-argumental o trigonométrica como ( ) θ θ sin cos i z z + = siendo z el módulo z y θ es el argumento. Aplicando relaciones de trigonometría elemental, se comprueba que el argumento del producto de dos complejos es la suma de los argumentos de los factores. Como el argumento de 1 es 0, complejos inversos tienen argumentos opuestos. Asimismo, el argumento del cociente es la diferencia de los argumentos. Siempre que hablamos de argumentos, hay que considerarlos definidos salvo adición de 2kπ, con k entero. En consecuencia, podemos decir que para multiplicar complejos, se multiplican los módulos y se suman los argumentos. Para dividir complejos, se dividen los módulos y se restan los argumentos. El inverso de z tiene por módulo el inverso del módulo de z y por argumento el opuesto del argumento de z. Otra forma de caracterizar el inverso de z es como el conjugado dividido por el cuadrado del módulo. En general se tiene 2 z z z = 2.1.4 Potencias y raíces De la interpretación geométrica del producto se deduce que la potencia n-ésima de un complejo z tendrá por módulo la potencia n-ésima del módulo de z y por argumento n veces el argumento de z. O sea, . arg ) arg( z n z z z n n n = = ) n Alternativamente, puede desarrollarse por la fórmula de Newton de la potencia n-ésima de un binomio, obteniéndose, tras simplificar, la expresión binómica del resultado. ( n b a z i + = 5.3333 10.6667 16 30 210 60 240 90 270 120 300 150 330 180 0 Ejemplo 1 El complejo tiene módulo i 1+ = z 2 y argumento . 4 π Las sucesivas potencias de z, para tienen de módulo , k z 7 , k , 2 , 1 , 0 K = k 2 y de argumento . 4 π k Podemos calcularlas y representarlas con MATLAB mediante: z = 1 + i; compass([z z^2 z^3 z^4 z^5 z^6 z^7 z^8],'r') El cálculo de la raíz enésima de un complejo requiere algo más de cuidado. En el campo real, sólo los números positivos tienen raíz cuadrada y ésta puede tener dos signos. Por ejemplo, 3 y –3 son raíces cuadradas de 9, mientras que –9 no tiene raíz cuadrada. En cambio, todo real tiene exactamente una raíz cúbica real, por ejemplo, la raíz cúbica de –8 es –2 y la raíz cúbica de 8 es 2. Estos comportamientos se generalizan a raíces de índice par o impar, respectivamente. Curiosamente, en el campo complejo, la situación es más sencilla. Todo complejo no nulo tiene exactamente n raíces de orden n. Esto constituye un caso particular del Teorema Fundamental del Álgebra que establece que todo polinomio de grado n tiene n raíces (contando la multiplicidad). Las raíces n-simas de un complejo se obtienen fácilmente usando la expresión modulo- argumental. Dado un complejo no nulo ( θ θ sin cos i z + = ) z , tratamos de hallar los complejos ( ) ϕ ϕ sin cos i w w + = tales que Por las propiedades de las potencias tenemos que . z w n = z w w n n = = de donde |w| es la raíz n-ésima positiva (real) de |z|. Por otra parte, . arg arg ) arg( z w n w n = = Como el argumento está definido salvo adición de múltiplos enteros de 2π, tenemos , 2 π θ ϕ k n + = de donde , 2 n k n π θ ϕ + = expresión que toma distintos valores para k o para cualesquiera otros n valores de k consecutivos. En definitiva, tenemos n raíces n-simas distintas de un complejo z, que escribimos como: 1 , , 2 , 1 , 0 − = n K ( ), sin cos 1 k k n k i z w ϕ ϕ + = donde , 2 n k n k π θ = ϕ + para k . 1 , , 2 , 1 , 0 − = n K Ejemplo 2 El complejo z tiene módulo 1 y argumento i − = . 2 π 3 Las raíces cúbicas de z tienen módulo 1 y argumento , π 3 2 2 k + π para y sus expresiones son: 2 , 1 , 0 = k 0.5 1 30 210 60 240 90 270 120 300 150 330 180 0 i 2 1 2 3 i 2 1 2 3 − − 6 11 sin 6 11 cos 6 7 sin 6 7 cos i 2 sin 2 cos = + − = + = + π π π π π π i i i Representémoslas con MATLAB: z = -i; compass(z,'-.') hold for k = 0:2 fi = pi/2 + k*2*pi/3; compass(cos(fi)+i*sin(fi),'r') end 2.1.5 Fórmula de Euler Las funciones reales seno, coseno y exponencial pueden aproximarse indefinidamente por su desarrollo de Taylor en cualquier intervalo acotado. Si aplicamos el desarrollo de la exponencial al número imaginario ib, podemos escribir | | . | \ | − + − − + − = + + + − − + = + + + + + + = L L L L ! 5 ! 3 i ! 4 ! 2 1 ! 5 i ! 4 ! 3 i ! 2 i 1 ! 5 ) (i ! 4 ) (i ! 3 ) (i ! 2 ) (i i 1 e 5 3 4 2 5 4 3 2 5 4 3 2 i θ θ θ θ θ θ θ θ θ θ θ θ θ θ θ θ y recordando los desarrollos del seno y del coseno ponemos θ θ θ sin cos e i i + = que constituye la fórmula de Euler. Podemos rescribir la forma trigonométrica de un complejo como ( ) θ θ θ i e sin cos z i z z = + = La interpretación geométrica de producto y cociente se deriva ahora formalmente de las propiedades de la exponencial. Definimos formalmente también la exponencial compleja mediante ) sin (cos e e e i y i y x y x z + = = + Figura 2: Original e imagen de un rectángulo por la exponencial compleja La exponencial de z es un complejo w cuyo módulo es la exponencial de la parte real de z y cuyo argumento es la parte imaginaria de z, o sea, y w w x = = ) arg( , e Tomando logaritmos w x log = luego w i w y x z arg log i + = + = Como w es la exponencial de z, parece lógico decir que z es el logaritmo de w. Más precisamente deberíamos decir que z es un logaritmo de w, pues cualquier complejo que difiera de z en un múltiplo entero de 2πi, también lo será. En resumen, ) 2 (arg log log π k w i w w + + = para cualquier k entero. 2.2 Polinomios Los polinomios constituyen una clase de funciones de gran importancia, debido a que son fáciles de evaluar y, sobre todo, a que toda función continua en un intervalo cerrado puede aproximarse mediante polinomios. Los polinomios surgen a menudo en problemas de resolución de ecuaciones. Curiosamente, a pesar de la sencillez y las buenas propiedades de los polinomios, solamente se pueden resolver mediante fórmulas exactas las ecuaciones polinómicas de grado no superior a 4. De hecho, las fórmulas para ecuaciones de grado superior a 2 son raramente utilizadas; en su lugar se utilizan métodos numéricos. En esta sección recordamos las operaciones y propiedades básicas de los polinomios y las funciones de MATLAB que actúan sobre ellos. Ejemplo 3 Cada mes ahorras parte de tu paga para comprar un regalo a un/a amigo/a. A primeros de mes, haces un ingreso en una cuenta “remunerada”, hasta que logras reunir la cantidad deseada. Esta cantidad se expresa como un polinomio que depende de las imposiciones y del tipo de interés mensual. El tipo de interés mensual en tanto por uno, r, es lo que produce 1 euro ingresado en la cuenta al cabo de un mes. En general, un capital C se convierte en un mes en C(1+r). El interés compuesto consiste en acumular los intereses al capital al final de cada periodo, de modo que produzcan a su vez intereses durante el periodo siguiente. En este caso, la cantidad acumulada al final del primer mes, C(1+r), produce intereses durante el segundo mes, convirtiéndose al final de este periodo en C(1+r) 2 y así sucesivamente. Si ahorras durante un año, imponiendo a 1 euros el primero de enero, a fin de año tendrás euros, siendo Un ingreso de a 12 1 12 1 1 x a ) r ( a = + . 1 r x + = 2 euros el 1 de febrero se convierte en a 2 x 11 euros a final de año y así sucesivamente. El dinero acumulado a fin de año con este plan de ahorro viene dado por el polinomio 13 12 11 2 12 1 a x a x a x a C + + + + = L donde a i es la cantidad impuesta al principio del i-ésimo mes. La cantidad a 13 corresponde a una cantidad final que se añade el último día del año y que no produce intereses. 2.2.1 Representación mediante vectores El polinomio de grado n 1 1 2 1 + − + + + + = n n n n a x a x a x a ) x ( p L se representa en MATLAB mediante el vector de longitud n+1 p = [a 1 a 2 . . . a n a n+1 ] cuyos elementos son los coeficientes del polinomio ordenados de mayor a menor grado. Incluimos los coeficientes nulos para conservar el grado del polinomio. Por ejemplo, el polinomio x 2 se representa mediante el vector [1 0 0], mientras que [1] representa al polinomio constante 1. 1 1 2 1 ) ( + − + + + + = n n n n a x a x a x a x p L Coeficiente director Indeterminada Término independiente Coeficientes Figura 3 Nomenclatura de polinomios 2.2.2 Operaciones con polinomios Para operar con polinomios en MATLAB, hay que traducir a operaciones con vectores las correspondientes operaciones con polinomios. Como la suma, resta y producto por un escalar se efectúan término a término, basta operar con los coeficientes de cada término. Para sumar o restar en MATLAB polinomios de distinto grado, hay que representarlos como vectores de la misma longitud. Ejemplo 4 Para sumar en MATLAB los polinomios x 2 y 3 hacemos p = [1 0 0] q = [0 0 3] p+q Multiplicar polinomios es tarea fácil con MATLAB, usando la función conv. Ejemplo 5 Con MATLAB se puede obtener mediante ( ) 6 1 − x p = [1 -1]; q = conv(p,p) % (x−1)^2 r = conv(q,q) % (x−1)^4 conv(q,r) Recordemos el resultado fundamental de la división de polinomios: Dados dos polinomios con coeficientes reales (complejos) p(x) y q(x), con q(x) no nulo, pueden determinarse de forma única dos polinomios c(x) y r(x) tales que (i) p(x) = q(x)c(x) + r(x) (ii) r(x) es idénticamente nulo o de menor grado que q(x) Los polinomios c(x) y r(x) se llaman el cociente y el resto de la división. Estos polinomios pueden obtenerse a mano por el método de Euclides. Afortunadamente, si no recordamos este procedimiento, podemos recurrir la función deconv de MATLAB, cuya sintaxis es [c,r] = deconv(p,q) siendo p, q, c y r vectores que representan los polinomios dividendo, divisor, cociente y resto. Ejemplo 6 Dividimos por , con deconv 7 3 2 2 ) ( 2 3 4 5 + + − + − = x x x x x x p 2 ) ( 2 + = x x q p = [1 -2 2 -1 3 7]; q = [1 0 2]; [c,r] = deconv(p,q) El cociente es c y el resto r Se cumplen las propiedades de la división porque el resto es de menor grado que el divisor y se verifica la relación (i), como se comprueba mediante 3 2 ) ( 2 3 + − = x x x . 1 3 ) ( + = x x p - conv(q,c) - r Los ceros iniciales que MATLAB añade a r sirven para que los sumandos de la expresión anterior tengan la misma longitud. 2.2.3 Valor de un polinomio. Teorema del resto Para que la representación de un polinomio p(x) mediante un vector p resulte práctica, se necesita una forma fácil de obtener el valor del polinomio al sustituir la indeterminada x por un número dado a. Esto se hace en MATLAB mediante polyval(p,a). Ejemplo 7 Si ingresas 10€ el 1 de cada mes, desde el 1 de enero, al 0.3% mensual, ¿cuánto habrás acumulado hasta el 1 de enero del año siguiente? (Incluyendo 10€ de ese último día). Siguiendo la idea del Ejemplo 3, construimos un polinomio cuyos coeficientes son las imposiciones y lo evaluamos en 1 siendo r el tipo de interés mensual. , r + p = 10*ones(1,13); r = 0.3/100; Capital = polyval(p,1+r) Ejemplo 8 Para representar gráficamente los polinomios 1, x, x 2 y x 3 en el intervalo , es más fácil evaluarlos directamente que usar polyval. | 1 1, − | x = linspace(–1,1)’ plot(x, [x.^0 x x.^2 x.^3]) title(‘Potencias de x’), grid Para evaluar a mano un polinomio, en lugar de sustituir directamente la indeterminada en la expresión del polinomio, es más cómodo aplicar la regla de Ruffini, que equivale a dividir el polinomio por siendo a el punto en que queremos evaluar el polinomio. La relación entre evaluación y división se establece en el siguiente teorema. , a x − -1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1 Potencias de x Teorema del Resto El valor del polinomio p(x) en a es el resto de la división de p(x) por x – a. Ejemplo 9 Aplicamos el teorema del resto para el polinomio p(x) = x 2 – 1 con a = 2, comprobando que el resto de la división por x − 2 coincide con el valor del polinomio en 2. p = [1 0 –1]; q = [1 –2] [c, r] = deconv(p,q) % El resto es la última componente de r polyval(p, 2) % Valor del polinomio en 2 2.2.4 Raíces de un polinomio. Divisibilidad. Decimos que un número r es raíz del polinomio p(x), si el valor del polinomio en dicho número es 0, o sea, p(r) = 0. Por ejemplo, 1 y –1 son raíces del polinomio x 2 – 1. La existencia y propiedades de las raíces están estrechamente relacionadas con las propiedades de divisibilidad de polinomios. Como consecuencia del antes mencionado teorema del resto, se obtiene un resultado que establece esta relación: Teorema del Factor r es raíz de p(x) si y sólo si p(x) es divisible por x – r. Si p(x) admite varios factores de la forma x – r, entonces r es una raíz múltiple del polinomio. Si sólo admite un factor, es raíz simple. La multiplicidad m de una raíz r del polinomio p(x) es el máximo entero m tal que ( divide a p(x). Por ejemplo, 0 es una raíz de multiplicidad n del polinomio x ) m r x − n . Los métodos de cálculo de raíces que se aprenden en la escuela consisten en buscar factores de la forma x – r del polinomio en cuestión. Naturalmente, estos métodos sólo son prácticos para hallar raíces enteras y poco más en casos preparados. Teóricamente se demuestra (Teorema fundamental del álgebra) que un polinomio de grado n tiene n raíces en el cuerpo de los números complejos, contando sus multiplicidades. La necesidad de trabajar con números complejos se manifiesta con la simple ecuación que no tiene raíces reales. , 0 1 2 = + x El cálculo de todas las raíces de un polinomio es un asunto complicado que MATLAB resuelve de un plumazo con roots. Ejemplo 10 roots([1 0 1]) proporciona las raíces de x 2 +1. Al aplicar roots a un polinomio se obtiene un vector con sus raíces. Recíprocamente, se puede obtener un polinomio a partir de sus raíces mediante la función poly. Ejemplo 11 poly([-i, i]) da como resultado [1 0 1]. 2.2.5 Descomposición en factores irreducibles. Combinando los teoremas del resto y fundamental del álgebra se prueba que todo polinomio complejo de grado n > 0 se puede escribir como k m k m m r x r x r x a x p ) ( ) ( ) ( ) ( 2 1 2 1 1 − − − = L L donde son todas las raíces distintas del polinomio p Esta descomposición es única, salvo el orden de los factores. El exponente m se denomina orden de multiplicidad de la raíz k r r r , , , 2 1 K ). (x j . j r En el caso real, la descomposición contiene también factores de grado 2 correspondientes a polinomios de segundo grado que no tienen raíces reales. Las raíces complejas de un polinomio real aparecen por pares conjugados, es decir, un complejo r es raíz de un polinomio de coeficientes reales si y sólo si su conjugado ) (x p r es raíz del polinomio. El producto ) )( r x r − − ( es un polinomio real de segundo grado sin raíces reales que aparece en la factorización real de . x ) (x p descompone en producto de factores de la forma (de grado 1, corespondientes a las raíces reales o de grado 2, correspondientes a pares de raíces complejas conjugada) Ejemplo 12 El polinomio x tiene una raíz real x y dos raíces complejas conjugadas 1 3 − 1 = i 2 3 2 1 ± − = x . Sus factorizaciones compleja y real son , respectivamente, ) 1 )( 1 ( i 2 3 2 1 i 2 3 2 1 ) 1 ( 1 2 3 + + − = | | . | \ | + + | | . | \ | − + − = − x x x x x x x 2.3 Curvas en coordenadas polares El radar permite localizar un objeto en el plano conociendo su distancia a la antena y su orientación. Matemáticamente hablando, se fija un punto O del plano como origen de distancias o polo y un semieje que parte del polo a partir del cual se miden los ángulos en sentido contrario a las agujas del reloj. Las coordenadas polares de un punto P son la distancia ρ al polo y el ángulo θ que forma OP con el eje polar. Tomando el polo como origen de coordenadas cartesianas y el eje polar como semieje de abscisas positivo, la relación entre las coordenadas polares (θ, ρ) y cartesianas (x, y) del punto P viene dada por las ecuaciones ρ θ P O x eje polar y θ ρ θ ρ sin cos = = y x La relación inversa debe tratarse con más cuidado, pues, si el punto no es el origen, el ángulo está definido salvo adición de múltiplos enteros de 2π. En todo caso, la distancia se determina mediante 2 2 y x + = ρ y para obtener el ángulo, se elige un valor de θ tal que ρ θ ρ θ y x = = sin y cos Este valor es único en el intervalo [0, 2π[ o en qualquier trasladado del mismo. Alternativamente, se suele determinar θ usando juiciosamente la fórmula x y arctan = θ Con MATLAB, la distancia del punto (x, y) al origen se obtiene mediante norm([x,y]) y el ángulo mediante la función atan2(y,x). Observa que abs actúa sobre el vector, mientras que atan2 lo hace sobre las coordenadas en orden inverso. Ejemplo 13 Las coordenadas polares de (1, −1) son . 2 y 4 = − = ρ π θ Hacemos el cálculo con MATLAB. x = 1; y = -1; % Abscisa y ordenada r = norm([x,y]) % Distancia z = atan2(y,x) % Ángulo La orden polar(z,r,'*') representa gráficamente los puntos del plano cuyas coordenadas polares están almacenadas en los vectores z (ángulo) y r (distancia). También se puede pasar de coordenadas cartesianas a polares trabajando con complejos. Dado el punto (x, y), basta tomar el complejo x + yi y calcular su módulo y su argumento. Ejemplo 14 u = 1 - i; % Pasa a complejos r = abs(u) % Módulo z = angle(u) % Argumento 2.3.1 Circunferencias, cardioides Las coordenadas polares son útiles para describir algunas trayectorias, poniendo el módulo en función del ángulo, ρ , y variando θ en determinado intervalo. Por ejemplo, = 2 es la ecuación de una circunferencia de centro el origen y radio 2 en coordenadas polares. Para representarla gráficamente escribimos ) (θ f = ρ z = linspace(0, 2*pi); r = 2*ones(size(z)); polar(z,r) Las ecuaciones polares ρ y ρ corresponden a circunferencias que pasan por el polo. La primera es tangente al eje polar y la segunda lo tiene por diámetro. θ sin = θ cos = 0.5 1 1.5 2 30 210 60 240 90 270 120 300 150 330 180 0 0.5 1 30 210 60 240 90 270 120 300 150 330 180 0 Figura 4: Circunferencias ρ = 2, y θ ρ sin = θ ρ cos = z = linspace(0, pi,101); r = sin(z); polar(z,r) z = linspace(0, pi); r = cos(z); polar(z,r) La gráfica de ecuación polar se denomina cardioide. Veamos por qué. ) 2 / sin(θ ρ = 0.2 0.4 0.6 0.8 1 30 210 60 240 90 270 120 300 150 330 180 0 0.2 0.4 0.6 0.8 1 30 210 60 240 90 270 120 300 150 330 180 0 Figura 5: Cardioide y diagrama de radiación de antena ) 2 / sin(θ ρ = ) ( sin 2 θ = P 2.3.2 Diagramas de radiación de antenas (I) La densidad de potencia radiada por una antena elemental depende del ángulo respecto al eje de la antena según . ) ( sin 2 max θ P P = z = linspace(0, 2*pi, 101); r = sin(z/2); polar(z,r) En el caso de un dipolo de longitud L la expresión de la potencia radiada depende de θ θ 2 2 sin 2 cos cos 2 cos | . | \ | − | . | \ | kL kL El caso kL se denomina dipolo de media onda y el de kL , dipolo de onda completa. π = π 2 = 2.3.3 Espirales arquimediana y logarítmica La función lineal en polares, ρ se representa como una espiral de paso fijo, llamada espiral de Arquímedes. En la naturaleza aparece frecuentemente la espiral logarítmica . , θ a = θ ρ a e = 180 30 210 60 240 90 270 120 300 150 330 0 30 210 60 240 90 270 120 300 150 330 180 0 Figura 6: Espirales arquimediana y logarítmica 2.4 Problemas 1. Deduce las expresiones siguientes a partir de la fórmula de Euler. 2 e e cos i i x x x − + = ; i 2 e e sin i i x x x − − = i ) ( i i e e b a b a + = ⋅ . 2. Deduce de la expresión e las fórmulas del seno y coseno del ángulo suma . b a + 3. Prueba que la expresión A puede ponerse como t B t sin cos + ) sin( 2 2 ϕ + + t B A , para determinado valor de ϕ. 4. Un ahorrista ingresa una cantidad a j al comienzo del j-ésimo periodo, j = 1, 2, ...n, a interés compuesto. El tipo de interés por periodo en tanto por uno es r. Escribe una función que proporcione el saldo de la cuenta al principio de cada periodo. Representa gráficamente la situación de una cuenta que ofrece un interés del 1% por periodo, en la que las imposiciones (disposiciones) al inicio de cada periodo son 100, 25, 80, −45, 125, 30, 70. 5. Divide el polinomio por x − 2 5 2 3 − − x x a) manualmente, utilizando el algoritmo de división b) por la regla de Ruffini c) utilizando la orden deconv Evalúa el mismo polinomio en x = 2 d) por sustitución directa e) usando polyval 6. Halla ( a partir de sus raíces. ) 6 1 − x 7. Halla los coeficientes del polinomio ( y represéntalo gráficamente en el intervalo [1, 2]. 5 ) 3 2 − x 8. Expresa el polinomio p como combinación lineal de potencias de 1 3 5 ) ( 2 3 + + − = x x x x ), 1 ( − x d x c x b x a x p + − + − + − = ) 1 ( ) 1 ( ) 1 ( ) ( 2 3 1 − a) desarrollando las potencias de x e identificando coeficientes de las potencias de x del mismo grado en ambas expresiones. b) observando que p . 2 3 ) 1 ( y 2 ) 1 ( , ) 1 ( , ) 1 ( a p b p c p d ⋅ = ′ ′ ′ = ′ ′ = ′ = c) escribiendo p en forma anidada ) (x d x c x b x a x p + − + − + − = ) 1 )( ) 1 )( ) 1 ( (( ) ( , y observando que d es el resto de la división d x p x x p + − = ) ( ) 1 ( ) ( 1 , que c es el resto de la división de entre y así sucesivamente. ) ( 1 x p 1 − x d) Escribe una función de MATLAB, q = shiftpol(p,a) que obtenga los coeficientes q = [q 1 , q 2 , ..., q n ] de la expresión del polinomio p = [p 1 , p 2 , ..., p n ] como combinación de potencias de . a x − 9. Las cifras de un número entero en notación decimal son los coeficientes de un polinomio cuyo valor en 10 es el número dado. Los dispositivos electrónicos almacenan y operan con números en base 2, porque basta usar dos cifras, 0 y 1, para representar todos los números. Para pasar de base 2 a base 10, basta evaluar el correspondiente polinomio en 2. Por ejemplo, 1101 2 = 2 3 + 2 2 +0·2 + 1 = 13. Recíprocamente, las cifras de la expresión en base 2 un número decimal son los restos de las divisiones sucesivas por 2 de dicho número y sus cocientes. Expresa el número 53 en base 2. 10. La función e x se aproxima en un entorno del origen mediante el polinomio de Taylor ! ! 3 2 1 ) ( 3 2 n x x x x x p n n + + + + + = L Representa la función exponencial y sus sucesivas aproximaciones en un intervalo de la forma [ −a, a]. 11. La función log(1+x) se aproxima en un entorno del origen mediante el polinomio de Taylor n x x x x x p n n n 1 3 2 ) 1 ( 3 2 ) ( + − + − + − = L Representa la función log(1+x) y sus sucesivas aproximaciones en el intervalo ]−1, 1[. Observa la diferencia con el problema anterior. 12. Escribe un fichero de MATLAB que genere dos gráficos en la misma ventana (usa subplot), uno que represente en el plano complejo las raíces de un polinomio real, y otro que represente en el plano cartesiano los valores del mismo polinomio en un intervalo que contenga las raíces reales. 13. Demuestra que las raíces complejas de un polinomio real aparecen en pares conjugados, es decir, que si a es raíz de un polinomio con coeficientes reales, también lo es. Halla un polinomio real de segundo grado que admita como raíz. ¿Cuál es su discriminante? i b + i b a − 14. Halla la descomposición en factores irreducibles reales del polinomio . 1 2 3 4 5 + + + + + x x x x x 15. Representa gráficamente las curvas a) para ] , 0 [ ), ) 1 2 sin(( π θ θ ρ ∈ + = k K , 2 , 1 , 0 ± ± = k b) para k ] , [ ), 2 sin( π π θ θ ρ − ∈ = k K , 2 , 1 , 0 ± ± = c) Averigua la ecuación polar de la curva de la figura. 16. Elige un intervalo adecuado y representa las siguientes curvas dadas por su ecuación polar: a) θ ρ 1 = b) 2 1 1 . 0 θ ρ + = c) 2 1 θ θ ρ + = d) θ ρ log = e) θ θ ρ log = f) θ ρ cos 1 1 ⋅ + = e , para distintos valores de e. 0.2 0.4 0.6 0.8 1 30 210 60 240 90 270 120 300 150 330 180 0 2.5 Soluciones 4. Llamamos c j al saldo a principio del periodo j. Obviamente, porque al principio no se han producido intereses. , 1 1 a c = Al cabo del primer periodo, se acumula a c 1 el interés producido, c 1 r, y la segunda imposición, a 2 . El total es 2 1 2 ) 1 ( a r c c + + = Durante el segundo periodo se producen intereses por un importe de c 2 r y, al final, se produce la tercera imposición, a 3 , dando un total de 3 2 3 ) 1 ( a r c c + + = y así sucesivamente hasta la última imposición, a n , con lo que al inicio del periodo n habrá acumulado la cantidad n n n a r c c + + = − ) 1 ( 1 Los cálculos en MATLAB pueden efectuarse mediante la función siguiente: function c = ahorro(a,r) %AHORRO Formación de capital a interés compuesto. % % c = ahorro(a,r) % % a: vector de cantidades ingresadas al inicio de cada periodo % r: tipo de interés en tanto por uno por periodo % c: vector de capitales acumulados al inicio de cada periodo n = length(a); c(1) = a(1); for k = 2:n c(k) = c(k-1)*(1+r) + a(k); end Para hallar la gráfica pedida, aplicamos esta función a los datos del problema y usamos la orden bar. a = [100, 25, 80, -45, 125, 30, 70]; r = 0.01; c = ahorro(a,r); bar(c) title('Interés compuesto') xlabel('Periodo') ylabel('Capital') Nota: Este algoritmo obtiene el cociente y el resto de la división del polinomio cuyos coeficientes son los elementos del vector a entre x . Los primeros elementos de c contienen el cociente y el último, c(n) es el resto. Constituye la llamada Regla de Ruffini o algoritmo de Horner. Con MATLAB, este resultado se puede obtener mediante la expresión ) 1 ( r + − [cociente, resto] = deconv(a, [1, –(1+r)]) . 5. a) En el algoritmo clásico, los cálculos se disponen de la siguiente forma 1 4 2 5 2 4 2 2 2 2 2 2 2 5 2 2 2 2 2 3 3 − + − − + − − + + + − − − − x x x x x x x x x x x x x El cociente es y el resto −1. 2 2 2 + + x x b) Al ser el denominador de la forma x , se obtiene el mismo resultado por Ruffini, trabajando sólo con los coeficientes. a − 1 2 2 1 4 4 2 5 2 0 1 2 − − − Los coeficientes del cociente son 1, 2, 2 y el resto es −1. c) p = [1 0 -2 -5]; q = [1 -2]]; [c,r] = deconv(p,q) d) . 1 5 4 8 5 2 2 2 ) 2 ( p 3 − = − − = − ⋅ − = e) polyval(p,2) 6. El polinomio tiene a 1 como raíz de orden 6. Por tanto será (salvo factor constante que en este caso es 1) poly([1 1 1 1 1 1]) 8.c) El camino más corto es aplicar Ruffini reiteradamente 5 −1 3 1 1 5 4 7 5 4 7 8 1 5 9 5 9 16 1 5 5 14 Los restos son los coeficientes de las sucesivas potencias de : 1 − x . 8 ) 1 ( 16 ) 1 ( 14 ) 1 ( 5 1 3 5 2 3 2 3 + − + − + − = + + − x x x x x x 9. Dividimos por 2 sucesivamente y tomamos los restos en orden inverso: 53 2 1 26 2 0 13 2 1 6 2 0 3 2 1 1 Por tanto, 53 = 110101 2 . 10. La función siguiente genera vectores con los sumandos del desarrollo y los representa sucesivamente en el mismo gráfico: function prob08(n) x = linspace(-1,1); y = exp(x); plot(x,y,'r'), hold on,pause yk = ones(size(x)); ck = 1; plot(x,yk),pause for k = 1:n ck = ck*k; yk = yk + x.^k/ck; plot(x,yk), pause end 14. a) Con MATLAB. Calculamos en primer lugar las raíces del polinomio: r = roots([1 1 1 1 1 1]) Obtenemos: r = 0.5000 + 0.8660i 0.5000 - 0.8660i -1.0000 -0.5000 + 0.8660i -0.5000 - 0.8660i Observamos que las dos primeras son complejas conjugadas, por lo que dan lugar a un factor irreducible de segundo grado que podemos obtener con p1 = conv([1 -r(1)], [1 -r(2)]) p1 = 1.0000 -1.0000 1.0000 O sea . La tercera raíz, −1, corresponde al factor . 1 ) ( 2 1 + − = x x x p 1 1 . ) ( 2 + = x x p Las dos últimas raíces forman otro par conjugado y, operando como antes tenemos p3 = conv([1 -r(4)], [1 -r(5)]) p3 = 1.0000 1.0000 1.0000 Es decir, . En conclusión, la descomposición pedida es: ) ( 2 3 + + = x x x p 1 2 3 = + + + + x x x ) 1 )( 1 )( 1 ( 2 2 4 5 + + + + − + x x x x x x x . b) Sin MATLAB. Podemos recordar la fórmula de la suma de términos de una progresión geométrica o tener la feliz idea de multiplicar el polinomio dado por . De las dos maneras se llega a que dicho polinomio tiene las mismas raíces que , salvo la raíz 1 − x 1 6 − x 1 = x Tales raíces son , 3 sin i 3 cos π π k k k + = x para Eliminando quedan las raíces halladas en el apartado anterior y se puede operar como antes, pero haciendo a mano los cálculos. . 5 , , 1 , 0 K = k , 1 0 = x 3 Representación gráfica de funciones (II) Muchos procesos de la vida real pueden expresarse mediante funciones elementales y combinaciones de estas. Los científicos, economistas y otros investigadores estudian relaciones entre cantidades. Por ejemplo, un bioquímico investigará el crecimiento de una población sometida a determinadas condiciones. Un economista estará interesado en estudiar los beneficios por la fabricación de un producto. Un ingeniero necesita saber la relación entre el peso que puede soportar un objeto y la deformación que en él se puede producir. Todas estas relaciones generalmente se formulan matemáticamente mediante una expresión algebraica que se conoce con el nombre de función. Vamos a estudiar en este tema la representación gráfica de varios tipos de funciones, ya que disponer de la representación gráfica de una función proporciona información, que puede no ser evidente en los tratamientos algebraicos, sobre el fenómeno o proceso que se desea analizar. Hemos utilizado ya algunas órdenes gráficas de MATLAB para representar expresiones algebraicas, plot para representar polinomios, compass para representar números complejos y polar para representar funciones a partir de su expresión en coordenadas polares. Veremos algún comando más para representación de funciones en general, curvas en dos y tres dimensiones, coordenadas cartesianas, ecuaciones paramétricas, coordenadas cilíndricas y esféricas. 3.1 Funciones reales de una variable Una función f real de variable real es una aplicación de D en IR que asocia a cada elemento D IR un numero real y, D es el dominio de la función. ∈ x ⊆ Para representar geométricamente una función y = f(x) como una gráfica, es tradicional usar el sistema de coordenadas cartesianas, con las unidades para la variable independiente x en el eje horizontal y las de la variable dependiente y en el eje vertical. Gráfica de una función: La gráfica de una función f es el conjunto de todos los puntos del plano cuyas coordenadas (x, y) verifican y = f(x) siendo x del dominio de f. En general en MATLAB utilizaremos plot para representar pares de valores de una función. La orden plot(x,y) representa los pares (x 1 , y 1 ), (x 2 , y 2 ), ..., (x n , y n ), siendo el vector x = (x 1 , x 2 , ..., x n ) del dominio y el vector y = (y 1 , y 2 , ..., y n ) las imágenes correspondientes. Por defecto, plot une puntos consecutivos mediante un segmento, por lo que la representación será más perfecta cuantos más puntos pongamos. Ejemplo 1 Una población de 100.000 bacterias se introduce en un cultivo, siendo su número al cabo de x horas: 5 2 ( ) 10 (1 log( 1)) f x x = + + para estudiar la influencia de este cultivo en el crecimiento de la población conviene representar la función f(x). x=0:24; y=1e5*(1+log(x.^2+1)); plot(x,y) Observamos que la población a lo largo del día sigue multiplicándose pero cada vez de forma menos acusada Añadiendo un tercer argumento a plot, modificamos el color y el estilo del trazo. Así, con plot(x,y,'*') visualizamos los puntos que determinan la función del ejemplo anterior. Para trazar la gráfica de la función de color rojo, por ejemplo, en el mismo gráfico hacemos plot(x,y,'*',x,y,'r') Con help plot vemos las distintas combinaciones de caracteres válidas como tercer argumento de esa función. La orden title sirve, como su nombre indica, para poner un título al gráfico. Igualmente podemos poner títulos en los ejes con xlabel e ylabel. El argumento de estas funciones ha de ser una cadena o variable de este tipo. title('población de bacterias' xlabel('Abscisas'), ylabel('Ordenadas') 0 5 10 15 20 25 1 2 3 4 5 6 7 8 x 10 5 Abscisas O r d e n a d a s población de bacterias Ejemplo 2 Representa la función de beneficios de una empresa si al vender un producto hasta un tope de 5000 unidades estos viene dados por B(x)=x 3 – 9x 2 + 24x, donde x son miles de unidades. x=0:.1:5;y=x.^3-9*x.^2+24*x; plot(x,y ) Podemos añadir cualquier texto sobre el gráfico sin más que indicar la posición en que debe aparecer, bien mediante coordenadas o con el ratón. Para escribir la palabra Máximo en el punto de coordenadas (2, 20) utilizamos text(2,20,'Máximo') También podemos situar el texto con el ratón gtext('Mínimo') Las instrucciones interactivas, como pause, gtext, etc. para ser ejecutadas las tienes que probar en MATLAB, no se pueden ejecutar desde Word. 3.2 Curvas en 2D Una aplicación continua f definida en un intervalo de la recta real IR y con valores en el plano IR 2 se llama curva en dos dimensiones. Ecuaciones paramétricas Supongamos que al número real t corresponde el punto f(t), cuyas coordenadas respecto a un sistema de referencia son (x(t), y(t)). Entonces la curva f se puede describir como la aplicación que a cada t de IR hace corresponder el punto (x, y) = (x(t), y(t)). Se dice que: x =x(t) y = y(t) t∈ IR son las ecuaciones paramétricas de la curva, t es el parámetro, en muchas ocasiones representa el tiempo y así tenemos la posición de un objeto a lo largo del tiempo. Ejemplo 3 La curva definida por la aplicación que a cada número real t le hace corresponder el punto (x, y) dado por: x = x 0 + t v 1 y = y 0 + t v 2 es una recta en el plano que pasa por el punto (x 0 , y 0 ) y es paralela al vector (v 1 , v 2 ). Para representar la recta que pasa por el punto (2, -1) y tiene la dirección del vector (3, -2) hacemos: t=0:3;v=[3,-2]; x=2+t*v(1); y=-1+t*v(2); plot(x,y) realmente representamos el segmento de recta comprendido entre (2, -1) y (11, -7). 3.2.1 Circunferencia La circunferencia representada por ecuación cartesiana por x 2 + y 2 = r 2 se expresa en ecuaciones paramétricas de la siguiente forma: Con lo que para representar en MATLAB la circunferencia de centro (0,0) y radio 1 basta hacer: P=(x, y) y x t x= r cos t y = r sin t t = 0:.01:2*pi; r=1; x=r*cos(t);y=r*sin(t); plot(x,y),axis equal La orden hold on hará que la próxima gráfica se inserte en la misma figura, para dibujar un circunferencia concéntrica con la anterior pero de menor radio, hacemos: hold on, r=0.5; x=r*cos(t);y=r*sin(t); plot(x,y),hold off Recuerda que debes hacer hold off para desactivar el comando hold En general la circunferencia de centro (a, b) y radio r , que en coordenadas cartesianas será 2 2 ( ) ( ) x a y b r − + − = 2 tendrá por ecuaciones paramétricas: x = a + r cos t y = b + r sin t Prueba a representar por ejemplo la circunferencia de centro (-2, 3) y r = 2; 3.2.2 Cicloide Las ecuaciones paramétricas de una curva aparecen frecuentemente en la descripción de trayectorias de móviles, cuya posición en el plano viene dada por dos funciones (x(t), y(t)) del tiempo, t, que es el parámetro. Por ejemplo, se llama cicloide a la trayectoria de un punto de una circunferencia que rueda sin deslizarse sobre una recta, se obtiene con: t = 0:pi/100:2*pi; 2 y = 1-cos(t); Cicloide 1.5 x = t-sin(t); 1 plot(x,y) 0.5 axis equal 0 0 1 2 3 4 5 6 3.2.3 Ruletas Las ruletas son una variedad de cicloides, se obtienen por el desplazamiento de una circunferencia sobre otra. Se trata de obtener la trayectoria de un punto fijo P de una circunferencia de radio c, que es tangente exterior a otra circunferencia fija de radio a y rueda sobre ella con velocidad constante, como indica la siguiente figura: Si en el momento inicial el punto de contacto de ambas circunferencias es (a, 0) y al cabo de un tiempo t suponemos que la circunferencia que se desliza recorre un ángulo la ecuación de la trayectoria es: t = 0:pi/100:2*pi; a=2; c=1; x=(a+c)*cos(t)-c*cos((a+c)*t/c); y=(a+c)*sin(t)-c*sin((a+c)*t/c); plot(x,y) axis equal -5 -4 -3 -2 -1 0 1 2 3 4 5 -4 -3 -2 -1 0 1 2 3 4 La curva obtenida se llama epicicloide. Represéntala para valores de los parámetros a = 2; c = 0.5, y comprueba que para a = c la curva obtenida es una cardioide, curva que ya vimos en coordenadas polares. t = 0:pi/100:2*pi; a=1; c=1; x=(a+c)*cos(t)-c*cos((a+c)*t/c); y=(a+c)*sin(t)-c*sin((a+c)*t/c); plot(x,y) axis equal -4 -3 -2 -1 0 1 2 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5 Si suponemos que la circunferencia que se desliza es tangente interior a la primera tenemos una ruleta distinta que se denomina hipocicloide. t = 0:pi/100:2*pi; a=2; c=0.5; x=(a-c)*cos(t)+c*cos((a-c)*t/c); y=(a-c)*sin(t)-sin((a-c)*t/c); plot(x,y) axis equal En el caso de c=a/2 la curva que se obtiene es un astroide. Dibújala. 3.3 Funciones reales de dos variables Una función f real de dos variables es una aplicación de D en IR 2 que asocia a cada elemento ( D IR ∈ ) , y x ⊆ 2 un número real z; D es el dominio de la función. Para representar geométricamente una función z = f(x,y) como una gráfica, es tradicional usar el sistema de coordenadas cartesianas de IR 3 con las unidades para la variables independientes x e y en el plano horizontal XY y las de la variable dependiente z en el eje vertical. Gráfica de una función: La gráfica de una función f es el conjunto de todos los puntos del espacio cuyas coordenadas (x, y, z) verifican z = f(x,y) siendo (x, y) del dominio de f. La idea básica para representar funciones de dos variables es evaluarlas en un conjunto de puntos del plano XY formando una malla rectangular, almacenar estos valores en una matriz z y utilizar órdenes de MATLAB que representan estos valores como alturas sobre el plano XY. Ejemplo 4 La elasticidad por flexión es el fenómeno de deformación de un cuerpo, por efecto de una fuerza proporcional a su dimensión mayor, y el sólido se deforma de tal modo que el sistema de laminas planas paralelas se encorvan formando un haz de superficies curvas. La deformación d para una barra de longitud l sometida a una fuerza transversal F aplicada en su centro tiene por valor: 3 3 4 ah l E F d = siendo F el peso o fuerza que se aplica, l, a, h: longitud, anchura y altura de la barra y E el módulo de elasticidad de Young. Consideremos láminas de cobre de longitud constante 10 cm y de anchura a y grosor h variables, sobre las que se aplica una fuerza de 5.1x10 8 dinas. El modulo de Young del cobre es de 9.0x 10 11 dinas/cm 2 . La deformación queda como una función de dos variables, la anchura y grosor de las láminas. d F Representación de d en función de a y h. Damos a la anchura a valores entre 5 y 10 mm y a la altura h entre 2 y 4 mm. observamos que si calculamos directamente d obtenemos un error de dimensiones, MATLAB nos ayuda con la orden meshgrid, que a partir de un conjunto de valores de a y otro de h, crea dos matrices, A y H, con las coordenadas de los puntos de la malla. La matriz d se obtiene evaluando la función a representar sobre el par de matrices obtenidas. Hay que tener cuidado en emplear las versiones 'punto' de las operaciones producto, cociente y potencia, pues la función actúa elemento a elemento. a = 0.5:0.01:1; h = 0.2:.01:0.4; F =5.1e8; E=9e11; [A,H]=meshgrid(a,h);% ¡Truco! d=F*100^3./(4*E.*A.*H.^3); surf(a,h,d) Ejemplo 5 Sabemos que una ecuación lineal en tres dimensiones representa un plano en el espacio IR 3 , representa el plano 2 3 1 x y z − + = x = -1:0.1:1; y = -1:.1:1; [X,Y] = meshgrid(x,y); z=1+3*Y-2*X; surf(x,y,z) Representemos en la misma figura un plano paralelo a éste y otro que lo corte. hold on z=6+3*Y-2*X; %Plano paralelo, con el mismo vector característico surf(x,y,z) hold on z=1-Y+5*X; surf(x,y,z) hold off 3.3.1 Paraboloide hiperbólico La función z = xy es la ecuación de una superficie llamada paraboloide hiperbólico. La representamos en el rectángulo [–1,1]×[–1,1], en este caso es más fácil disponer los valores de la función en una matriz z de modo que la posición en la matriz corresponda con las coordenadas del punto (x,y), y podemos prescindir de la instrucción meshgrid. x = -1:0.1:1; y = -1:.1:1; z = y'*x; % Columna×Fila=Matriz cuadrada surf(x,y,z) % Superficie de placas Puedes utilizar también la instrucción mesh para obtener el armazón de la superficie mesh(x,y,z) % Armazón de la superficie 3.3.2 Paraboloide elíptico Representemos el paraboloide elíptico z = x 2 + y 2 en [–1,1]×[–1,1] x = -1:0.1:1; y = -1:.1:1; [X,Y] = meshgrid(x,y); % ¡Truco! z = X.^2 + Y.^2; % !Ojo al punto! surf(x,y,z) 3.4 Curvas y tonos de nivel Se llaman curvas de nivel de una función z = f(x,y) a la curva del plano XY para la que la función toma un valor constante f(x,y) = c ó z = c; Por ejemplo las curvas de nivel del paraboloide elíptico son x 2 + y 2 = c, representan pues circunferencias en el plano XY, se pueden obtener en MATLAB con: contour(x,y,z) % Curvas de nivel surfc(x,y,z) % Superficie y curvas de nivel waterfall(x,y,z) % Cortes verticales contourf(x,y,z)%curvas de nivel rellenas según niveles El aspecto de la superficie puede modificarse de varias maneras. -1 -0.5 0 0.5 1 -1 -0.5 0 0.5 1 0 0.5 1 1.5 2 con surfl se ilumina la superficie desde una fuente de luz. Prueba las siguientes opciones surfl(x,y,z,[0.5,0.5,0])%foco de luz en la posición [0.5,0.5,0]) surfl(x,y,z,[0,0,1]) surfl(x,y,z,[10,10,10]) surfl(x,y,z,[0.5,0.5,1]) Para crear una malla transparente hacemos mesh(x,y,z), hiden off Con hidden on volvemos al estado normal en el que se ocultan las líneas posteriores. Las opciones de sombreado muestran u ocultan la malla sobre la superficie. surf(x,y,z), shading flat % sin malla shading interp % color degradado shading faceted % losetas con borde El color se cambia con colormap que tiene algunas opciones predefinidas (ver la ayuda de graph3) colormap pink 3.4.1 Sombrero la función z= 3 cos((x 2 +y 2 )/3)/(3+x 2 +y 2 ) se denomina sombrero, vamos a representarla: x = -5:0.1:5; y = -5:.1:5; [X,Y] = meshgrid(x,y); z = 3*cos((X.^2 + Y.^2)/3)./(3+X.^2 + Y.^2);, % !Ojo al punto! surf(x,y,z), hold on ccontour3(x,y,z,'r') Podemos ver distintas posiciones del sombrero, ya que el punto de vista de un gráfico en 3D puede modificarse interactivamente con el ratón, haciendo rotate3d % Recuerda que las instrucciones interactivas las tienes que probar directamente en Matlab, no a través de Word. La opción view(x,y,z) nos permite especificar el punto de vista de la superficie view([5,5,-5])%(x,y,z) posicion en coordenadas cartesianas. view(0,0) %(h,v) h rotación horizontal, v elevación vertical La función pcolor muestra un rectángulo coloreado según el valor que se representa. Vamos a utilizar la orden subplot para crear varias gráficas en una misma figura. subplot (m,n,i) mxn gráficas distribuidas en m filas y n columnas, i gráfica que vamos a introducir. Ejemplo 6 Representa la función z = sen x cos y en [0,2π]×[0,2π] x = 0:pi/10:2*pi; y = x; [X,Y] = meshgrid(x,y); z = sin(X).*sin(Y); subplot(2,1,1),surf(x,y,z) % dos gráficas distribuidas en dos filas y una columna,surf(x,y,z)% primera gráfica subplot(2,1,2),pcolor(x,y,z),% segunda gráfica Jugando con las opciones de sombreado y añadiendo curvas de nivel en negro, creamos un mapa físico hold, shading interp, contour(x,y,z,'k'), hold Si en cambio queremos mostrar las curvas de nivel sobre la superficie, hacemos lo mismo con surf y contour3 surf(x,y,z), shading interp, hold contour3(x,y,z,'k'), hold 3.5 Curvas en 3D Al igual que en el plano, la trayectoria un móvil en el espacio puede definirse mediante sus ecuaciones paramétricas, (x(t), y(t), z(t)), donde t varía en un intervalo y x, y y z son las coordenadas del móvil en función de t. En tres dimensiones la ecuación de las ecuaciones paramétricas de la recta serán: x = x 0 + t v 1 y = y 0 + t v 2 z= z 0 + t v 3 Por ejemplo la que pasa por el punto (0, -2,-1) y tiene la dirección del vector (3,2, -1) será: t=-1:.01:1;p=[0,-2,-1];v=[3,2,-1];x=p(1)+t*v(1);y=p(2)+t*v(2); z=p(3)+t*v(3);plot3(x,y,z) 3.5.1 Hélice Si x e y describen una circunferencia y z avanza linealmente, tenemos la trayectoria de una hélice, sus ecuaciones paramétricas serán: x = r cos t y = r sin t z = k t La representamos con: t = 0:pi/500:4*pi;r=3; k=2; x = r*sin(t); y =r* cos(t); z = k*t; plot3(x,y,z) -4 -2 0 2 4 -4 -2 0 2 4 0 5 10 15 20 25 30 A los puntos t 1 y t 1 + 2π corresponden los puntos M 1 = ( r cos t 1 , r sin t 1 , ht 1 ) y M 2 =( r cos t 1 , r sin t 1 , ht 1 +2π h), la distancia entre estos dos puntos 2π |h| se llama paso de la hélice. Dibuja dos hélices entrelazadas con t = 0:pi/500:4*pi; x = sin(t); y = cos(t); z = t; plot3(x,y,z,'r',-x,-y,-z,'g') Para dibujar una trayectoria helicoidal sobre una superficie cónica haz: t = 0:pi/400:20*pi; x = t.*sin(t); y = t.*cos(t); plot3(x,y,t) -100 -50 0 50 100 -100 -50 0 50 100 0 20 40 60 80 3.6 Líneas de máxima pendiente Dada una función de dos variables z = f(x,y) podemos obtener su vector gradiente , f f f x y   ∂ ∂ ∇ =  ∂ ∂    evaluado en un conjunto de puntos y representarlo junto a las curvas de nivel. Notemos que el gradiente en cada punto tiene la dirección de máxima variación de la función y es perpendicular a las curvas de nivel de la superficie. ( ) ( ) 0 0 0 0 ( , ) , 2 , 2 ( , ) 2 , 2 f f f x y x y x y f x y x y   ∂ ∂ ∇ = = − −   ∂ ∂   ∇ = − − ( , ) f x y ∇ ( , ) f x y ∇ mínimo descenso - máximo ascenso 2 2 ( , ) 1 ( ) f x y x y = − + veámoslo en el caso del paraboloide elíptico: x = -1:0.1:1; y = -1:.1:1; [X,Y] = meshgrid(x,y); % ¡Truco! z = X.^2 + Y.^2; [dx,dy] = gradient(z,.1,.1);%Obtiene el gradiente de z en los puntos de la malla [X,Y]. contour(z),hold on, quiver(dx,dy),%representa los vectores (dx,dy) mediante flechas; hold off 3.7 Coordenadas cilíndricas 2 4 6 8 10 12 14 16 18 20 2 4 6 8 10 12 14 16 18 20 Si las coordenadas x e y de un punto P(x,y,z) del espacio se sustituyen por las coordenadas polares r y θ, la terna r,θ, z se denominan coordenadas cilíndricas del punto P. El número no negativo r representa ahora la distancia del punto P al eje z tal como se indica en la figura. Los puntos del espacio para los que r es constante equidistan del eje z y por tanto pertenecen a un cilindro circular (de aquí el nombre de coordenadas cilíndricas). P(x,y,z) r φ z Paso de c. cilindrícas a c.cartesianas x=r cos θ y=r sin θ z=z Paso de c.cartesianas a c. cilindrícas r= 2 2 y x + tgθ= x y z=z Las coordenadas cilíndricas son muy convenientes para representar cilindros y superficies de revolución en general, para las cuales el eje z sea un eje de simetria. Cilindro x 2 + y 2 = a 2 coordenadas cartesianas r = a coordenadas cilíndricas. Cono x 2 + y 2 = z 2 coordenadas cartesianas r = z coordenadas cilíndricas Generar superficies de revolución es muy fácil con MATLAB. Basta crear un vector con los radios de la superficie a intervalos regulares del eje de revolución y utilizar la función cylinder. r=1; cylinder(r)%cilindro x 2 +y 2 =1, ó r=1 en c. cilíndricas Por lo que un cilindro de radio 3 lo representaremos con: rr=3;,cylinder(rr); -4 -2 0 2 4 -4 -2 0 2 4 0 0.2 0.4 0.6 0.8 1 Para el cono el vector de radios será variable: r=-2:.1:2; cylinder(r) r P z θ r 3.8 Coordenadas esféricas Un punto P(x,y,z) del espacio se representa en coordenadas esféricas mediante la terna (r, θ, φ) de modo que: r es la distancia del origen al punto P. θ es el ángulo polar. φ es ángulo, que forma el semieje positivo z con la semirrecta de origen el de coordenadas y que contiene a P. 0≤φ ≤π Paso de c. esféricas a c. cartesianas x=rsin φ cos θ y= r sin φ sin θ z=r cos φ Paso de c.cartesianas a c. esféricas 2 2 2 2 2 2 2 2 cos cos z y x z y x y z y x r + + = + = + + = φ θ La esfera x 2 + y 2 + z 2 = a 2 en coordenadas esféricas es φ = a En MATLAB puedes dibujar la esfera de radio 1 simplemente con: sphere, axis equal 4 Problemas 1.-Las ecuaciones paramétricas de una elipse son: x = a cos t y = b sin t donde a y b son los semiejes. Representa la elipse de ecuaciones cartesianas, 1 16 9 2 2 = + y x , pasándola previamente a ecuaciones paramétricas y obtén en la misma gráfica la hipérbola x y = 1 para obtener una aproximación de los punto de corte de ambas cónicas. 2.- La función y(t) = 1-e -bt , donde t es el tiempo y b>0, describe muchos procesos de ingeniería, como la temperatura de un objeto que esta siendo calentado etc. Investiga el efecto del parámetro b en la función y(t), representando y para varios valores de b en la misma gráfica. ¿Al cabo de cuánto tiempo y(t) alcanzara el 98% de su valor asintótico?. 3.- Un dipolo eléctrico consiste en dos cargas opuestas separadas por una distancia d. El potencial eléctrico en un punto es la suma de los potenciales de cada carga. Si una de las cargas q está en la posición (a,b) y la otra –q en (-a,-b). el potencial eléctrico es: ) 1 1 ( 4 ) , ( 0 − + − = r r q y x v πε siendo: 2 2 2 2 ) ( ) ( ) ( ) ( b y a x r b y a x r + + + = − + − = − + Sabiendo que el campo eléctrico y el potencial verifican la relación: ) , ( ) , ( y x v y x E −∇ = → utiliza los comandos de MATLAB gradient, y quiver para calcular y representar el campo eléctrico y las curvas de nivel del potencial, producido por dos cargas opuestas de 2x10-6 C y k = 0 4 1 πε = 9x10 9 , en la posición (1.5,-1.5) y (-1.5,1.5). 4.- Representa gráficamente unos cuantos elementos de las sucesiones siguientes: a n = sen(nπ/2) b n = (1+1/n) n c n = (-1) n Elige un estilo de trazado que deje los puntos aislados . 5.- Dados dos números a < b, obtén un vector x cuyas componentes sean los extremos de los intervalos obtenidos al dividir [a, b] en n partes iguales. El vector x tiene n + 1 componentes a las que llamamos a = x 0 < x 1 < x 2 < . . . < x n = b. Elegir adecuadamente a, b y n para obtener representaciones gráficas de los valores en x de las siguientes funciones: a) f(x) = sen x d) f(x) = 1/x b) f(x) = sinh x e) f(x) = 1/(1+x 2 ) c) f(x) = log x f) f(x) = 1/(1-x 2 ) 6.- La ecuación de los gases perfectos nos da la relación entre la presión P, la temperatura absoluta T, la masa m y el volumen V de un gas: pV = mRT donde R es la constante del gas, para el aire 286.7 (Newton metro/ kilogramo grados Kelvin) si estamos en una habitación a 20ºC = 293º K. Crea una gráfica que exprese la relación entre la presión y el volumen para tres masas de aire de 1Kg, 3, kg y 7 kg con 20 V ≤ 100, m ≤ 3 . 7.- Representa la función (x(t),y(t))=(cosh t, sinh t). ¿Qué tipo de asíntotas presenta esta función? 8.- Representa las siguientes funciones en tres dimensiones junto a sus curvas de nivel: a) z = x 2 - y 2 b) z = (x + y) 2 c) z = x 2 y 3 d) z = sen x sen y 9.- Una placa cuadrada de metal se calienta a 80º C en la esquina correspondiente a x = y = 1. La temperatura se distribuye según la función: 2 2 ) 1 ( 3 ) 1 ( 80 − − − − = y x e e T Obtener la superficie y curvas de nivel para la temperatura. Pon títulos a los ejes ¿Cuál es la temperatura a la esquina correspondiente a x = y = 0?; 6 Soluciones Problema 1 t=0:.1:2*pi; x=3*sin(t); y=4*cos(t); xd=0.1:.1:5;xi=-5:.1:-0.1; %ara representar una gráfica hemos de tener en cuenta los valores que nos interesa dar a la variable independiente. yd=1./xh;yi=1./xi; plot(x,y,xd,yd,xi,yi) Así tienes una aproximación de los puntos de corte que en este caso se pueden obtener fácilmente con la instrucción: roots([16,0,-9*16,0,9]) Problema 2 for b=1:4 t=0:.1:2; y=1-exp(-b*t); plot(t,y),text(1,y(11),['b =',num2str(b)]) hold on end title('Proceso de calentamiento de un cuerpo') hold off Al aumentar b, más rápido es el proceso. La función tiene un comportamiento asintótico en y = 1, por lo que para llegar al 98% tendremos: y = 1-e -bt ≅ 0.98 de donde t ≅ 4/b. Problema 3 q=2e-6; k=9e9; a=1.5; b=-1.5; x=-10:1:10; y=x; [X,Y]=meshgrid(x,y); rp=sqrt((X-a).^2+(Y-b).^2); rn=sqrt((X+a).^2+(Y+b).^2); V=q*k*(rp.^(-1)-rn.^(-1)); i=find(V>5000);V(i)=5000*ones(length(i),1); i=find(V<-5000);V(i)=-5000*ones(length(i),1); [Ex,Ey]=gradient(-V,1,1); E=sqrt(Ex.^2+Ey.^2); Ex=Ex./E; Ey=Ey./E;%normalizamos el vector E para que las %flechas que lo representan sean del mismo orden. contour(X,Y,V) title('El campo (flechas) y el potencial de un dipolo') axis ('square') hold on plot(a,b,'o',-a,-b,'o'); plot(a,b,'+',-a,-b,'-'); quiver(X,Y,Ex,Ey) hold off -4 -2 0 2 4 6 8 10 El campo (flechas) y el potencial de un dipolo Observa que la dirección del campo eléctrico es siempre perpendicular a las curvas de nivel del potencial. file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%203/notas.txt ADVERTENCIA: t=0 : 0.01 : 2*pi ; r=1 ; x=r*cos(t); y=r*sin(t); plot(x,y),axis equal tiene un hueco a la derecha, porque no acaba en 2*pi t=0 : pi/200 : 2*pi ; seria lo correcto PARA HACER EL GRADIENTE! : x = -1: 0.25 : 1; y=x [X,Y]=meshgrid(x,y) Z = -X.^2 -Y.^2 %la función que sea [dX,dY] = gradient(Z); %con quiver se representa en cada punto un vector con las componentes que se le diga. quiver(X,Y,dX,dY) %ahora se pueden superponer los contornos hold contour(X,Y,Z) COORDENADAS CILINDRICAS: ej: r = -2:2; con cylinder(r) COORDENADAS ESFERICAS: las polares en 3D file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/...%20Matematicas/Primer%20Cuatrimestre/Practica%203/notas.txt [09/03/2008 13:49:10] 4 Aplicaciones de los sistemas lineales (I) Muchos problemas en ciencias sociales, ingeniería, genética, etc..., se reducen finalmente a resolver un sistema de ecuaciones lineales. Este es uno de los problemas centrales del Álgebra Lineal, junto con el cálculo de valores y vectores propios. Ilustramos su importancia mediante tres ejemplos: un circuito eléctrico sencillo, el flujo de tráfico en una red de calles y la distribución de la temperatura en una barra en estado estacionario. Los métodos directos para sistemas lineales consisten en transformar el sistema en otro equivalente más sencillo de resolver, por ejemplo un sistema triangular. Esta transformación se interpreta matricialmente como una descomposición de la matriz del sistema en dos factores triangulares. Estos factores contienen toda la información relevante, de modo que cualquier sistema con la misma matriz, puede resolverse conociendo estos factores, sin más que resolver dos sistemas triangulares. El proceso de eliminación, si funciona sin dificultades, produce además de la matriz triangular superior U otra matriz triangular inferior unidad L tal que A = L·U. El elemento (i,k) de la matriz L, con i>k, es el multiplicador usado para eliminar la variable x k de la ecuación i-ésima, utilizando a kk como pivote. El conocimiento de la descomposición de una matriz A en factores triangulares LU facilita la resolución de posteriores sistemas de ecuaciones lineales con la misma matriz A y distintos términos independientes. En lugar de resolver el sistema de matriz A, resolvemos dos sistemas triangulares Ly = b ; Ux = y. Así se ahorra trabajo, pues no hay que repetir los pasos de la fase de eliminación sobre toda la matriz, sino sólo sobre los nuevos términos independientes (mediante la sustitución progresiva en Ly=b). Obtenido y, se resuelve el segundo sistema Ux=y, por sustitución regresiva. El coste de resolución de estos sistemas triangulares es del orden de n 2 operaciones, mientas que la eliminación sobre la matriz completa ha costado del orden de n 3 operaciones. MATLAB proporciona también la descomposición LU de una matriz, mediante la función lu. Si la eliminación tiene lugar sin intercambio de filas, utilizamos [L,U]= lu(A) En el caso general, hay que efectuar una permutación de filas de A para poder factorizar. La matriz de esta permutación se obtiene junto con los factores L y U de [L,U,P]= lu(A) verificándose la relación PA = LU. Las operaciones elementales de la eliminación pueden aplicarse simultáneamente a varios términos independientes, con lo que resolvemos varios sistemas de una vez. Un caso particular interesante es el cálculo de la inversa de una matriz A, que puede interpretarse como la resolución de n sistemas lineales de matriz A y términos independientes, las columnas de la matriz identidad de orden n. Ejemplo 1 Dada la matriz del calor A=matcalor(3) A = 2 -1 0 -1 2 -1 0 -1 2 Con la función lu nos proporciona la descoposición LU de la matriz A lu(A) ans = 2.0000 -1.0000 0 0.5000 1.5000 -1.0000 0 0.6667 1.3333 Los sistemas lineales surgen a menudo de la discretización de problemas de frontera de ecuaciones diferenciales lineales, ordinarias o en derivadas parciales. La discretización consiste en sustituir las derivadas por cocientes en diferencias en ciertos puntos del dominio. Así se obtienen sistemas de ecuaciones que se caracterizan por tener un elevado número de incógnitas, al tiempo que en cada ecuación sólo aparecen unas pocas. Las matrices de estos sistemas se denominan matrices dispersas y son de gran importancia en las aplicaciones. 4.1 Ecuación del calor El problema del calor es un ejemplo de obtención de sistemas lineales por discretización de problemas continuos, normalmente formulados en términos de ecuaciones diferenciales o en derivadas parciales, aunque aquí daremos una justificación intuitiva de las ecuaciones planteadas. Consideramos una barra conductora del calor cuyos extremos están a temperatura conocida T a y T b , respectivamente. Queremos hallar la temperatura a lo largo de la barra en estado estacionario. T 0 T 1 .......... T n T n+1 Para resolver numéricamente problemas de este tipo, consideramos un número finito de puntos a lo largo de la barra, por ejemplo, dividimos la longitud en n+1 partes iguales, tomando n puntos equiespaciados llamados nodos, x 1 , x 2 , ..., x n y estimaremos la temperatura de estos puntos, T 1 , T 2 , ..., T n . En el estado estacionario, suponemos que la temperatura en cada nodo es la media de las temperaturas de los nodos adyacentes. Al imponer esta condición a cada nodo obtenemos un sistema de ecuaciones lineales. Los valores de la temperatura en los extremos pasan al segundo miembro constituyendo los términos independientes. Modelo Matemático Matriz Asociada 1 0 2 2 1 3 3 2 4 1 1 2 2 2 2 n n- n+ T (T T )/ T (T T )/ T (T T )/ T (T T )/ = + = + = + = + M La matriz de este sistema tiene unas características especiales que aprovecharemos para su resolución. Se trata de una matriz tridiagonal simétrica; los elementos de la diagonal principal valen 2 y los de las diagonales situadas inmediatamente por encima y por debajo de la diagonal principal –1 2 1 1 2 1 1 2 1 1 2 - - - - - -                 O O O Ejemplo 2 Construimos esta matriz utilizando la orden diag(v) de MATLAB, que sitúa en una diagonal determinada los elementos del vector v. En nuestro caso hacemos: n = 5; v = ones(n-1,1); calor = 2*eye(n) - diag(v,-1) - diag(v,1) calor = 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 El segundo argumento de diag indica en que diagonal hay que colocar los elementos de v. Las diagonales se numeran a partir de la principal, que es la diagonal 0. La 1 esta situada justo encima de la principal y la –1 justo debajo. En general la diagonal k esta formada por los elementos a ij 4.2 Red de calles El flujo de tráfico en una red de calles se modeliza mediante un sistema de ecuaciones lineales. Supongamos una zona de la ciudad formada por calles que se cruzan perpendicularmente en los puntos A, B, ..., F, como se muestra en la figura. Las calles son de sentido único de circulación indicado por las flechas. Denotamos el flujo de tráfico entre los cruces por las variables x i , i = 1, 2, ..., 7. Junto a cada cruce aparece el número de vehículos que entran o salen por hora de la zona estudiada. Tratamos de ver si se puede cortar la circulación de las calles 6 y 7 para realizar obras sin afectar el tráfico ajeno a la zona considerada. Formularemos el problema mediante un sistema de ecuaciones lineales. Suponemos que el tráfico no se acumula en las intersecciones. Entonces, el tráfico que entra en cada cruce debe ser igual al que sale. Ejemplo 3 El tráfico que llega al cruce E es, según el mapa, x 7 + 600. El tráfico que sale es x 4 + x 6 . Así obtenemos x 4 + x 6 = 600 + x 7 , o bien x 4 + x 6 – x 7 = 600. El análisis de cada cruce proporciona el siguiente sistema: 1 3 1 2 4 2 5 3 6 4 6 7 5 7 + = 800 x x - + = 200 x x x - = 500 x x + = 750 x x + - = 600 x x x = -50 x x Es un sistema lineal de 6 ecuaciones, una por cruce, con 7 incógnitas, una por calle. Las hipótesis del modelo sugieren que la suma de los términos independientes ha de ser cero, pues en la zona no se crean ni se almacenan vehículos. Al haber menos ecuaciones que incógnitas, tal vez se puedan añadir condiciones adicionales como el cierre de las calles 6 y 7. La teoría de sistemas lineales responderá estas cuestiones. Comencemos analizando la estructura de la matriz del sistema. 300 200 100 350 600 400 400 450 600 500 x 1 x 2 x 3 x 4 x 6 x 7 x 5 A D B E C F 4.3 Matriz de incidencia Las filas de la matriz corresponden a los cruces y las columnas a las calles que los conectan. En la fila correspondiente a un cruce, aparece un 1 por cada calle que 'sale' de ese cruce y un –1 por cada calle que 'entra' en el mismo. Recíprocamente, en la columna de cada calle, hay un 1 en la posición del cruce donde 'empieza' la calle y un –1 en el lugar del cruce en que 'termina' la calle. En cada columna hay 2 elementos no nulos, por lo que la matriz puede ser muy grande, pero tiene muchos ceros, lo cual debería ser aprovechado para simplificar los cálculos. A(1,1) =1; A(2,1)=–1; A(2,2) =1; A(3,2)=–1; A(1,3) =1; A(4,3)=–1; A(5,4) =1; A(2,4)=–1; A(3,5)=1; A(6,5)=–1; A(5,6)=1; A(4,6)=–1; A(6,7)=1; A(5,7)=–1 Edita también los términos independientes. b=[800;–200;–500;–750;600;50] La matriz construida se denomina matriz de incidencia. La red de calles es un ejemplo de grafo dirigido. Un grafo dirigido está formado por un conjunto de vértices, los cruces, y un conjunto de arcos uniendo determinados pares de vértices. La matriz de incidencia de un grafo dirigido se construye como en el caso de la red de calles, poniendo una fila por vértice del grafo y una columna por arco. En cada columna hay un 1 en la fila del vértice inicial del arco y un 1 en la fila del vértice final. C a l l e 1 2 3 4 5 6 7 C A 1 0 1 0 0 0 0 r B -1 1 0 -1 0 0 0 u C 0 -1 0 0 1 0 0 c D 0 0 -1 0 0 -1 0 e E 0 0 0 1 0 1 -1 F 0 0 0 0 -1 0 1 Ejemplo 4 Editamos la matriz que denominanos A por calles, definiendo los elementos no nulos de cada columna en las filas correspondientes a los cruces. A=[1,0,1,0,0,0,0;-1,1,0,-1,0,0,0;0,-1,0,0,1,0,0;0,0,-1,0,0,-1,0;0,0,0,1,0,1,-1;0,0,0,0,- 1,0,1] A = 1 0 1 0 0 0 0 -1 1 0 -1 0 0 0 0 -1 0 0 1 0 0 0 0 -1 0 0 -1 0 0 0 0 1 0 1 -1 0 0 0 0 -1 0 1 Editamos los términos independientes b=[800 ;-200 ;-500 ;-750 ;600 ;50] b = 800 -200 -500 -750 600 50 calculamos el rango de la matriz A rank(A) ans = 5 y ahora calculamos el valor de la matriz ampliada para ver si el sistema es compatible. rank([A,b]) ans = 5 Como el rango de la matriz A es igual al rango de la matriz ampliada A|b entonces el sistema es compatible 4.4 Red eléctrica R 1 R 3 R 4 R 1 R 2 R 4 R 1 R 2 R 4 R 1 R 2 R 4 V I 4 I 3 I 2 I 1 a b c d Consideremos un circuito eléctrico con sólo resistencias y fuentes de potencial como el de la figura. Suponemos conocidos el voltaje V y los valores de las resistencias R 1 , R 2 , R 3 , R 4 . Determinaremos las intensidades en cada rama del circuito mediante un sistema de ecuaciones lineales que se obtiene aplicando las leyes de Kirchhoff y la ley de Ohm. Ley de los nudos: la suma algebraica de las intensidades que concurren en un nudo es cero. Ley de las mallas: la caída de potencial a lo largo de un camino cerrado del circuito es nula. Estas leyes no dependen de los elementos físicos del circuito, sino sólo de las conexiones entre los mismos. En el caso de resistencias, su influencia queda establecida mediante la Ley de Ohm: La caída de potencial en cada rama es el producto de la intensidad que circula por ella, por su resistencia: V = I·R Aplicamos implícitamente la ley de los nudos al considerar que las intensidades están vinculadas a las mallas, en lugar de a los arcos. De este modo reducimos el número de incógnitas. Así, en la figura, la corriente I 1 circula sobre el circuito cerrado abcd. Como el cable bc es común a dos mallas, la corriente que circula por él es I 1 –I 2 . Aplicando la ley de las mallas a abcd tenemos V ab + V bc + V cd = V La ley de Ohm para el cable que conecta b y c establece que V bc = R 2 (l 1 -l 2 ) donde R 2 es el valor de la resistencia que conecta b con c. Aplicando esta ley al resto de las ramas de la malla y sustituyendo en la ecuación anterior queda R1I1+R2(l1-l2) R4I1 = V. siendo V el voltaje de la fuente. Repitiendo este proceso para cada malla, se obtiene un sistema de ecuaciones lineales cuya solución son las intensidades en cada malla del circuito. Las intensidades en cada rama se obtienen inmediatamente como suma algebraica de las intensidades que circulan por las mallas de las que forma parte. Ejemplo 5 . Resolvamos el siguiente problema del circuito sí V=10V, R 1 = R 3 = R 4 = 1 kΩ y R 2 = 10 kΩ. El sistema de ecuaciones resultante es el siguiente: 1 2 1 2 3 2 3 4 3 4 12I -10I =10; 10I -22I +10I =0; 10I -10I +10I =0; 10I -13I =0; Este sera el sistema A*x=b, donde la matriz es A=[12 -10 0 0;10 -22 10 0;0 10 -10 10;0 0 10 -13] A = 12 -10 0 0 10 -22 10 0 0 10 -10 10 0 0 10 -13 y los términos independientes b= [10 ; 0 ; 0 ; 0] b = 10 0 0 0 luego encontramos los valores de la corriente I I=A\b I = 0.5993 -0.2809 -1.2172 -0.9363 4.5 Matrices Dispersas Los sistemas lineales que aparecen en las aplicaciones suelen tener matriz dispersa, es decir, matriz con relativamente pocos elementos no nulos. Estas matrices son además de gran tamaño, por lo que almacenarlas y tratarlas como matrices normales (llenas, en oposición a dispersas) supone un despilfarro innecesario. Por ello, MATLAB dispone de funciones específicas para estas matrices. La función sparse declara dispersa la matriz A. Así, sólo se almacenan y se opera con sus elementos no nulos. Por ejemplo, la propia matriz identidad es dispersa, con n elementos no nulos sobre un total de n 2 elementos. En contraste con eye(n) que es la identidad de orden n considerada como matriz llena, n=3,A=speye(n) define la misma matriz, pero MATLAB la trata como matriz dispersa la orden . full(A) convierte en llena una matriz declarada previamente dispersa. Al listar una matriz dispersa obtenemos una serie de filas con un par que indica la posición de un elemento no nulo seguido del valor de este elemento. La función spy(A) muestra gráficamente las posiciones no nulas de la matriz A. Ejemplo 4 Dada la matriz del calor del Ejemplo 2 veremos algunas de las funciones de MATLAB. n = 5; v = ones(n-1,1); A = 2*eye(n) - diag(v,-1) - diag(v,1) A = 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 A=matcalor(10) % Matriz ecuación del calor A = 2 -1 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 -1 2 a=sparse(A) % La convierto en dispersa a = (1,1) 2 (2,1) -1 (1,2) -1 (2,2) 2 (3,2) -1 (2,3) -1 (3,3) 2 (4,3) -1 (3,4) -1 (4,4) 2 (5,4) -1 (4,5) -1 (5,5) 2 full(a) % Vuelve a ser llena ans = 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 issparse(A) % Para saber si es dispersa ans = 0 issparse(a) ans = 1 spy(A) % Gráfico elementos no nulos spy(a) % Lo mismo [i,j,v]=find(A) % Fila, columna y valor de % los elementos no nulos de A sparse(i,j,v) % Lo mismo que sparse(A). Ahora daremos algunos ejemplos: 1. Sea E la matriz de orden n E = 1 n+ 1 C ; c ij = j,i i(n- i+1) si i = j si i < j ( 1) si i > j c i n j      − + a) Genera la matriz E con un fichero.m. [E,C]=matrix(5) b) Sea b el vector b = [1:n]'. Resuelve el sistema Ex = b b=[1 2 3 4 5]' x=E\b 2. Sea H(n)=hilb(n), la matriz de Hilbert de orden n. Halla la inversa de H(n) t H(n) para los valores de n=5, 10 ,15 de dos modos diferentes: a) Directamente b) Observando que (H t H) -1 = H -1 (H -1 ) -1 c) Compara con la solución exacta que es invhilb(n)*(invhilb(n))'. Solución: n=5 H=hilb(n) H' X=H.'*H inv(X) invhilb(n)*(invhilb(n))' Analogamente hacemos lo mismo para n=10, 15. Problemas 1. La segunda derivada de una función u(x) se puede aproximar por la fórmula u''(x) ≈ h 2u(x) - h) - u(x + h) + u(x 2 para h pequeño. Considera el siguiente problema de frontera definido en x∈[0,1]. -u''(x) = 4π 2 sen(2πx) u(0) = 0 u(1) = 0 a) Tomando h = 0.1, u i = u(0.1*i), i = 0, 1, ..., 10 y aproximando la segunda derivada de u, obtén un sistema de ecuaciones 9×9 cuya solución aproxime la solución exacta del problema. b) Resuelve el sistema anterior considerando las matrices como llenas y dispersas. Compara los resultados y el número de operaciones efectuadas. c) Compara la solución con la solución exacta que es u(x) = sen(2πx). 2. Sea A la siguiente matriz de orden n: a b 0 ___ 0 0 b a b ___ 0 0 0 b a ___ 0 0 _ _ _ ___ _ _ 0 0 0 ___ a b 0 0 0 ___ b a                     Se puede probar que (I-A) -1 = I + A + A 2 + ⋅⋅⋅ + A k + ⋅⋅⋅, converge si a+2b<1. Experimenta la fórmula descrita para varios valores de n, a y b. 3. Resuelve Ax = c siendo A la matriz del ejercicio 5, con a = b = 1/4 y c el vector formado por 1s, para los valores n = 20, 30, 40, 50. Considera las matrices como dispersas y como llenas, compara los resultados y el número de operaciones. 4. Escribe en MATLAB un fichero.m que permita encontrar la inversa de una matriz usando el método de Gauss-Jordan. 5. Considera la base en P 10 B={1, 1+x, 1+x+x 2 , ⋅⋅⋅ , 1+x+⋅⋅⋅+x 10 } y sean los vectores x 5 - 6x 3 +2, x 10 -x 6 +x 2 +1, x 9 -1. a) Halla las coordenadas de estos vectores en la base B resolviendo 3 sistemas de ecuaciones lineales. b) Considera las matrices como dispersas y repite el apartado a). c) Resuelve el apartado a) con la factorización LU (Observa que se trata de resolver 3 sistemas de ecuaciones simultáneamente). d) Repite el apartado c) considerando las matrices como dispersas. e) Compara el número de operaciones efectuadas. 5 Aplicaciones de los sistemas lineales (II) Vamos a seguir mostrando en este tema diversas aplicaciones de los sistemas de ecuaciones lineales tales como la distribución de temperatura en una placa, el problema de interpolación numérica que da lugar a un sistema con matriz asociada la matriz de Van der Monde y un caso de integración numérica que se resuelve mediante un sistema lineal con la matriz de Hilbert como matriz asociada. Analizaremos también el grado de precisión que se tiene al resolver resolver un sistema por un método directo ya que al trabajar en precisión finita, los errores de redondeo se van acumulando de un paso a otro. Aunque el error de cada operación es pequeño, como el número de operaciones puede ser muy grande (del orden de n 3 , siendo n el tamaño del sistema), al final, el resultado puede verse muy afectado. Aunque las operaciones se realicen en modo exacto, puede que los coeficientes del sistema sean imprecisos, por ejemplo si se han obtenido de medidas experimentales. Es importante conocer de qué modo afecta la incertidumbre de los datos al resultado final. Para controlar este crecimiento se aplica la estrategia de pivotación parcial, evitando tomar pivotes muy pequeños durante la eliminación. Veremos que hay sistemas que amplifican el error durante la eliminación, los sistemas mal condicionados, mientras que otros lo mantienen dentro de ciertos límites, los bien condicionados. En todo caso, es de vital importancia para controlar el error, seguir alguna estrategia al elegir los pivotes de la eliminación, pues un pivote pequeño provoca un aumento del error. La pivotación parcial consiste en elegir como pivote el elemento de mayor valor absoluto en la columna a eliminar. Dado que a veces hay que buscar un pivote no nulo, no cuesta mucho más buscarlo siempre con la condición de tener valor absoluto máximo, y con ello se minimiza el error de la eliminación. 5.1 La ecuación del calor en una placa El problema de la distribución de temperatura en una placa, es "continuo" en el sentido de que queremos conocer la temperatura en todos los (infinitos) puntos de su superficie. Este objetivo sólo es alcanzable si somos capaces de obtener una solución analítica, lo cual no es frecuente en las aplicaciones. En cambio, si nos conformamos con conocer la temperatura en un número finito de puntos de la placa, podemos obtener por medios algebraicos sencillos una solución aproximada. Consideramos pues (n+2)·(m+2) puntos regularmente distribuidos en la placa, en los nodos de una malla de celdas cuadradas. Suponemos que en el estado estacionario, la temperatura en cada nodo es la media las temperaturas en los cuatro nodos adyacentes. Suponemos además, para que el problema esté determinado, que la temperatura de los nodos de los bordes de la placa es conocida. Planteando estas condiciones para cada nodo del interior de la placa, se obtiene un sistema de n·m ecuaciones lineales con n·m incógnitas. Numeramos los nodos por columnas, como indica el esquema adjunto, lo que establece una ordenación de las ecuaciones e incógnitas del sistema. Con esta ordenación, el nodo k está relacionado con los nodos k–1 y k+1 de su columna, y con los nodos k–n y k+n de su fila. La ecuación correspondiente al nodo k se puede poner como: –T k–n – T k–1 + 4T k – T k+1 – T k+n = 0 En cada ecuación aparecen a lo sumo cinco coeficientes no nulos. Los nodos del borde tienen alrededor tres nodos incógnita y uno conocido, cuyo valor pasa al término independiente. Los nodos de las esquinas tienen dos vecinos incógnitos y dos conocidos. La matriz del sistema es dispersa con elementos no nulos agrupados en cinco diagonales: la principal, las dos adyacentes y las dos situadas a distancia n de la principal, que corresponden en la malla a las columnas anterior y siguiente al nodo k. Los elementos de la diagonal principal valen 4, y los de las otras diagonales no nulas, –1, excepto algunos ceros correspondientes a los nodos de los bordes superior e inferior de la malla (k = n, n+1, 2n, 2n+1). Para n = m = 3 si suponemos que en los bordes superior e inferior la temperatura es de 50 ºC, en el lado izquierdo 0 ºC y en el derecho 100 ºC la situación es la siguiente: 50 50 50 100 0 100 0 100 0 50 50 50 9 6 3 8 5 2 7 4 1 T T T T T T T T T y el sistema de ecuaciones tiene la forma: 1 n+1 2n+1 … … (m-1)n+1 2 n+2 2n+2 … … (m-1)n+2 3 n+3 2n+3 … ... (m-1)n+3 : : : ·. ·. : n 2n 3n ... (m-1)n nm | | | | | | | | | | | | | . | \ | = | | | | | | | | | | | | | . | \ | | | | | | | | | | | | | | . | \ | − − − − − − − − − − − − − − − − − − − − − − − 150 100 150 50 0 50 50 0 50 4 4 4 4 4 4 4 4 4 9 8 7 6 5 4 3 2 1 9 8 6 9 8 5 8 7 4 9 6 5 3 8 6 5 4 2 7 5 4 1 6 3 2 5 3 2 1 4 2 1 T T T T T T T T T u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u u En MATLAB construimos la matriz por diagonales mediante un fichero.m Programa para generar la matriz (calor2D) Entrada: n,m dimensiones de la matriz. Salida: A matriz del sistema. Proceso: % cálculo de las diagonales 1 y –1. p = n*m; v = ones(1,p-1); for k = n:n:p-n, v(k) = 0; end % cálculo de las diagonales n y –n. w = ones(1,p-n); % Matriz del sistema A = 4*eye(p)- diag(v,1) - diag(v,-1)- diag(w,n) - diag(w,-n); Ejemplo 1 Comprueba la estructura de la matriz del sistema en el caso de tomar 9 puntos en la placa. Solución: basta ejecutar la función anterior, A = calor2D(3,3) . Como hemos dicho la temperatura en los bordes de la placa es conocida, supongamos que los lados de la placa se mantienen a 0 ºC, salvo el inferior que se calienta a 100 ºC. Como los nodos vecinos al lado inferior ocupan los lugares n, 2n, …, calculamos los términos independientes b del modo siguiente: b = zeros(n*m,1) b(n:n:n*m) = 100*ones(m,1) Ejemplo 2 a) Halla la temperatura final en estado estacionario tomando 30 puntos en el interior de la placa, visualiza la estructura de la matriz del sistema. b) Representa gráficamente los resultados. c) Calcula el número de operaciones realizado obteniendo el ahorro que supone trabajar con matrices dispersas. Solución: a) resolvemos un sistema de matriz A y término independiente b que incluye la condición de frontera dada. n = 5; m = 6; A = calor2D(n,m); b = zeros(n*m,1);b(n:n:n*m) = 100*ones(m,1) ; Visualizamos la estructura de la matriz con spy(A) Resolvemos el sistema y hallamos el coste: flops(0), x = A\b, flops Reordenamos la columna de resultados en filas y columnas según la disposición rectangular de la malla inicial: placa = reshape(x,n,m) 3.6120 6.3802 7.8437 7.8437 6.3802 3.6120 8.0679 14.0649 17.1510 17.1510 14.0649 8.0679 14.5947 24.6606 29.5443 29.5443 24.6606 14.5947 25.6503 40.4385 46.8213 46.8213 40.4385 25.6503 47.5681 64.6219 70.4811 70.4811 64.6219 47.5681 b) Representamos gráficamente los resultados con surfl(placa) 0 5 10 15 20 25 30 0 5 10 15 20 25 30 nz = 128 1 2 3 4 5 6 1 2 3 4 5 0 20 40 60 80 c) El coste se reduce operando con matrices dispersas: sA = sparse(A); sb = sparse(b); flops(0), sx = sA\sb, flops Obtenemos el mismo resultado a un coste diez veces menor. Observa que el resultado no es disperso. Para obtener la gráfica hay que ponerlo primero en forma normal: x = full(sx) surfl(reshape(x,n,m)) 5.2 Condicionamiento de una matriz Hay sistemas en los que un pequeño cambio en los coeficientes provoca un gran cambio en la solución. Estos sistemas se llaman mal condicionados . Por ejemplo, el sistema 0.0001 1.0001 2 x y x y + = ¹ ` + = ) tiene solución exacta x = y = 1. Si cambio el término independiente de la segunda ecuación a 2.0002, 2 1.0001 2.0002 x y x y + = ¹ ` + = ) la solución cambia a x = 0, y = 2. Cambiando el coeficiente de x en la segunda ecuación a 1.0001, el primer sistema resulta incompatible y el segundo indeterminado. Esto indica que el sistema es muy sensible a los errores de redondeo y su solución poco fiable. Si representamos gráficamente las ecuaciones del sistema, obtenemos dos rectas que se cortan formado un ángulo muy pequeño. El punto de intersección cambia mucho al mover poco una de las rectas. En cambio, el sistema 2 1.0001 2.0001 x y x y + = ¹ ` + = ) está bien condicionado, pues la solución es poco sensible a los errores de los datos. En la representación gráfica vemos dos rectas cuya intersección está claramente situada. Nota: para realizar todos los ejemplos y ejercicios de este apartado te puedes ahorrar introducir las matrices cargándolas de la carpeta practica04 con la instrucción load. load E:\asig\1\matemati\laborato.rio\practica.04\practi04 who 0 0.5 1 1. 5 2 0 1 2 0 0. 5 1 1.5 2 0 1 2 Para sistemas de más de dos ecuaciones no es fácil analizar gráficamente su condicionamiento. Algorítmicamente, el mal condicionamiento se puede observar por el pequeño tamaño de los pivotes. MATLAB dispone de medidas numéricas del condicionamiento. Las funciones de MATLAB cond y rcond miden la sensibilidad al error al invertir una matriz o resolver un sistema con dicha matriz. La función cond toma valores de 1 a infinito. Cuanto mayor es cond, peor es el comportamiento de la matriz. Inversamente, la función rcond toma valores de 0 a 1, correspondiendo los próximos a cero a matrices mal condicionadas y los valores próximos a 1, a matrices bien condicionadas. Ejemplo 3 Resuelve el siguiente sistema de ecuaciones lineales y compara la solución con la que resulta al variar ligeramente a 22 a 4.2750, obtén el numero de condición de la matriz inicial para establecer conclusiones al respecto. 1 2 3 1 2 3 1 2 3 3.0210 x 2.7140 x 6.9130 x 12.6480 1.0310 x - 4.2730 x 1.1210 x -2.1210 5.0840 x -5.8320 x 9.1550 x 8.4070 + + = ¹ ¦ + = ` ¦ + = ) Solución: Llama A a la matriz del sistema A=malcon1 y b al vector de términos independientes b=ti1 ejecuta en Matlab X=A\b y se tiene la solución exacta x = y = z = 1, para obtener el sistema 1 2 3 1 2 3 1 2 3 3.0210 x 2.7140 x 6.9130 x 12.6480 1.0310 x - 4.2750 x 1.1210 x -2.1210 5.0840 x -5.8320 x 9.1550 x 8.4070 + + = ¹ ¦ + = ` ¦ + = ) sólo tienes que hacer A(2,2)=-4.2750 ya que el resto de elementos son iguales, buscamos de nuevo la orden X=A\b y observaras que se tienen soluciones muy distintas. Para conocer la fiabilidad de la solución, hallamos la condición de la matriz del sistema: cond(A) y vemos que es muy elevada, como era de esperar. La solución, por tanto no es muy fiable, si quieres probar con rcond obtendrás un valor muy pequeño ya que se trata de una matriz casi singular. Podemos decir que rcond mide lo cerca que está una matriz de ser singular. El criterio teórico de singularidad, la anulación del determinante, no es válido para estudiar la casi singularidad, pues, entre otras cosas depende de la escala. En efecto, aunque en general una matriz casi singular tendrá determinante pequeño, el recíproco no es cierto, como puedes comprobar con el siguiente ejercicio. Ejemplo 4 Considera el siguiente sistema de 10 ecuaciones con 10 incógnitas 0.1 x i = 1 i=1, ..., 10. Comprueba que aunque el determinante de la matriz es muy pequeño el sistema está bien condicionado. Solución: La matriz de los coeficientes es 10x10 con todos los elementos nulos excepto la diagonal principal que son 0.1 por lo que su determinante es 10 -10 , se trata de una matriz casi singular pero muy bien condicionada ya que su número de condición es 1. M=0.1*eye(10), d=det(M), c=cond(M) El mal condicionamiento de un sistema es difícil, si no imposible de resolver, pero hay que tener cuidado para no arruinar un sistema bien condicionado aplicándole un algoritmo de eliminación deficiente. Por ejemplo, hemos visto que el sistema 0.0001 1.0001 2 x y x y + = ¹ ` + = ) está bien condicionado. Sin embargo, si elimino normalmente x en la segunda ecuación, obtengo un sistema casi singular. 0.0001 1.0001 9999 9999 x y y + = ¹ ` − = − ) El empeoramiento es debido a que el pivote utilizado, a 11 , que es diez mil veces menor que el coeficiente a eliminar, a 21 . El remedio obvio será intercambiar las dos ecuaciones antes de eliminar. Al tomar 1 como pivote, queda el sistema 2 0.9999 0.9999 x y y + = ¹ ` = ) que sigue siendo bien condicionado. La función A\b que usamos para resolver sistemas con MATLAB aplica pivotación parcial. En el caso de sistemas incompatibles, obtiene la solución más aproximada en sentido mínimo cuadrático. Ejemplo 5 Piensa en un sistema de ecuaciones incompatible que no sea cuadrado e intenta resolverlo con MATLAB. ¿Qué ocurre?. Solución: Es muy fácil obtener un sistema incompatible basta pensar por ejemplo en dos planos paralelos: 2x – y + z = 4 2x – y + z = 1 El sistema no tiene solución pues mientras la matriz del sistema es de rango 1 la ampliada es de rango 2, sin embargo al hacer x=A\b se obtiene solución al problema, aunque MATLAB muestra una advertencia. Prueba ahora con la resolución de un sistema formado por dos rectas paralelas y otra secante a ellas, se trata también de un sistema incompatible en el que MATLAB nos da la solución sin mostrar en este caso ninguna advertencia. Lo que esta ocurriendo es que cuando el sistema es incompatible se nos da la solución “menos mala” como veremos en el tema 10. 5.3 Interpolación polinómica. Matriz de van der Monde En general, la interpolación polinómica, consiste en determinar un polinomio de grado n que pase por n+1 puntos dados. Se eligen los polinomios porque son fáciles de evaluar y por el hecho fundamental de que por n+1 puntos de abscisa distinta, (x 1 , y 1 ),..., (x n , y n ), (x n+1 , y n+1 ), pasa un único polinomio P n (x) de grado no superior a n. En la interpolación lineal, la función se sustituye por la recta que pasa por dos puntos. Tres datos se interpolan con un polinomio de segundo grado, gráficamente una parábola que pasa por esos tres puntos; es la llamada interpolación cuadrática. Ejemplo 6 : Para hallar el polinomio de grado 3 p(x) =a 1 x 3 + a 2 x 2 + a 3 x + a 4 que pasa por los puntos (1,0), (2,1), (3,0) y (4,1), sustituimos (x, p(x)) por los pares dados, obteniendo un sistema de ecuaciones lineales 1 2 3 4 1 1 1 1 0 8 4 2 1 1 27 9 3 1 0 64 16 4 1 1 a a a a | | | | | | | | | | | | = | | | | | | \ . \ . \ . V p = y donde p denota la columna de las incógnitas, a 1 ,..., a 4 ; y es la columna de ordenadas de los puntos dados y V es la matriz del sistema. Decimos que V es la matriz de van der Monde asociada al vector de abscisas, x. Ejecuta en MATLAB x = [1 2 3 4], V = vander(x) La solución del sistema se obtiene con y = [1;0;1;0], p = V\y Analicemos la estabilidad del sistema: cond(V) % da 1.1710e+003 el mal condicionamiento nos llevará como veremos en el capítulo 10 a buscar distintas expresiones para los polinomios de interpolación. xx=linspace(x(1),x(length(x))); yy=polyval(p,xx); plot(x,y,'*', xx, yy) title('Polinomio de interpolación') 1 1.5 2 2.5 3 3.5 4 -0.2 0 0.2 0.4 0.6 0.8 1 1.2 Polinomio de interpolación Ejemplo 7 Dado un vector v=(v 1 ,v 2 , ..., v n ) la matriz de Van der Monde de orden n puede definirse formalmente del siguiente modo: V n = | | | | | | | | . | \ | − − − 1 2 1 2 2 2 2 1 1 2 1 1 . . 1 . . . . . . . . . 1 . . 1 n n n n n n v v v v v v v v v a) Edita una función en MATLAB para generarla. ( Sin utilizar la orden vander ). b) ¿Cómo la obtendrías en MATLAB a partir de la instrucción Vander? c) Comprueba los apartados a) y b) para v=(1,2,3,4). Observa que la matriz de Van der Monde es otro ejemplo de mal condicionamiento. d) Fácilmente se comprueba que el det(V n )= ∏ < − j i i j v v ) ( , realiza una función en MATLAB que calcule el determinante a partir de esta expresión y comprueba que obtienes el mismo resultado que directamente en MATLAB con det(V n ). Solución: a) function V=mivander(v) for i=1:length(v) V(:,i)=v.^(i-1)'; end b) Con V=vander (v) se obtiene la matriz volteada basta pues hacer V=fliplr(V). c)v=1:4;,V1=mivander(v),V2=vander(v), V2=fliplr(vander(v)),C=cond(V1) V1 = 1 1 1 1 1 2 4 8 1 3 9 27 1 4 16 64 V2 = 1 1 1 1 1 2 4 8 1 3 9 27 1 4 16 64 ans = 1.1710e+003 d) function d=detvander(v) % nota que el parámetro de entrada es el vector v %a partir del que se genera la matriz de Van der Monde. d=1; for j=1:n-1 for i=j+1:n d=d*(v(i)-v(j)); end end det(V1), detvander(v) 5.4 Integración numérica. Matriz de Hilbert Imagina ahora que queremos determinar los coeficientes del polinomio p(x) de modo que cumplan 1 1 0 0 ( ) ( ) , 0, 1, 2, 3 k k x p x dx x f x dx k = = ∫ ∫ siendo f(x) una función dada. Imponiendo las condiciones obtenemos otro sistema lineal cuya matriz asociada es: | | | | | . | \ | 7 / 1 6 / 1 5 / 1 4 / 1 6 / 1 5 / 1 4 / 1 3 / 1 5 / 1 4 / 1 3 / 1 2 / 1 4 / 1 3 / 1 2 / 1 1 denominada matriz de Hilbert y se obtiene en MATLAB con hilb(4), esta matriz es un caso clásico de mal condicionamiento. Eemplo 8 La matriz de Hilbert de orden n puede definirse formalmente del siguiente modo: H n = H(i,j)= 1 , 1,..., . 1 i j n i j = + − e) Edita una función en MATLAB para generarla. f) Escribe la matriz de Hilbert de orden 9, H 9 . ¿Cuál es su número de condición? g) Resuelve H 9 x =[1,1,1,1,1,1,1,1,1] T . Luego incrementa la primera componente del lado derecho en un 1%. ¿qué componente del vector solución cambia más? Solución: a) Teniendo en cuenta que la matriz de Hilbert es simétrica evitamos recorrer todos los elementos: Con formato function H=mihilb(n) for i=1:n for j=i:n H(i,j)=1/(i+j-1); H(j,i)=H(i,j); end end b) format rat, H=mihilb(9), cond(H) c) b= ones(9,1); x=H\b, b(1)=1.01; xn= H\b , observamos que la solución varía mucho. Ello es debido al mal condicionamiento de la matriz de hilbert. Calculando abs(x-xn) obtenemos que la componente x 7 es la que más se altera. 6 Problemas 1.- En el ejemplo de la distribución de temperaturas en una placa hemos supuesto que la temperatura de los nodos de los bordes de la placa es conocida. Vamos a estudiar el caso más general generando una función que obtenga los términos independientes según las condiciones de contorno en los cuatro lados. Halla las temperaturas de la placa para n=5 y m=6 en el caso de que la temperatura en los bordes superior e inferior sea de 50 ºC, en el lateral derecho 100 ºC y en el izquierdo 0ºC. 2.- Los métodos que vimos en el tema 4 para resolver sistemas de ecuaciones lineales se llaman directos. Existe otra alternativa para hallar la solución del sistema, son los llamados métodos iterativos, vamos a ver en que consisten: Dado el sistema 1 2 3 1 2 3 1 2 3 5 2 1 3 2 2 4 1 x x x x x x x x x − − = − − = − − + = basta despejar de la primera ecuación x 1 , de la segunda x 2 y de la tercera x 3 , con ello tendríamos: x 1 = ( ) 3 2 3 2 1 5 1 x x − + x 2 = ( ) 3 1 2 3 1 x x + − − − x 3 = ( ) 2 1 2 1 4 1 x x + − tomamos ahora una estimación inicial para x 1 , x 2 y x 3 , por ejemplo (0,0,0), sustituimos estos valores en las expresiones anteriores y obtenemos los nuevos valores de nuestras incógnitas: x 1 = 5 1 , x 2 = 3 2 , x 3 = 4 1 Repetimos este proceso las veces que consideremos oportuno y vamos obteniendo distintos valores de las incógnitas, cuando veamos que la diferencia entre una terna de valores y la siguiente es muy pequeña pararemos, y diremos que hemos llegado a la solución aproximada del sistema por el método de Jacobi. Realiza los cálculos en MATLAB. 3.- a)La matriz de Hilbert es bien conocida por estar mal condicionada. Si la matriz de Hilbert de orden n tiene la solución [1,1, ..., 1] , ¿cuál debe ser el vector de términos independientes?. b)Resuelve el sistema del apartado a) para valores crecientes de n. Registra la magnitud del mayor error como una función de n. ¿El elemento del vector solución que tiene el mayor error es siempre el mismo?. 4.- Utiliza el comando spdiags para definir directamente como matriz dispersa la matriz del problema del calor en un rectángulo con las condiciones dadas en el problema resuelto 1, estudia el ahorro que ello supone en el número de operaciones. 5.- En el problema resuelto 2 se puede hacer una mejora, consiste en que una vez has obtenido x1n el nuevo valor de x1, puede utilizarse utilizarlo para calcular x2n en la misma iteración, y a su vez utiliza x1n y x2n para obtener x3n, este nuevo método iterativo es el de Gauss-Seidel. Escribe las fórmulas para realizar nuevas iteraciones con este método aplicadas al mismo ejemplo y comprueba que se llega a la solución con menos iteraciones. 6.- Por un tubo de secciones interior y exterior cuadradas circula un líquido a temperatura de 200º C. El tubo está parcialmente sumergido en hielo, de manera que la mitad inferior del exterior del tubo está a una temperatura de 0º C. La superficie superior del tubo se mantiene a 100º C. Se supone que la temperatura en los laterales varía linealmente entre los 0º de la parte superior de hielo y los 100º de la cara superior. La sección interior mide 4 cm. de lado y la exterior 10 cm. Estudiar la distribución de la temperatura en una sección transversal del tubo. Utiliza una malla con nudos cada 10 cm. 7.- Sea H(n) = hilb(n), la matriz de Hilbert de orden n. Halla la inversa de H(n) t H(n) para los valores de n = 5, 10, 15 de dos modos diferentes: a) Directamente. b) Observando que (A t A) -1 = A -1 (A -1 ) t . c) Compara con la solución exacta que es invhilb(n)*(invhilb(n))'. (La matriz invhilb(n) proporciona la inversa exacta de la matriz de Hilbert). Comprueba el número de operaciones efectuadas en los apartados a) y b). Calcula el número de condición de A t A, siendo A la matriz de Hilbert de orden n, n = 5, 10, 15, 20, 25, 30. Describe la relación con el ejercicio 3. 8.- Sea J(n,λ) la matriz cuadrada de orden n con λ en la diagonal principal y 1s en la diagonal por encima de la diagonal principal. (A dichas matrices se les llama bloques de Jordan). a) Edita una función cuyas entradas sean n y λ y la salida sea J(n,λ). Sean las matrices por bloques A = J O O J (5, ) (5, ) 5 1 | \ | . | y B = J O O J (5, ) (5, ) 3 2 | \ | . | . Sea X la matriz (única) tal que AX = B b) Halla X mediante A -1 B. Cuenta el número de operaciones. c) Sean U, V, W, Z cuatro matrices de orden 5 de modo que X = U V W Z | \ | . | . Escribe las ecuaciones que verifican U, V, W y Z. Halla estas matrices contando el número total de operaciones necesarias. d) Si A i es el vector i-ésimo columna de A, B i es el vector i-ésimo columna de B, X i es el vector i-ésimo columna de X, entonces AX i =B i . Halla X i utilizando \. Cuenta el número de operaciones. e) Halla los vectores columna de U, V, W, Z resolviendo los sistemas correspondientes. 9.- Discretiza el problema de frontera | | 1 , 0 2 sen d d 2 2 ∈ = x , x) ( x u u(0) = 0 u(1) = 1 sustituyendo la derivada por el cociente de diferencias centrales 2 1 1 2 2 ) ( ) ( 2 ) ( ) ( d d h x u x u x u x x u i i i i + − + − ≅ Toma h = 0.05 . Resuelve la ecuación en derivadas parciales ∂ ∂ ∂ ∂ 2 2 2 2 0 u x u y + = , x∈[0,1] , y∈[0,1] u(x, 0) = u(x,1) = 0 u(0,y) = u(1,y) = y(1-y) por discretización con h = 0.1. 7 Soluciones 1.- function b=tin(n,m,ts,ti,td,tiz) % n*m nodos distribuidos en n filas y m columnas %ts temperatura en el borde superior %ti temperatura en el borde inferior %td temperatura en el lado derecho %temperatura en el lado izquierdo %En las cuatro esquinas entra calor por dos lados,hemos de sumar las temperaturas b(1)=tiz+ts; b(n)=tiz+ti; b((m-1)*n+1)=ts+td; b(n*m)=td+ti; % temperatura en el lado izquierdo b(2:n-1)=tiz; % temperatura en el borde inferior b(2*n:n:(m-1)*n)=ti; % temperatura en el borde superior b(n+1:n:(m-2)*n+1)=ts; % temperatura en el borde derecho b((m-1)*n+2:n*m-1)=td; b=b'; n = 5; m = 6; A = calor2D(n,m); xn=A\b; placan = reshape(xn,n,m) placan = 27.4495 39.7386 46.9957 53.0043 60.2614 72.5505 20.0595 34.5091 45.2401 54.7599 65.4909 79.9405 18.2793 32.9983 44.6957 55.3043 67.0017 81.7207 20.0595 34.5091 45.2401 54.7599 65.4909 79.9405 27.4495 39.7386 46.9957 53.0043 60.2614 72.5505 surfl(placan) Podemos observar las diferencias de la distribución de temperaturas con los resultados obtenidos en el ejemplo 1, donde se veía que la placa recibía calor por el borde inferior y se iba calentando hacia arriba. 2.- Inicialmente tomamos x1=0, x2=0,x3=0 y ponemos iter =0 , para contar el número de iteraciones. Calculamos los nuevos valores de las incógnitas con las expresiones: x1n=1/5*(1+2*x2-3*x3), x2n=-1/3*(-2-x1+x3), x3n=1/4*(1-2*x1+x2) hacemos iter=iter+1 para contar el número de iteraciones. Actualizamos los valores de las incógnitas: x1=x1n; x2=x2n;x3=x3n; y repetimos el proceso calculando una nueva iteración. Basta que ejecutes estas tres instrucciones las veces que consideres conveniente, quizá hasta que obtengas una solución similar a la que te proporciona el comando \. Este es llamado método iterativo de Jacobi. 3 Los términos independientes serán | | ' 1,1,...,1 n H b ∗ = con 1 1 1 ( ) ... 1 ( 1) b i i i n i = + + + + + − i=1,..,n. mejor todo con fórmulas a) Crearemos una función .m que resuelva estos sistemas y devuelva la posición de la componente donde se alcanza el error máximo, observa que el elemento de la solución que tiene mayor error va cambiando. function pos=er3t5(n) %problema resuelto 3 for i=2:n H=hilb(i); %matriz del sistema for j=1:i b(j)=sum(H(j,:)); % términos independientes end x=H\b'; %solución del sistema, observa que no siempre es la esperada [1,1,..,1] %observa la advertencia sobre le mal condicionamiento de la matriz [e,pos(i)]=max(abs(x-ones(size(x)))); %error máximo y posición que este ocupa end 6 Valores y vectores propios Los problemas de valores y vectores propios surgen en diversas ramas de la ciencia, tales como aplicaciones de ingeniería que estudian las vibraciones en determinados sistemas mecánicos o circuitos eléctricos, procesos estadísticos representados mediante cadenas de Markov, problemas clásicos de geometría como la clasificación de cónicas y cuádricas, en el estudio de la ley de gravitación y movimiento de los planetas. Desde el punto de vista teórico,los problemas de valores y vectores propios, constituyen la técnica usual de análisis y resolución de ecuaciones en diferencias y de ecuaciones diferenciales lineales. El objetivo de este tema es el cálculo aproximado de valores y vectores propios de una matriz. Los métodos teóricos no suelen ser aplicables a ejemplos reales, por lo que , los métodos numéricos se hacen imprescindibles, como en muchos otros campos de las matemáticas. En este sentido, el método de las potencias, que analizamos aquí, es un método elemental que permite obtener valores y vectores propios con gran precisión. 6.1 Conceptos básicos: Los vectores sobre los que una matriz actúa de forma especialmente sencilla se llaman vectores propios. Un vector propio de una matriz se transforma en un múltiplo escalar de sí mismo al multiplicarse por la matriz. El factor de escala se denomina valor propio. Si conocemos una base formada por vectores propios de la matriz, podemos describir su acción sobre cualquier vector del espacio de forma relativamente sencilla. Formalicemos primero estos conceptos. Si A es una matriz nxn diremos que un vector no nulo v es un vector propio asociado al valor propio λ si verifica: Av = λv que podemos escribir como (A- λ I) v = 0 de modo que para hallar los valores y vectores propios hemos obtener soluciones no nulas de un sistema homogéneo de ecuaciones lineales con un parámetro indeterminado λ . Para que un sistema homogéneo tenga solución distinta de la trivial, su matriz debe ser singular (no invertible), por lo que se debe verificar det((A- λ I) =0 El primer miembro de esta ecuación puede escribirse como un polinomio en la indeterminada λ, llamado polinomio característico de la matriz A p(x)= det(A-xI) y la ecuación p(x) = 0 es la llamada ecuación característica. Por lo tanto hallar los valores propios de la matriz A equivale a resolver su ecuación característica, o sea, a hallar las raíces del polinomio característico. Si alguna raíz λ tiene multiplicidad k, se dirá también que es un valor propio con multiplicidad k. Ejemplo 1 Halla los valores y vectores propios para la siguiente matriz diagonal. 2 0 0 3 A   =   −   La ecuación característica de este sencillo caso será: (2 )( 3 ) 0 λ λ − − − = con lo que los valores propios son claramente los elementos de la diagonal. Para calcular los vectores propios resolveremos el sistema: 1 1 2 2 0 0 0 ( 2 ) 0; ; ( , ) ( , 0), 0 5 0 v A I v v v v α α       − = = = ∈       −       R Análogamente el otro vector propio será cualquier múltiplo del vector de la base canónica 2 (0,1) e = . Las matrices que admiten una base de vectores propios se denominan matrices diagonalizables. Ejemplo 2 La matriz         = 1 0 1 1 A tiene un valor propio , 1 = λ que es raíz doble de la ecuación característica, . 0 ) 1 ( 2 = λ − Los únicos vectores propios son de la forma , ), 0 , ( R ∈ α α por lo que no hay una base de vectores propios. La matriz A no es diagonalizable. Los siguientes resultados de álgebra concernientes a valores y vectores propios nos van a ser muy útiles: Teorema Si una Matriz A nxn tiene n valores propios distintos, entonces es diagonalizable, o sea admite una base de vectores propios. La matriz S cuyas columnas son tales vectores, es invertible y verifica A = S D S −1 , siendo D la matriz diagonal con los valores propios de A en la diagonal. Ejemplo 3 Una máquina se inspecciona cada día para comprobar si está funcionando (F), estropeada (E) o está siendo reparada (R). Cuando está funcionando, hay una probabilidad del 70% de que al día siguiente siga funcionando, del 20% de que esté estropeada y 10% de que esté siendo reparada. Las reparaciones son laboriosas de manera que, si está estropeada, al día siguiente está en reparación en el 80% de los casos y sólo en un 20% está en funcionamiento. Si la máquina se encuentra en reparación, al día siguiente sigue estándolo en el 90 % de los casos, mientras que en el 10% está ya en funcionamiento. Vamos a modelizar el problema de forma que se pueda predecir el estado de la máquina en un futuro. La máquina puede estar F funcionando, R en reparación y E estropeada. Las probabilidades de pasar de un estado a otro vienen dadas por: Estado actual F E R F 0.7 0.2 0.1 E 0.2 0 0 Estado futuro R 0.1 0.8 0.9 y la matriz de transición de estados de un día al siguiente es:           = 9 . 0 8 . 0 1 . 0 0 0 2 . 0 1 . 0 2 . 0 7 . 0 A con lo que el estado de un día D k = (F k , R k , E k ) t en función del estado el día anterior D k-1 = (T k-1 , R k-1 , E k-1 ) t puede expresarse de la forma:                     =           − − − 1 1 1 8 . 0 1 . 0 1 . 0 0 7 . 0 2 . 0 2 . 0 2 . 0 7 . 0 k k k k k k E R F E R F Por recurrencia podemos expresar el estado de un día cualquiera del mes en función del primer día del mes ... 2 1 2 3 2 1 3 4 3 1 1 1 1 ... k k k D AD D AD A D D AD A D D AD A D − − = = = = = = = Por tanto el problema se reduce a calcular potencias de la matriz A, si k es elevado calcular A k-1 requiere un gran número de operaciones. Para el caso particular en que A sea diagonalizable el resultado se simplifica de forma notable. . Por lo que hallar el estado del proceso en este caso en el que la matriz de transición sea diagonalizable queda del siguiente modo: 1 1 1 1 1 1 1 1 1 k k k k k A SDS A SD S D A D SD S D − − − − − − − = = = = Con lo que denotando S= (v 1 , v 2 , v 3 ) los vectores propios, la solución a nuestro problema será 1 1 1 3 1 2 1 1 1 1 1 0 0 0 0 0 0 D S S D S SD D k k k k k − − − − − −           = = λ λ λ como S -1 D 1 es un vector constante, lo denotamos           = = − 3 2 1 1 1 c c c D S c tenemos 3 1 3 3 2 1 2 2 1 1 1 1 3 2 1 1 3 2 1 2 1 1 1 ) , , ( v c v c v c c c c v v D k k k k k k k − − − − − − + + =           = λ λ λ λ λ λ Así pues el estado de la máquina en un día cualquiera k se ha obtenido como una combinación lineal de los vectores propios asociados a la matriz de transición de estados, donde los coeficientes dependen de las potencias k-1 de los valores propios. Ejemplo 4 La siguiente figura corresponde a un sistema mecánico de masas y resortes. La ecuación de movimiento F=m a junto a la ley de Hooke, que expresa que la fuerza de reacción elástica es proporcional al desplazamiento y de sentido contrario a él, F = -K x, nos proporcionan las ecuaciones de movimiento para el sistema: 0 ) ( 0 ) ( 2 3 2 1 2 2 2 2 2 1 2 1 1 1 = + + − = − + + x k k x k x m x k x k k x m & & & & donde m 1 y, m 2 , son las masas en las posiciones x 1 y x 2 y k i i = 1, 2, 3 las constantes recuperadoras. Supongamos una solución armónica cada coordenada x i (t) = - A i sin (wt + φ i ) i=1,2. donde w es una constante que corresponde a la frecuencia de la oscilación, A i la amplitud y φ i la fase de la oscilación. De esta forma derivando dos veces tenemos i i i i x w wt A w x 2 2 ) sin( − = + − = φ & & y sustituyendo en el sistema ya con los valores de m 1 =m 2 =1 kg, k 1 =5 kN/m, k 2 =10 kN/m y k 3 = 15 kN/m quedará -w 2 x 1 + 15 x 1 –-10 x 2 = 0 -w 2 x 2 – 10 x 1 +25 x 2 = 0 que expresado en notación matricial nos proporciona un problema de valores propios: 1 1 2 2 2 15 10 10 25 x x w x x −       =       −      Kx x λ = con 2 15 -10 K kN/m y w -10 25 λ   = =     x 1 m 1 m 2 x 2 k 1 k 2 k 3 6.2 Método de las potencias Teóricamente, los valores propios de una matriz se pueden obtener resolviendo la ecuación característica p(x) = 0, y posteriormente los vectores propios resolviendo el sistema lineal asociado. En la práctica p(x) es difícil de obtener y, además, si su grado es elevado, la determinación analítica de las raíces es difícil o imposible, pues existen sólo fórmulas para casos con n < 5. Las técnicas numéricas de búsqueda de raíces tampoco son de gran ayuda en este caso, porque la localización de las n raíces (reales o complejas) de un polinomio es muy sensible a las variaciones de los coeficientes del polinomio, sobre todo en el caso de raíces múltiples. Esto hace que los errores de redondeo afecten mucho a la estimación de los valores propios. El problema se complica aún más al intentar resolver el sistema lineal homogéneo para un valor de λ que no llega a hacerlo "singular". Recurrimos pues a métodos numéricos alternativos que eviten tener que determinar y resolver explícitamente el polinomio característico. La idea es calcular primero los vectores propios y, a partir de ellos, los valores propios. Los métodos no son sencillos, pero son tan eficaces que, por ejemplo, MATLAB obtiene las raíces de un polinomio hallando los valores propios de una matriz de la que es polinomio característico. El método de las potencias es una técnica iterativa para obtener de forma aproximada valores y vectores propios de una matriz, que ilustramos con la matriz asociada al proceso de Markov del Ejemplo 2. Comenzamos por elegir un vector inicial u = [1, 1, 1] y repetir los siguientes pasos: 1. Multiplica A*u. 2. Normaliza el vector resultante dividiendo cada componente entre la de mayor valor absoluto. 3. Repite los pasos 1 y 2 hasta que el cambio en el factor de normalización sea despreciable. En este momento, el factor de normalización es una aproximación a un valor propio y el vector resultante un vector propio, ya que se verifica A*u = λ *u.           = 9 . 0 8 . 0 1 . 0 0 0 2 . 0 1 . 0 2 . 0 7 . 0 A u = [1 1 1]' A*u = [1, 0.2, 1.8]' = 1.8 * [0.556, 0.1111,1]' λ = 1.8 u = [0.556, 0.1111,1]' A* u = [0.5111, 0.1111, 1.0444]' = 1.0444 * [0.4894, 0.1064, 1]' λ = 1.0444 u = [0.4894, 0.1064, 1]' A*u = [0.4638, 0.0979, 1.0340]' = 1.0340 * [0.4486, 0.0947, 1]' λ = 1.0340 vemos que el valor de λ se va estabilizando, en las iteraciones 9 y 10 tenemos λ = 1.0020 y λ = 1.0012. Por tanto λ es una estimación de un valor propio ya que A*u = λ*u, no obstante si queremos mayor precisión podemos seguir iterando. En MATLAB puedes realizar este proceso iterativo de una manera muy simple Inicializamos A=[.7 .2 .1;.2 0 0;.1 .8 .9]; u=[1, 1, 1]'; lambda = [],k=1; paso 1: v=A*u; paso 2: [mx,i] =max(abs(v));%Localizar componente de mayor valor absoluto lambda = [lambda v(i)] % v(i) es a nueva estimación del valor propio % Normalizar v u = v/v(i) % Nueva estimación del vector propio k=k+1 % vamos a realizar una nueva iteración paso 3: Actualiza las instrucciones del paso 1 y paso 2 para ir obteniendo nuevos valores de v, n y u a partir de los anteriores, hasta llegar al valor propio n y su correspondiente vector propio con la precisión que desees. Si ejecutas paso 2 y 3 hasta 10 veces obtendrás k = 10 lambda = Columns 1 through 7 1.0000 1.8000 1.0444 1.0340 1.0206 1.0127 1.0079 Columns 8 through 10 1.0050 1.0031 1.0020 Este método, aunque no es muy rápido, es muy fácil de programar ya que se realiza un proceso muy sencillo. 6.4 Métodos iterativos La técnica general para resolver un problema por un método iterativo es la siguiente: 1. Se obtiene una estimación inicial x 1 de la solución. En ella se resume la información previa de que disponemos. 2 4 6 8 10 0 0.5 1 1.5 2 Método de las potencias Iteración E s t i m a c i ó n d e l v a l o r p r o p i o En el caso de cálculo de valores propios posiblemente no tengamos información inicial, normalmente se toma el vector columna de tantos unos como columnas haya en la matriz A. 2. Refinamos iterativamente la aproximación, obteniendo valores nuevos a partir de los anteriores, x 2 , x 3 , x 4 , ..., que converjan a la solución * x . 3. Establecemos un criterio de parada. Dependiendo del problema que se resuelva, en nuestro caso, exigiremos que las iteraciones varíen poco. A x k lo denominaremos estimación k-ésima y el error de esta aproximación viene determinado por ε k = * * , bien si es un vector k k x x o x x x − − aunque generalmente, como es obvio, no se conocerá el limite * x y no se podrá calcular ε k , por lo que se define el error en cada iteración como el incremento entre dos iteraciones consecutivas k 1 e k k x x + = − Si esta cantidad es suficientemente pequeña (menor que un argumento de entrada al que llamaremos tol), detenemos el algoritmo suponiendo que hemos alcanzado la precisión requerida. Tendremos en cuenta que si el método converge lentamente, estamos subestimando el error; al contrario, si converge rápidamente, el error será seguramente inferior a tol. Conviene también limitar el número máximo de iteraciones, en previsión de que el algoritmo diverja, oscile indefinidamente o converja muy lentamente. Llamaremos maxiter al máximo número de pasos que permitimos realizar a un algoritmo iterativo. Si este número se supera, detenemos las iteraciones aunque no se haya alcanzado la convergencia y emitimos un mensaje advirtiendo de este hecho. Tipos de convergencia Para determinar la rapidez con que el método iterativo alcanza la solución se estudia la sucesión de incrementos { } k e k = 1, 2, 3, ... Se dice que la convergencia es lineal si los cocientes 1 k k e e + tienden a estabilizarse en un valor constante y 1 1 k k e e + < , y la convergencia es cuadrática si los cocientes 1 2 k k e e + se aproximan a un valor constante y 1 2 1 k k e e + < , en ambos casos cuanto más próximo a 1 es el cociente mas lenta es la convergencia, y cuanto más próxima a cero más rápida. Cuando la tasa de convergencia 1 k k e e + tiende a cero se dice que la convergencia superlineal. Para obtener el tipo de convergencia en el Ejemplo 2, procedemos del siguiente modo e = abs(diff(lambda)); % e k = |x k+1 - x k | m = length(e); r = e(2:m)./e(1:m-1) % r k = e k+1 /e k Los cocientes incrementales tienden a 0.62 luego tenemos convergencia lineal. Convergencia del método de las potencias Analicemos en primer lugar la base teórica del método de las potencias, para ver que si el proceso es convergente, se encuentra el valor propio mayor en valor absoluto y su vector propio correspondiente. Recordemos los siguientes resultados de Álgebra. Una matriz A nxn real se dice que es ortogonal si verifica A -1 = A T . Una matriz A nxn compleja se dice que es unitaria si 1 T A A − = . Teorema espectral Una matriz A nxn real es simétrica si y sólo si A es diagonalizable mediante una matriz ortogonal, es decir existe una matriz ortogonal P tal que P T AP es diagonal. La hipótesis de la simetría puede parecer muy restrictiva. Sin embargo, en la realidad, en muchas aplicaciones prácticas, aparece asociada una matriz simétrica, como puede verse en el Ejemplo 3. Si una matriz A nxn , tiene un valor propio dominante y es diagonalizable existen vectores propios v 1 , v 2, v 3 , ..., v n que forman una base de n n n R , tendremos que cualquier vector x 1 se expresará como combinación lineal de ellos x 1 = c 1 v 1 + c 2 v 2 + ... + c n v n si multiplicamos por la matriz A, como v i son vectores propios con valores propios asociados λ i verifican A v i = λ i v i , tendremos x 2 = A x 1 = c 1 A v 1 + c 2 A v 2 + ... + c n A v n = c 1 λ 1 v 1 + c 2 λ 2 v 2 + ... + c n λ n v n al multiplicar m veces por A se obtiene x m+1 = A m x 1 = c 1 1 m λ v 1 + c 2 2 m λ v 2 + ... + c n m n λ v n Por lo tanto si el valor propio λ i es mayor en valor absoluto que todo el resto, al hacer m suficientemente grande todos los demás sumandos serán despreciables i m i i m v c x A λ → 1 que es algún múltiplo del vector propio v i con factor de normalización λ i si c 1 ≠ 0. Por lo que la convergencia del método depende de los siguientes factores: • Elegir el vector x 1 inicial de forma que c 1 ≠ 0, basta con que x 1 no sea perpendicular al vector propio asociado a λ i , del mismo modo si el vector inicial es casi paralelo al vector asociado al valor propio dominante λ i , todos los demás coeficientes de la combinación lineal son muy pequeños en relación con λ i y la convergencia será muy rápida. • Si otro valor propio tiene el mismo valor absoluto que λ i o un valor parecido no habrá convergencia o será muy lenta. Por tanto el método de las potencias tiene la desventaja de que sólo es efectivo si la matriz posee un valor propio dominante y elegimos adecuadamente el vector inicial, cosas que en principio generalmente se desconocen. Programación del método de las potencias Tratamos ahora de programar el método de las potencias en MATLAB. Crearemos un fichero potencias.m que, a partir de una estimación inicial de un vector propio, u 1 calcule el valor propio asociado construyendo una sucesión de iterados (en realidad, un vector finito) hasta detectar si hay convergencia o no. Los argumentos de entrada de potencias serán la matriz de la que queremos obtener el valor propio mayor en valor absoluto, la estimación inicial u 1 , la precisión con la que deseamos obtener la solución, tol y el número máximo de iteraciones, maxiter. Como resultado, obtendremos la estimación final tanto del vector propio como del valor porpio asociado. También interesa conocer la distancia entre los últimos iterados y el número de iteraciones realizadas. Si el programa termina por haber superado el máximo de iteraciones sin alcanzar la convergencia, lo indicará mediante un mensaje. Las iteraciones u = A u y posterior normalización del vector para hallar el nuevo valor de u y lambda constituyen el núcleo del algoritmo. En esta parte del programa controlamos la variación de un iterado al siguiente, 1 k k incr u u + = − y contamos el número de iteraciones, k. Repetimos el proceso mientras se cumplan dos condiciones: Š que la variación sea mayor que la tolerancia: incr > tol Š que no se supere el máximo de iteraciones: k < maxiter La instrucción de MATLAB que veremos a continuación, while e if permiten programar las iteraciones mencionadas. while crea un bucle que se repite mientras se cumpla determinada condición. Su sintaxis es while condición instrucciones end Las instrucciones que contiene el while se repiten mientras se verifica la condición. Si esta no se verifica, se produce un salto hasta la orden que sigue al end. while condición instrucción instrucción end sí no Para que el bucle no sea indefinido, las instrucciones del while modifican los términos de la condición, de modo que en algún momento deje de verificarse y entonces el bucle se termina. La orden if proporciona bifurcaciones condicionales, su sintaxis es if condición instrucciones end las instrucciones se realizan si la condición se verifica. Otra estructura de control útil es la bifurcación condicional. Las instrucciones que contiene el if se ejecutan si se verifica la condición. Si ésta no se verifica, se produce un salto hasta la orden que sigue al end. La instrucción else permite introducir instrucciones que se ejecutan si la condición es falsa. La sintaxis en este caso es if condición instrucciones cierta else instrucciones falsa end Se pueden anidar varios if. La instrucción elseif es una abreviatura de else if. En el programa potencias.m, utilizaremos una bifurcación condicional para avisar que no ha habido convergencia si, al finalizar el bucle, la distancia entre los últimos iterados es mayor que la tolerancia. Veamos algunos detalles sintácticos útiles para formular condiciones que aparecen en la definición de un bucle o una bifurcación condicional. MATLAB reconoce expresiones lógicas, asociándoles el valor 1 si son verdaderas y el valor 0 si son falsas. No debe sorprendernos a estas alturas que lo haga vectorialmente. if condición instrucción instrucción end sí no Las comparaciones entre dos variables se codifican de forma natural mediante los signos de desigualdad e igualdad. Prueba a = [-1 0 1], a > 0 % devuelve 0 0 1 a >= 0 % devuelve 0 1 1 a == 0 % devuelve 0 1 0 a ~= 0 % devuelve 1 0 1 Notamos que la igualdad se denota con dos signos 'igual', para distinguirla de la asignación, que usa un solo 'igual'. La desigualdad se denota con el signo 'igual' precedido de la 'tilde', que se obtiene con la combinación de teclas [Alt]+126. Para combinar varias condiciones utilizamos los operadores lógicos: Š Conjunción: A&B Es cierta cuando A y B lo son. Š Disyunción: A|B Es cierta cuando alguna de las dos lo es. Š O exclusiva: xor(A,B) Es cierta cuando ambas o ninguna lo son. Š Negación: ~A Es cierta cuando A es falsa. A y B pueden ser valores cualesquiera, no necesariamente 0 ó 1. En este caso, todo valor no nulo se considera verdadero y viceversa. Utilizamos comparaciones en los métodos iterativos para comprobar que la distancia entre iterados es grande, incr>tol, y que no se ha alcanzado aún el tope de iteraciones, k<maxiter. Efectuamos iteraciones mientras se cumplen simultáneamente los dos requisitos, por lo que la condición que controla el bucle será la conjunción: (incr > tol) & (k < maxiter) Algoritmo potencias Entrada: A la matriz, u el vector inicial, tol la tolerancia, maxiter nº máximo de iteraciones. if condición instrucción instrucción end sí no instrucción instrucción Salida: lambda sucesión de iterados, el último valor será la aproximación al valor propio de mayor valor absoluto, u vector propio asociado, k nº de iteraciones realizadas. Proceso: Inicializar lambda = []; k=1; incr= tol+1; %hacemos el error mayor que la tolerancia para que entre en el bucle Mientras no converja o no hayamos llegado a maxiter Multiplicar A*u. Normalizar el vector resultante dividiendo cada componente entre el mayor en magnitud. Calcular el error o incremento incrementar el contador de iteraciones fin mientras Si al salir del bucle no se ha alcanzado la tolerancia deseada escribir un mensaje indicando que se necesitan más iteraciones fin del condicional Ejecuta la función potencias para hallar un valor propio de la matriz del Ejemplo 2.tomando el vector u = [1,1,1]' , tol de una milésima y un máximo de 30 iteraciones. A=[.7 .2 .1;.2 0 0;.1 .8 .9]; u=[1 1 1]'; tol =0.001; maxiter=30; [lambda,u,k]=potencias(A,u,tol,maxiter) Se tiene el valor propio λ =1.0012 y el vector propio asociado u = [ 0.3871, 0.0776, 1] en 11 iteraciones. Ejemplo 5 Aplica el método de las potencias a la matriz B, inténtalo primero con un número pequeño de iteraciones de forma que no se alcance la convergencia, luego lo aumentas y estudias el tipo de convergencia que se produce. B = 4 3 2 4 1 0 0 3 1 −         −   B=[-4 3 2; 4 1 0; 0 3 -1]; u=[1 1 1]'; tol =0.001; maxiter=4;, [lambda,u,k]=potencias(B,u,tol,maxiter) Observas que el programa da la solución que ha obtenido hasta ese momento advirtiendo que no se alcanza la tolerancia deseada ya que muestra el mensaje de que se necesitan más iteraciones. Fíjate que el contador de operaciones esta a 5, ¿cómo explicas esto si maxiter es 4? Probamos ahora u=[1 1 1]'; maxiter=20; [lambda,u,k]=potencias(B,u,tol,maxiter) Todavía no se alcanza la solución, probamos otra vez u=[1 1 1]'; maxiter=40; [lambda,u,k]=potencias(B,u,tol,maxiter) Observa que se necesitan 30 iteraciones, para tolerancia de una milésima, esto ratifica que la convergencia es lenta, la razón de convergencia esta cerca de 0.7. e = abs(diff(lambda)); m = length(e); r = e(2:m)./e(1:m-1) Método de las potencias inverso Como hemos visto en los ejemplos previos el método de las potencias obtiene el valor propio mayor en valor absoluto, vamos a profundizar un poco más para poder obtener cualquier valor propio, para ello vamos a hacer uso de la siguiente propiedad. Si A tiene un valor propio λ i y es una matriz no singular entonces la matriz A -1 tiene el valor propio 1/λ i . Por lo que si en el método de las potencias trabajamos con A -1 obtendremos el valor propio mayor en valor absoluto λ i y por tanto 1/λ i .será el menor valor propio en valor absoluto para la matriz A, el vector propio correspondiente es el mismo, no requiere cambios ya que A -1 v =λ i v multiplicando por A v = λ i A v multiplicando por 1/λ i i 1 λ v = A v es decir v es también vector propio de A asociado al valor propio 1/λ i Ejemplo 6 Vamos a obtener otro valor propio de la matriz A del Ejemplo 2, concretamente será el menor en valor absoluto. A=[.7 .2 .1;.2 0 0;.1 .8 .9]; u=[1 1 1]'; tol =0.001; maxiter=30; [lambda,u,k]=potencias(inv(A),u,tol,maxiter) Se obtiene -31.5831 en la iteración 6 como valor propio de A -1 , el de A será -1/31.5831 que puedes obtener 1/lambda(6) valor propio -0.0317 y vector u = [ -0.158, 1.000, -0.8417]. Desplazamiento con el método de las potencias Ya sabemos como obtener los valores propios de mayor y menor valor absoluto, veamos ahora como obtener los valores propios con un valor absoluto intermedio entre estos. Utilizamos ahora la siguiente propiedad Si A tiene un valor propio λ i entonces la matriz A+kI tiene el valor propio λ i +k Con lo cual si suponemos que se desea obtener un valor propio muy cercano a un valor k, tomamos la matriz desplazada A-kI que tendrá un valor singular muy cerca de cero y por tanto la inversa de esta matriz desplazada tendrá un valor propio mucho mayor en magnitud que cualquier otro lo que hará que la convergencia sea mucho más rápida, y deshaciendo los cambios tendremos el valor propio λ i que buscábamos. Ejemplo 7 En la matriz del Ejemplo 2 hemos obtenido ya los valores propios 1.012 y -0.0317, para obtener el valor propio que nos falta que será un valor intermedio podemos hacer un desplazamiento de la matriz restando el punto medio de estos valores y proceder como hemos indicado. (Notemos que podríamos obtener este valor propio de forma inmediata ya que la suma de los tres valores propios coincide con la traza de la matriz) d= (1.012 + -0.0317)/2 %punto medio de los valores propios ya obtenidos Ad=A-d*eye(3); % matriz des plazada u=[1 1 1]'; tol =0.001; maxiter=30; [lambda,u,k]=potencias(inv(Ad),u,tol,maxiter) Obtenemos el valor propio 7.0669 en la iteración 11 con lo que el correspondiente valor propio de A será 1/lambda(11)+d Así pues el valor propio de A que nos faltaba es 0.6317 y el vector propio asociado u = [-0.7595, -0.2405, 1] Como hemos hecho notar, esta técnica de desplazamiento del método de las potencias también puede utilizarse para acelerar la convergencia del proceso, pero para ello necesitamos tener información sobre en torno a que números se encuentran lo valores propios, para poder realizar el desplazamiento hacia ellos. Esta información nos la proporciona el siguiente resultado que establece que los valores propios se encuentran en círculos cuyos centros están en los elementos de la diagonal a ii con radio igual a la suma de los valores absolutos de los otros elementos de la fila i. Teorema de Gerschgorin a) Todo valor propio λ de A nxn satisface al menos una de las siguientes desigualdades: 1 en donde i=1,...,n j i n ii i i ij j a r r a λ ≠ = − ≤ = ∑ esto es, cada valor propio está, por lo menos en uno de los discos con centro a ij y con radio r i. b) Si la unión de cualesquiera k de estos círculos no intersecta a los n-k restantes, entonces habrá precisamente k valores propios en esta unión. Es obvio que este teorema será útil si la matriz presenta fuerte dominancia en la diagonal. Ejemplo 8 Vamos a intentar acelerar la convergencia en el Ejemplo 3, aunque la matriz no es diagonal dominante, los valores propios estarán en los círculos -4 ± 5, 1 ± 4 y -1 ± 3, lo hacemos desplazando primero por -4 B=[-4 3 2; 4 1 0; 0 3 -1]; Bd= B+4*eye(3); u=[1 1 1]'; tol =0.001; maxiter=40;, [lambda,u,k]=potencias(inv(Bd),u,tol,maxiter) Para encontrar el valor propio de B 1/lambda(14)-4 hemos reducido el número de iteraciones a la mitad, pues inicialmente había necesitado 30 iteraciones y ahora lo obtiene en 14. Valores y vectores propios en MATLAB Existen funciones incorporadas a MATLAB que nos permiten calcular tanto el polinomio característico de una matriz A, como sus valores y vectores propios. Si A es una matriz nxn, P = poly (A) proporciona los coeficientes del polinomio característico de A. r=roots (P) nos daría las raíces de P y por tanto los valores propios de A. r=eig(A) nos da directamente los valores propios de A. [S, D] = eig(A), los parámetros de salida son dos matrices, la primera tiene por columnas los vectores propios de A y la segunda es una matriz diagonal con los valores propios de forma que A = S D S -1 . En el Ejemplo 1 para tener los valores propios basta hacer A=[2 0;0 -3]; lambda=eig(A) y los vectores propios [S, D] = eig(A) Comprobemos los resultados que hemos obtenido en el Ejemplo 2 con el método de las potencias utilizando ahora los comandos de MATLAB. A=[.7 .2 .1;.2 0 0;.1 .8 .9]; [V,D]=eig(A) V*D*inv(V) %comprobamos que obtenemos A Notemos que las matrices V y S no coinciden pues los vectores propios no son únicos, en cada caso se han obtenido de formas diferentes, ahora bien , puedes comprobar que los vectores propios obtenidos asociados al mismo valor propio son proporcionales, es decir generan el mismo subespacio propio. La primera columna de S correspondía al valor propio cercano a 1 que en V se encuentra en al tercera columna, puedes ver la proporcionalidad haciendo S(:,1)./V(:,3) Apéndice: Descomposición en valores singulares La descomposición de una matriz empleando matrices unitarias u ortogonales es muy útil para diversas aplicaciones, en otros temas trataremos la descomposición QR de una matriz y la descomposición de Shur, vamos a ver ahora la descomposición de una matriz en valores singulares, especialmente útil para la compresión de datos. Teorema: a) Toda matriz real A, pxq puede descomponerse como T A U V = ∑ , en donde U es pxp unitaria y ortogonal, V es qxq unitaria, y ortogonal y ∑ es pxq y "diagonal" ya que ∑ ij = 0 para i ≠ j, y ∑ ii = { } 1 2 0 siendo ... donde s=min p,q i s σ σ σ σ ≥ ≥ ≥ ≥ b) Los números i σ se llaman los valores singulares de A, y las columnas de U y V se denominan vectores singulares derecha e izquierda de A, se verifica que i σ 2 son los valores propios de A H A (quizá agregando algunos ceros) y los vectores propios asociados son las columnas u i de U, es decir Av i = i σ u i para 1 i s ≤ ≤ . En la práctica, el cálculo de una descomposición en valores singulares se hace con técnicas de programación, esta descomposición contiene gran información sobre la matriz A. Valores singulares y rango La descomposición en valores singulares se puede usar para determinar el rango de una matriz. Más importante aún es que se puede usar para analizar los distintos rangos que puede tener la matriz si sus elementos estuvieran sometidos a errores ( por ejemplo de medición o modelado) que podrían ocasionar creer que el rango es mayor de lo que en realidad puede ser. Teorema: a) El rango k de A es igual al número de valores singulares de A diferentes de cero. b) Si A es una matriz real pxq, de rango k, para un r < k , la matriz A r de rango r que hace mínimo a 2 ' A A − entre todas las matrices pxq, A', de rango r viene dada por 1 1 1 2 2 2 r 1 2 ... y el mínimo es A-A T T T r r r r r A u v u v u v σ σ σ σ + = + + + = La capacidad de la descomposición en valores singulares para obtener aproximaciones de bajo rango de una matriz dada, puede ser útil en la compresión de datos, por ejemplo al enviar fotografías desde el espacio. Una cámara de un satélite fuera de la Tierra, puede enviarnos miles de fotos. Supongamos que para realizar el envío se discretiza o digitaliza la foto dividiendo la imagen en muchos cuadros pequeños y asignando un tono de un mismo color a cada uno de ellos. Por ejemplo si hacemos un sobre la foto un cuadriculado de 1000 1000 × tendremos que mandar a la Tierra 1.000.000 de enteros para cada foto, y así reconstruir la foto en la Tierra. El problema es que esto son muchos datos si tenemos a su vez gran cantidad de fotos. Necesitamos pues un método para comprimir datos con el objetivo de transmitir menor cantidad. Un método es utilizar la descomposición en valores singulares de la matriz 1000 1000 × A y ver si una aproximación de bajo rango 1 1 1 2 2 2 ... T T T r r r r A u v u v u v σ σ σ = + + + representa adecuadamente la imagen; ésta se transmitiría a la Tierra en la forma de los 2r vectores u i , y v i y los r valores singulares. Fijémonos que por ejemplo si r = 5 para reconstruir la foto es suficiente con el envío de 2 5 1000 5 10005 × × + = datos por foto e vez del 1.000.000 inicial, lo que supone un ahorro de más del 99%. Ejemplo 9 Vamos a practicar el método de comprensión de datos que acabamos de exponer con un ejemplo sencillo en el a partir de la siguiente imagen discretizada de la foto de una X se obtienen las aproximaciones de grado 1,2 y 3. 2 4 6 8 10 12 14 16 18 20 2 4 6 8 10 12 14 16 18 20 a) Imagen discretizada b) Aproximación de grado 1 c) Aproximación de grado 2 d) Aproximación de grado 3 La imagen discretizada se crea con el siguiente fichero.m, con el que se obtiene la matriz de datos A de 20x20. function A=fotox dp=ones(1,20); d1=ones(1,19); a=diag(dp)+diag(d1,-1)+diag(d1,1); b=fliplr(a); A=max(a,b); Af=A+1; image(Af) colormap flag A=fotox; Calculamos la descomposición en valores singulares de la matriz A. [V,S,U]=svd(A); S=diag(S) Observamos que A es de rango 10 ya que los valores singulares son 1 2 3 4 5 6 7 8 9 10 i = 5.8, =5.3 =4.6 =3.6 =2.5 =1.8 =1.4 =1.3 =0.6 =0.3 y los otros 0 σ σ σ σ σ σ σ σ σ σ σ ≈ 2 4 6 8 10 12 14 16 18 20 2 4 6 8 10 12 14 16 18 20 2 4 6 8 10 12 14 16 18 20 2 4 6 8 10 12 14 16 18 20 2 4 6 8 10 12 14 16 18 20 2 4 6 8 10 12 14 16 18 20 La aproximación de rango 1 será 1 1 1 1 1 2 2 y A-A 5.3 T A u v σ σ = = = A1=S(1)*U(:,1)*V(:,1)'; image(round(A1)+1) colormap flag L aproximación de rango 2 será 2 1 1 1 2 2 2 2 3 2 + y A-A 4.6 T T A u v u v σ σ σ = = = A2=A1+S(2)*U(:,2)*V(:,2)'; image(round(A2)+1) colormap flag L aproximación de rango 3 será 3 1 1 1 2 2 2 3 3 3 3 4 2 + + y A-A 3.6 T T T A u v u v u v σ σ σ σ = = = A3=A2+S(3)*U(:,3)*V(:,3)'; image(round(A3)+1) colormap flag Observamos que la aproximación de grado 1 no es satisfactoria, la de grado 2 ya nos proporciona una idea muy próxima de la foto inicial con sólo 82 datos y la de rango 3 se puede decir que es muy buena ya que con 123 datos se aprecia la foto inicial, que contenía información de 400 datos. 7 Problemas 1.- a)Aplica el método de las potencias para calcular el valor propio dominante de la matriz A, así como un vector propio asociado. 3 0 5 1 1 0 5 1 1 2 A −       = −     −   b) Obtén con el método inverso el valor propio de menor valor absoluto y un vector propio asociado. c) Utiliza los círculos de Gerschgorin y la técnica de desplazamiento para acelerar la convergencia del método. d) Obtén la descomposición de A de la forma A = S D S -1 , siendo D la matriz diagonal con los valores propios de A en la diagonal e) Compara los resultados obtenidos utilizando los comandos de MATLAB 2.- Utiliza el comando eig de MATLAB para resolver el Ejemplo 2, suponiendo que inicialmente la máquina está en perfecto estado, D 1 = [1,0,0] averigua el estado al cabo de una semana y al finalizar el mes. ¿Crees qué se puede determinar el estado a largo plazo?. 3.- Una red de comunicaciones transmite dígitos binarios, 0 ó 1. Al pasar por la red, existe una probabilidad q de que el dígito que se recibe en la siguiente estación sea incorrecto. Si X 1 denota el dígito binario que entra al sistema, X 2 el dígito binario registrado después de la primera transición y así sucesivamente. Plantea el problema como una sucesión de 4 estados, obtén la matriz de transición de un paso a otro como en el ejemplo 2, para analizar la validez de la transmisión a largo plazo. 4.- Resuelve el Ejemplo 3 correspondiente a un sistema mecánico de masas y resortes con los datos que en el mismo figuran. 5-. Una matriz persimétrica es una matriz que es simétrica alrededor de ambas diagonales; es decir 1 n+1-j ( ) es persimétrica si 1,..., y 1,..., . ij nxn ij ji n i A a a a a i n j n + − = = = ∀ = = Muchos problemas de la teoría de la comunicación tienen soluciones que involucran a los valores y vectores propios de matrices persimétricas. Por ejemplo el vector característico correspondiente al valor característico menor de la matriz persimétrica de 4 4 × 2 1 0 0 1 2 1 0 0 1 2 1 0 0 1 2 A −     − −   =   − −   −   da la respuesta impulsiva de un canal de energía-unidad para una secuencia de error dada de longitud 2 y subsecuentemente, el peso mínimo de cualquier secuencia de error posible. Utiliza el método de las potencias y sus variantes para obtener el menor valor característico de la matriz A y su vector propio correspondiente. 6.- Un sistema dinámico lineal puede presentarse por las ecuaciones ( ) ( ) ( ) ( ), ( ) ( ) ( ) ( ) ( ) dx A t x t B t u t y t C t x t D t u t dt = + = + donde A es una matriz variable de, B es una matriz variable de, C es una matriz variable de, una matriz variable de, x es un vector variable n-dimensional, y es un vector variable m-dimensional y u es un vector variable r-dimensional. Para que el sistema sea estable, todos los valores característicos de la matriz A deben tener una parte real no positiva para toda t. Determina la estabilidad del sistema en los siguientes casos: a) 1 2 0 ( ) 2.5 7 4 0 0 5 A t −     = − −     −   b) 1 1 0 0 0 2 1 0 ( ) 0 0 5 1 1 1 2 3 A t −     −   =   −   − − − −   7.- Elige una letra del abecedario, la inicial de tu nombre o de alguno de tus apellidos, y realiza el proceso seguido en el apéndice del tema para comprimir datos. Para ello debes obtener una foto discretizada de la letra mediante una matriz de 20 20 × y realizar la descomposición en valores singulares de esta matriz para obtener las aproximaciones de rango mínimo que permitan identificar la foto inicial. 8 Soluciones 2.- A=[.7 .2 .1;.2 0 0;.1 .8 .9]; [S,D]=eig(A) supongamos que el primer día del mes la máquina esta en perfecto estado, al cabo de 15 días tendremos 1 15 1 15 1 15 1 15 1 15 1 15 1 15 1 1 2 2 3 2 1 1 1 2 2 2 3 3 3 3 ( , , ) c D v v c c v c v c v c λ λ λ λ λ λ − − − − − −     = = + +       con           = = − 3 2 1 1 1 c c c D S c y i λ los valores propios de A D1=[1 0 0]'; c=inv(S)*D1; D7=c(1)*D(1,1)^6*S(:,1)+c(2)*D(2,2)^6*S(:,2)+c(3)*D(3,3)^6*S(:,3 ) y al finalizar el mes D30=c(1)*D(1,1)^29*S(:,1)+c(2)*D(2,2)^29*S(:,2)+c(3)*D(3,3)^29*S (:,3) A largo plazo podemos simplificar el resultado ya que existe un valor propio dominante c(3)*D(3,3)^29*S(:,3) y los otros dos sumandos son prácticamente nulos. c(2)*D(2,2)^29*S(:,2) c(1)*D(1,1)^29*S(:,1) Por lo que a largo plazo el proceso alcanza un estado estacionario sin importar el estado inicial del que partimos, que coincide con un vector propio del valor propio 1 λ = , en este caso :dicho estado estacionario será: c(3)*S(:,3) ans = 0.2632 0.0526 0.6842 Es decir, independiente de cómo se encuentre la máquina un determinado día al cabo de un tiempo la probabilidad de que este funcionando es aproximadamente del 26%, la probabilidad de que este estropeada es sólo del 5% y en el 68% de los casos la máquina está siendo reparada. 4.-Para resolver el problema de valor propio 1 1 2 2 2 15 10 10 25 x x w x x −       =       −      hallaremos los valores propios de La matriz K; K=[15 -10;-10 25] K = 15 -10 -10 25 lambda=eig(K) lambda = 8.8197 31.1803 y finalmente w = λ w=sqrt(lambda) w = 2.9698 5.5839 A partir de estos valores e imponiendo las condiciones iniciales 1 (0) 0 x = y 1 (0) 1 x′ = obtenemos las ecuaciones de movimiento: 1 1 1 ( ) sin( ) x t A wt φ = − + 1 1 1 (0) sin( ) 0 x A φ = − = de donde A 1 = 0 o bien φ 1 = 0, supongamos este caso. Para determinar A 1 utilizaremos 1 (0) 1 x′ = 1 1 1 ( ) cos( ) x t wA wt φ ′ = − + Para t = 0 tendremos 1= - 2.9698 A 1 por lo que A 1 = -1/w 1 . Análogamente se obtiene A 2 . . A=-1./w A = -0.3367 -0.1791 Y por tanto queda determinado el movimiento que representamos a continuación: t=0:0.01:5; x1=-A(1).*sin(w(1)*t); x2=-A(2).*sin(w(2)*t); plot(t,[x1;x2+0.5]) 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt diary on % ---------------------------------------------------- % VALORES PROPIOS Y VECTORES PROPIOS % ---------------------------------------------------- % Se tiene una aplicacion lineal representable mediante una matriz % ej: giro en el plano, proyeccion en un plano, ... % la matriz actua anteponiendose al punto sobre el cual actua %ej: proyeccion en plano XY A = [1 0 0; 0 1 0; 0 0 0]; x1 = [2; 3; 4]; x2 = A*x1 x2 = 2 3 0 clear %lo ideal seria que la matriz fuera diagonal, reduciendo enormemente la dificultad de aplicar la matriz a un punto %si la aplicacion lineal se representa mediante una diagonal, ejerce el cambio independientemente a cada componente del punto. % Obviamente e suna forma mas sencilla de representar la matriz %PAra llegar a esta forma se utilizan los valores y vectores propios %los valores propios coinciden precisamente con los elementos de la diagonal %Definicion: % Sea A (n*n) % v (!= 0) es vector propio de A si: A*v = hv (h un numero real) % normalmente se escribe como lambda, pero como el teclado no esta ne griego, usare la h, que 'se parece' :) % si tenemos una base del espacio formada por vectores propios, entonces la matriz de la A. L. referida a esa base tiene forma diagonal % ademas, dicha matriz (A) viene dada por A = S * D * inv(S) % donde S es una matriz formada por los vectores propios %la forma numerica de calcular dicha matriz no tiene nada que ver con la teoria % basicamente hay 2 procedimientos file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt (1 of 10) [09/03/2008 13:49:16] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt % - uno consiste en transformar la matriz en diagonal mediante una serie de transformaciones, y el registrro de dichas transformaciones da lugar a la matriz S de los vectores propios >> % El procedimiento analitico para obtener valores y vectores propios es totalmente opuesto >> % se plantea el problema como un sistema de ecuaciones lineales >> % A X = h X >> >> %que queda como... >> >> % [a11-h a12 a13; [x1; [0; >> % a21 a22-h a23; x2; = h . 0; >> % a31 a32 a33-h] x3] 0] se busca que el sistema trenga infinitas soluciones por lo tanto se busca que el determinante sea cero al calcular el determinante se obtiene un polinomio con h se calculan las raices de dicho polinomio y se obtienen las h1, h2, .. hi que van en la matriz diagonal D luego se buscan los vectores para cada h y de ahi se puede escribir la matriz S, con los vectores propios en las columnas A nosotros este sistema no nos sirve de mucho la construccion del polinomio e sun poco incomoda y sobre todo la obtencion de las raices esta sujeta a error y encima si quiero resolver el sistema no homogeneo con solucion no trivial Analiticamente esta todo perfecto, pero numericamente el proceso tiene dificultades Numericamente lo que se hace es obtener D mediante usa serie de procedimientos a partir de la matriz A, durante los cuales se pueden obtener los vectores propios ¿Que hace matlab para calcular las raices de un polinomio? no os lo podeis ni imaginar construye una matriz cuyo polinomio caracteristica sea el polinomio obtiene los vectores y valores propios de esa matriz y el resultado de los valores propios se los asigna a las raices del polinomio --- Aplicacion interesante de valores propios que ademas nos da la idea del metodo nuemrico que vamos a utilizar es: ------------------------------------------------------ :::: El calculo de potencias de una matriz :::: ------------------------------------------------------ que ventaja tiene trabajr con valores propios para hallar las potencias? pues muy sencillo para elevar al cuadrado una matriz hay que determinar n^2 elementos, cada uno de ellos requeire n operaciones el total es n^3 operaciones cada vez que se multiplica una matriz por otra ahora bien, si la matriz fuese diagonal, para multiplicarla bastarian solo n operaciones (cada elementos de la diagonal) file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt (2 of 10) [09/03/2008 13:49:16] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt Procedimiento: - Diagonalizar la matriz - Elevar a la potencia que se requeira si se tiene A = S D inv(S) A^2 = (S D inv(S) S D inv(S) = S D^2 inv(S) luego ya solo queda deshacer el cambio para obntener el resultado en los terminos iniciales sirve para cualquier potencia A^k = S D^k inv(S) La potencia de matrices es muy util para ver lo que ocurre en diversas situaciones a la larga (procesos de MARKOV) Ejercicio: Aplicar lo que veamos hoy al primer problema que hicimos -------- Ejemplo: -------- ver ejemplo en las transparencias de la practica 6 estado de una maquina en uan fabrica al cabo de k dias D2 = A D1 D3 = A D2 = A^2 D1 Dk = A Dk-1 = A^(k-1) D1 --------- EN MATLAB --------- A = [0.7 0.2 0.2; 0.2 0.7 0; 0.1 0.1 0.8]; u = [1 1 1]' %hace la traspuesta para ser mas rapido... lamda = []; %valores propios k = 1; %contador de iteraciones %PROCESO v = A*u v = 1.1000 0.9000 1.0000 u = v/v(1) %para conseguir el primer elemente igual a 1 file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt (3 of 10) [09/03/2008 13:49:16] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt u = 1.0000 0.8182 0.9091 plot(u) hold on %volvemos a repetir los pasos v = A*u v = 1.0455 0.7727 0.9091 u = v/v(1) u = 1.0000 0.7391 0.8696 plot(u,'g') %vamos a repetir este procedimientoi hasta cansarse v = A*u u = v/v(1); plot(u,'r'); v = A*u; u = v/v(1); plot(u,'r'); for i = 1:10 v = A*u; u = v/v(1); plot(u,'r'); hold on end file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt (4 of 10) [09/03/2008 13:49:17] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt %llega un momento en el cual aunque siga se queda igual % hemos obtenido UN VECTOR PROPIO de valor propio = 1 % ya que la imagen de si mismo da si mismo! %con muy poco mas tendremos le metodo iterativo: el poco mas es automatizar los pasos y dar un criterio de convergencia %el criterio de convergencia: |xk+1 - xk| < tol o k >= maxiter % si xk+1 y xk fueran vectores, loq ue se haria es calcular la 'norma' de la diferencia %como las cosas pueden ir mal y nunca se llegara a esa tolerancia se utiliza un maximo de iteraciones % mas o menos se tiene como hacer el algoritmo en las transparencias %procedemos con el fichero -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- function [lambda, u, k]=potencias(A,u,tol,maxiter) % POTENCIAS para calcular valor propio de A % Inicializar el grafico plot(u) pause hold on % Inicializar k = 1; lambda(1) = 1; %para que no ocurra nada al comprobar lambda(k-1) la primera vez incr = tol+1; % Iteraciones while incr>tol & k<maxiter %contar las iteraciones k = k+1; v = A*u; %normalizamos el vector (dividir por la mayor componente) [mx,i]=max(abs(v)); %devuelve cual es el maximo y en que posicion se encuentra u = v/v(i); %medimos el incremento lambda(k) = v(i); %guardamos en un vector los coeficientes de normalizacion file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt (5 of 10) [09/03/2008 13:49:17] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt incr = abs(lambda(k)-lambda(k-1)); plot(u) pause end hold off close % Aviso no convergencia if incr>tol disp('No ha convergido') end -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- [lambda, u, k]=potencias(A,u,tol,maxiter) u = 1.0000 0.6667 0.8333 k = 16 plot(lambda, '*') ----------- PROBLEMAS QUE PUEDEN SURGIR ----------- >> [lambda, u, k]=potencias([1 2 ; 0 1],[1 1]',1e-5,40) No ha convergido % el vector propio es el 1 0, la convergencia es MUUUUUY lenta. >> [lambda, u, k]=potencias([1 -1 ; 1 1],[1 1]',1e-5,20) No ha convergido file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt (6 of 10) [09/03/2008 13:49:17] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt %se puede ver porque si se quita el hold on %lo que ocurre es que los vectores van ciclando y no converge nunca ------------- MEJORAS DEL ALGORITMO ------------- Rapidez de convergencia Tipos de convergencia Error del paso k (Diferencia entre sucesivas aproximaciones) ek = | xk+1 - xk| Convergencia lineal cuando ek+1 / ek --> cte < 1 (si tiende a cero, converge muy rapidamente) (el peor de los casos seria que la cte tiende a 1, en cuyo caso el error se reduce muy lentamente) Convergencia cuadratica cuando ek+1/ek^2 --> cte < 1 (es mejor que una convergencia lineal, mas rapida el error entre pasos es cada vez menor) incluyamos la velocidad de convergencia sabiendo que diff(lambda) da u n vector con las diferencias entre elementos sucesivos %Analisis de la convergencia e = diff(lambda); %vector con lambda 2-lambda1, lambda3 - lambda2, etc... r = e(2:end)./e(1:end-1); %Tasa de convergencia La funcion queda como: --------------------------------------------------------------- --------------------------------------------------------------- function [lambda, u, k,e,r]=potencias(A,u,tol,maxiter) % POTENCIAS para calcular valor propio de A % Inicializar el grafico plot(u) pause hold on % Inicializar k = 1; lambda(1) = 1; %para que no ocurra nada al comprobar lambda(k-1) la primera vez incr = tol+1; file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt (7 of 10) [09/03/2008 13:49:17] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt % Iteraciones while incr>tol & k<maxiter %contar las iteraciones k = k+1; v = A*u; %normalizamos el vector (dividir por la mayor componente) [mx,i]=max(abs(v)); %devuelve cual es el maximo y en que posicion se encuentra u = v/v(i); %medimos el incremento lambda(k) = v(i); %guardamos en un vector los coeficientes de normalizacion incr = abs(lambda(k)-lambda(k-1)); plot(u) pause end %Analisis de la convergencia e = diff(lambda); %vector con lambda 2-lambda1, lambda3 - lambda2, etc... r = e(2:end)./e(1:end-1); %Tasa de convergencia hold off close % Aviso no convergencia if incr>tol disp('No ha convergido') end ---------------------------------------------------------------------- ---------------------------------------------------------------------- >> [lambda, u, k,e, r]=potencias(hilb(10),ones(10,1),1e-5,40) lambda = Columns 1 through 5 1.0000 2.9290 1.9164 1.7819 1.7577 Columns 6 through 10 1.7530 1.7521 1.7520 1.7519 1.7519 file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt (8 of 10) [09/03/2008 13:49:17] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt u = 1.0000 0.6090 0.4531 0.3653 0.3078 0.2667 0.2358 0.2116 0.1920 0.1759 k = 10 e = Columns 1 through 5 1.9290 -1.0125 -0.1345 -0.0242 -0.0047 Columns 6 through 9 -0.0009 -0.0002 -0.0000 -0.0000 r = Columns 1 through 5 -0.5249 0.1329 0.1799 0.1923 0.1950 Columns 6 through 8 0.1956 0.1957 0.1957 Nuestro metodo lo que obtiene es lamda, cuyo limite es el valor propio dominante y un vector u, tal que >> hilb(10)*u-lambda(end)*u %da cero dentro de la tolerancia elegida ans = 1.0e-005 * -0.1331 -0.1044 -0.0869 -0.0748 -0.0659 -0.0589 -0.0534 -0.0488 -0.0450 file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt (9 of 10) [09/03/2008 13:49:17] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt -0.0418 ------------------------- >> eig(hilb(10)) ans = 0.0000 0.0000 0.0000 0.0000 0.0000 0.0001 0.0025 0.0357 0.3429 1.7519 ----------------------------- nuestro metodo de las potencias lo que ha calculado es el mayor valor propio (llamado dominante) (el de mayor valor absoluto) si no hay tal valor propio dominante, funciona peor o no funciona ------------------------------------ METODO DE LAS POTENCIAS INVERSAS ------------------------------------ Calcula el menor valor propio (el mas proximo a cero) Es generalmente mas rapido que el anterior Permite calcular el valor propio mas proximo a donde se quiera file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt (10 of 10) [09/03/2008 13:49:17] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat...atematicas/Primer%20Cuatrimestre/Practica%206%20-%202/practica6-2.txt El algoritmo de potencias converge al valor propio máximo de una matriz. ¿Cómo nos acercamos a OTROS valores propios? ej: los valores propios d euna matriz son (en la recta real): |-----------x-------x---------------x---- 0 ^ el ultimo es el que se encuentra mediante el metodo de las potencias. Si tenemos: A*v = h*v v = h * inv(A) * v inv(A) * v = v/h = (1/h) * v para la matriz inv(A) el vector propio es el mismo, con un valor propio (1/h) haciendo el método de las potencias a inv(A) proporciona el mayor valor propio de inv(A), es decir, el mayor (1/h), que es igual al menor valor propio (h) de A. Basta con aplicar el metodo de las potencias a la matriz inversa. (AL aplicar el metodo de las potenicas, el elemento que interesa es lamda(end) >> [lambda, u, k,e,r]=potencias2(hilb(3),[1 1 1]',1e-5,10); >> lambda(end) %el valor propio ans = 1.4083 >> u %el vector propio u = 1.0000 0.5560 0.3909 --------------------------------------------- Que comparando con los obtenidos mediante eig. file:///E|/Documentos/Estudios/Documentacion%20Asignat...er%20Cuatrimestre/Practica%206%20-%202/practica6-2.txt (1 of 6) [09/03/2008 13:49:17] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat...atematicas/Primer%20Cuatrimestre/Practica%206%20-%202/practica6-2.txt >> [S,D] = eig(hilb(3)) S = -0.1277 0.5474 0.8270 0.7137 -0.5283 0.4599 -0.6887 -0.6490 0.3233 D = 0.0027 0 0 0 0.1223 0 0 0 1.4083 ------------------------------------------------ corresponde al ultimo de lso valores propios con su vector propio. Si lo aplicamos a la inversa >> [lambda, u, k,e,r]=potencias2(inv(hilb(3)),[1 1 1]',1e-5,10); >> lambda(end) ans = 372.1151 >> 1/lambda(end) ans = 0.0027 >> u u = -0.1789 1.0000 -0.9649 vemos que el valor es igual. El vector tb es igual (hay que normalizarlo) >> S/S(2,1) ans = -0.1789 0.7670 1.1587 file:///E|/Documentos/Estudios/Documentacion%20Asignat...er%20Cuatrimestre/Practica%206%20-%202/practica6-2.txt (2 of 6) [09/03/2008 13:49:17] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat...atematicas/Primer%20Cuatrimestre/Practica%206%20-%202/practica6-2.txt 1.0000 -0.7402 0.6443 -0.9649 -0.9093 0.4530 ---------------------------------------- Como se evita el calculo de la inversa? ---------------------------------------- en lugar de pedirle que haga v = inv(A)*u podemos pedirle v = A\u para ser mas estricto aun se podria utilizar la factorizacion LU ya que va a resolver el mismo sistema repetidas veces. -------------- potinv.m editamos potencias.m y cambiamos v = A\u; y añadimos lambda = 1./lambda ---------------- Veamos como funciona >> [lambda, u, k,e,r]=potinv(hilb(3),[1 1 1]',1e-5,10) >> lambda(end) ans = 0.0027 >> u u = -0.1789 1.0000 -0.9649 ---------------------------- ----------------------------- file:///E|/Documentos/Estudios/Documentacion%20Asignat...er%20Cuatrimestre/Practica%206%20-%202/practica6-2.txt (3 of 6) [09/03/2008 13:49:17] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat...atematicas/Primer%20Cuatrimestre/Practica%206%20-%202/practica6-2.txt Como encontramos los valores propios intermedios? A*u = h*u si desplazamos la matriz A con la identidad: dI da el desplazado del valor propio (A+dI)*u = (h+d)*u al desplazar la matriz, el valor mas procimo a cero resulta ser el valor mas procimo a d |-----------x-------x---------------x---- 0 ^ ------------x-----|-x---------------x---- 0 ^ Vamos a añadir al algoritmo de las potencias un parametro que sea d y le añadimos el comando: A = A - d*eye(size(A)); y a lambda le quitamos el desplazamiento que hemos hecho: que no te lie dçlo de restar y sumar, simplemente como el desplazamiento siempre conviene que sea negativo, lo ponemos ya como supuesto. >> [lambda, u, k,e,r]=potinv(hilb(3),[1 1 1]',1e-5,20,0.1); --> Valor propio mas proximo a d: ans = 0.1223 file:///E|/Documentos/Estudios/Documentacion%20Asignat...er%20Cuatrimestre/Practica%206%20-%202/practica6-2.txt (4 of 6) [09/03/2008 13:49:17] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat...atematicas/Primer%20Cuatrimestre/Practica%206%20-%202/practica6-2.txt --> Vector propio asociado: u = -0.8435 0.8140 1.0000 Que es en efecto el valor propio intermedio junto con su vector propio >> S./S(3,2) ans = 0.1967 -0.8435 -1.2743 -1.0998 0.8140 -0.7086 1.0611 1.0000 -0.4981 La situacion es mas complicada que esto, puesto que los valores propios pueden estar en C (complejos) ------------------------------------------------ Problemas que pueden haber ------------------------------------------------ Cuando los valores propios se amontonan El peor caso es cuando hay un valor propio doble. Para hallar los vectores propios independientes. Puede solo existir un vector propio. Puedes verlo en la aplicacion colgada en la web; Hay otra forma de calcular valores propios que numericamente tiene mejores propiedades. A = S * D * inv(S) ------------------------------------ Descomposicion en valores singulares file:///E|/Documentos/Estudios/Documentacion%20Asignat...er%20Cuatrimestre/Practica%206%20-%202/practica6-2.txt (5 of 6) [09/03/2008 13:49:17] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat...atematicas/Primer%20Cuatrimestre/Practica%206%20-%202/practica6-2.txt ------------------------------------ A(mxn) = U(mxm) S(mxn) V*(nxn) U y V unitarias (V* significa traspuesta conjugada) S 'diagonal' (puede no ser cuadrada) Las columnas de U son una base en el espacio de llegada Las sigmas, que forman la diagonal de S, son unos escalares Las filas (porq esta traspuesta) de V* son elemntos de una base en el espacio de partida |Rn ----> |Rn ver .doc Vamos a discretizar la X. >> A = fotox; file:///E|/Documentos/Estudios/Documentacion%20Asignat...er%20Cuatrimestre/Practica%206%20-%202/practica6-2.txt (6 of 6) [09/03/2008 13:49:17] 7 Integración Numérica (I) La integral definida de una función de una variable aparece en muchas aplicaciones geométricas y físicas, como el cálculo de longitudes, áreas y volúmenes, centros de gravedad y momentos de inercia. Para resolver analíticamente estos problemas necesitamos una expresión explícita del integrando y que ésta admita una primitiva sencilla, lo que limita la aplicabilidad a recintos de geometría simple. En la práctica además, sólo disponemos generalmente de un conjunto discreto de valores del integrando, por lo que hay que buscar una alternativa numérica a la evaluación de la integral. Las fórmulas de cuadratura numérica se reducen finalmente a una suma ponderada de valores de la función en determinados puntos del intervalo de integración. La forma de elegir estos puntos, llamados nodos, y los valores asignados a los pesos caracterizan las distintas fórmulas utilizadas. Los métodos que tratamos aquí toman nodos equiespaciados, lo que facilita su aplicación a datos experimentales. Una regla de integración numérica sencilla es la de trapecios. Ésta integra exactamente polinomios de primer grado. Un aspecto clave de la integración numérica es la estimación del error de las fórmulas de cuadratura. Damos fórmulas teóricas que acotan este error, aunque en la práctica lo estimamos comparando valores aproximados de la integral obtenidos con distinto número de intervalos. El método iterativo de trapecios evalúa eficientemente la integral al tiempo que proporciona una estimación del error. Exigiendo que la fórmula integre exactamente polinomios de segundo grado se obtiene la regla de Simpson. Aquí obtenemos esta fórmula mediante el análisis del error de la fórmula de los trapecios, según el llamado método de extrapolación de Richardson. La aplicación reiterada de esta técnica da lugar a la integración de Romberg que, bajo ciertas condiciones, proporciona fórmulas de precisión teóricamente tan alta como se quiera. MATLAB incorpora métodos de cuadratura adaptativa, que toman más o menos nodos según el comportamiento de la función en cada parte del intervalo de trabajo. 7.1 Integral definida: Cálculo Los métodos numéricos de integración se basan en la interpretación de la integral definida como medida del área entre la gráfica de la función, el eje de abscisas y las ordenadas de los extremos del intervalo. Constituyen la alternativa a la Regla de Barrow cuando no se dispone de la primitiva, bien porque es difícil de calcular o bien porque el integrando sólo se conoce en un número finito de puntos, al proceder de datos experimentales. Hay funciones relativamente sencillas, como sen(x)/x, cuya primitiva no tiene una expresión analítica finita. Muchas funciones de gran importancia en las aplicaciones se definen mediante integrales de este tipo, por ejemplo, la función Gamma de Euler 1 0 ( ) , 0 t x x e t dt x ∞ − − Γ = > ∫ o la función de error, 2 0 2 ( ) x t erf x e dt π − = ∫ que está relacionada con la distribución de probabilidad normal, o distribución de Gauss. Se supone generalmente que los errores producidos al efectuar una medida experimental siguen la distribución normal. Numéricamente, aproximaremos la integral mediante una suma ponderada de valores de la función en ciertos puntos del intervalo de integración llamados nodos. Los coeficientes de la fórmula se llaman pesos. 1 1 2 2 ( ) ( ) ( ) ... ( ) b n n a f x dx p f x p f x p f x ≅ + + + ∫ La suma de los pesos debe ser igual a la longitud del intervalo. 1 2 n p p p b + + + = − L a En el caso de integrandos procedentes de datos experimentales, además de no disponer, obviamente, de la primitiva, conocemos los valores de la función sólo en un número finito de nodos. Esto limita los métodos aplicables, pues muchos de ellos requieren nodos en cantidad y posición fijas, lo que es difícil de conseguir experimentalmente. 7.2 Formula de los Trapecios La fórmula de los trapecios simple se obtiene al aproximar el integrando f en [a,b] por la recta que une los puntos (a, f(a)) y (b, f(b)). La integral de esta función de grado 1 es el área del trapecio rectángulo de bases f(a) y f(b) y altura b-a. De aquí el nombre del método. Dicha área es ( ) ( ) ( ) 2 T f a f b I b a + = − El error de la fórmula depende de lo curvada que sea la función entre a y b. Como la derivada segunda mide la curvatura, es razonable que esta derivada aparezca en la expresión del error. En consecuencia, la fórmula será exacta para funciones con derivada segunda nula, o sea, polinómicas de primer grado. 3 ( ) ( ), para cierto [ , ] 12 T b a E f ξ ξ − = − ∈ ′′ a b Trapecio Función f(a) f(b) a b Fórmula de los Trapecios Simple Para disminuir el error, dividimos el intervalo en subintervalos y aplicar la fórmula de trapecios en cada subintervalo. Así obtenemos la fórmula de trapecios compuesta. Si dividimos [a,b] en n subintervalos iguales de longitud h=(b-a)/n, aplicamos la fórmula de trapecios simple a cada subintervalo y sumamos los resultados, obtenemos la fórmula de trapecios compuesta. Se trata de una fórmula cerrada (es decir, que los extremos del intervalo son nodos de integración) en la que los nodos interiores tienen peso h y los extremos peso h/2 cada uno. 0 1 2 1 [ ] ( 2 2 2 ) 2 n T n h I h y y y y y − = + + + + + L El error de la fórmula de los trapecios se expresa en función de la derivada segunda de f en un punto del intervalo. 2 ( ) ( ), para cierto [ , ] 12 T h E b a f ξ ξ = − − ∈ ′′ a b Si la derivada segunda no varía mucho. Se puede suponer que el error es proporcional a h 2 , lo que significa que al duplicar el número de subintervalos, esperamos que el error se divida por 4. Esta suposición no es válida si la derivada segunda no está definida en algún punto del intervalo. En MATLAB construimos fichero.m con el siguiente algoritmo. Algoritmo de Trapecios • Entrada: a, b: intervalo n: número de subintervalos • Salida: I: estimación de la integral por la fórmula de los trapecios • Proceso: Calcular el paso, h=(b-a)/n Crear el vector de nodos, x=a:h:b Calcular el vector de ordenadas, y=f(x) Construir un vector con los pesos, p=h/2*[1 2 2 . . . 2 1] Evaluar la formula de los trapecios: I=p*y' Ejemplo 1 Considera la integral 2 0 sen x dx x π ∫ Evalúa la integral por el Método de los Trapecios con 2, 4 y 8 intervalos. Define la función en x=0 para evitar la indeterminación. damos los valores del intervalo y calculamos para el primer valor de n y obtenemos h. n=2,a=0, b=pi/2, h=(b-a)/n n = 2 a = 0 b = 1.5708 h = 0.7854 Definimos una función.m senxx y calculamos el valor de la integral i=trapecio('senxx',a,b,2) i = 1.3498 Caslculamos la integral para evitar que se indetermine en x=0. i=trapecio('f',a+eps,b,2) y = 1.0000 0.9003 0.6366 i = 1.3498 Lo mismo para n=4, 8. La acotación del error de la fórmula de los trapecios no es práctica pues requiere el cálculo de la derivada segunda. En su lugar, aplicamos la fórmula con distinto número de subintervalos, n 1 y n 2 y tomamos la diferencia entre los resultados como estimación del error. Si el n 2 es múltiplo de n 1 , se pueden reutilizar los nodos ya calculados. Duplicando cada vez el número de intervalos, introducimos la mínima cantidad posible de nodos nuevos. Con el mismo trabajo que costaría considerar un nodo más, obtenemos una precisión cuatro veces mayor. Veamos la relación entre dos evaluaciones de la fórmula de los trapecios, una con doble número de subintervalos que la otra. Denotamos por I T [h] la integral de f en [a,b], por la fórmula de los trapecios con paso h = (b – a)/n y nodos a = x 0 < x 1 < x 2 < … < x n–1 < x n = b. Introducimos ahora nodos intermedios, a + h/2 = x 1/2 < x 3/2 < … < x (2n–1)/2 = b – h/2 quedando 2n subintervalos de longitud mitad, h/2. Evaluamos la fórmula de los trapecios con paso h/2 y, agrupando los términos correspondientes a la integración de paso h, obtenemos la nueva integral en términos de la anterior y de los valores de f en los nuevos nodos. De este modo sólo realizamos las operaciones estrictamente necesarias y obtenemos de propina la estimación del error. I T [h/2] = h/4 (y 0 + 2y 1/2 + 2y 1 + 2y 3/2 + 2y 2 +... + 2y (2n-1)/2 + y n ) = = h/4 (y 0 + 2y 1 + 2y 2 + ... + 2y n-1 + y n ) + + h/2 (y 1/2 + y 3/2 + y 5/2 + ... + y (2n-1)/2 ) = = I T [h]/2 + h/2(y 1 + y 3 +...+y n-1 ) Mediante esta relación, construiremos un algoritmo de trapecios iterativo que va duplicando el número de subintervalos hasta que la variación entre dos evaluaciones consecutivas sea menor que la tolerancia exigida. ] [ ] 2 / [ ] 2 / [ h I h I h E T T − ≅ Algoritmo de iterativo de Trapecios • Entrada: a, b: intervalo n: número de subintervalos tol: precisión maxiter: tope de iteraciones • Salida: I: estimación de la integral por la fórmula de los trapecios incr: estimación del error iter: número de iteraciones efectuadas • Proceso: Calcular la estimación inicial de I T [h] por trapecios con paso h Inicializar incr y el contador de iteraciones, iter Mientras incr >tol y iter < maxiter Hallar los nosdos nuevos, x=[x 1/2, x 3/2 , ... , x n-1/2 ] Calcular el vector de ordenadas y=f(x) Refinar la estimación I T [h/2]=I T [h] + h/2*sum(y) Calcular incr, incrementar iter Dividir h por 2 Actualizar I T [h]. Ejemplo 2 Definimos una función .m llamada trapiter y resolvemos el siguiente aopartado del ejemplo anterior. ¿Cuántos intervalos serían necesarios para obtener una precisión del orden de 10 −4 ? Para obtener una precisión de ese orden tol vale 10^-3 porque si ponemos nos sale una precisión de 10^-5, 10^-6, ... Aplicamos la función .m trapiter [sol,iter,incr]=trapiter('senxx',0,pi/2,4,1e-4,100) sol = 1.3707 iter = 5 incr = 6.1037e-005 Sol: n=4*2^(iter-1)=64 7.3 Regla de Simpson La fórmula de los trapecios integra exactamente los polinomios de primer grado utilizando dos nodos, x 0 y x 1 en el intervalo [a,b]. Añadiendo un nodo más, esperamos que para ciertos pesos a determinar, la fórmula I = p 0 f(x 1 ) + p 1 f(x 2 ) + p 2 f(x 3 ) sea exacta para polinomios de segundo grado. Los pesos se determinan sustituyendo f por un polinomio de grado 2 y resolviendo el sistema lineal resultante. En el caso particular de x 1 = a; x 2 = (a+b)/2; x 3 = b, queda la regla de Simpson simple. ( ) 2 ( ) ( ) 4 ( ) ( ) 6 b S a a b b a f x dx I f a f f b + − ≅ = + + ∫ La característica más destacable de esta fórmula es que resulta exacta para polinomios de tercer grado, mientras que en su construcción sólo se exigía la exactitud para grado 2. El error cometido al aproximar la integral de una función cualquiera con derivada cuarta continua viene dado por la fórmula 5 ( ) ( ), [ , ] 2880 IV S S b a E I I f a b ξ ξ − = − = − ∈ Para reducir el error, subdividimos el intervalo [a,b] en partes iguales antes de aplicar la regla de Simpson. Así obtenemos la regla de Simpson compuesta. Parábola Función Simpson simple Parábol Función Simpson compuesta a (a+b)/2 b x 0 x 1 x 2 x 3 x 4 Algoritmo de la regla de Simpson Compuesta • Entrada: a, b: intervalo n: número de subintervalos ( ha de ser par ) • Salida: I: estimación de la integral por la regla de Simpson • Proceso: Calcular el paso, h=(b-a)/n Crear el vector de nodos, x=a:h:b Calcular el vector de ordenadas, y=f(x) Construir un vector con los pesos, p=h/3*[1 4 2 4 2 . . . 2 4 1] Evaluar la formula de los trapecios: I=p*y' La fórmula de Simpson es de orden 4, lo que significa que al duplicar el número de intervalos, el error se divide por 2 4 . En la práctica esto supone que cada vez que el paso se divide por 2, el error se divide por 2 4 = 16, con lo que se obtiene al menos una cifra decimal exacta más en el resultado. Vamos a obtener la regla de Simpson por un procedimiento alternativo que proporciona directamente estimaciones del error. Además, este procedimiento se generaliza fácilmente, dando lugar a fórmulas de integración de precisión tan alta como queramos, al menos en teoría. El error de la fórmula de los trapecios es aproximadamente proporcional a h 2 , si la derivada segunda del integrando no varía mucho en el intervalo de integración. Evaluando esta fórmula para dos valores de h (como hemos visto, lo más fácil es tomar h y h/2, y aplicar trapecios iterativo), eliminamos el término de orden 2 del error y obtenemos una estimación más precisa de la integral. Este truco se denomina extrapolación de Richardson. Desarrollando las integrales que aparecen en la fórmula de Richardson, se comprueba que esta estimación es precisamente la Regla de Simpson con paso h/2, cuyo error es de orden h 4 . Algoritmo de Simpson-Richardson • Entrada: a, b: intervalo n: número de subintervalos dobles • Salida: I: estimación de la integral por la regla de Simpson • Proceso: Calcular el paso, h=(b-a)/n Calcular I T [h] por trapecios Calcular I T [h/2] como en trapecios iterativos Calcular I S por la formula I S =(4*I T [h/2]-I T [h])/3 La idea de Richardson que proporciona la integral de Simpson (de orden 4) a partir de dos estimaciones de trapecios (de orden 2) se puede aplicar también a dos estimaciones de Simpson para obtener una estimación de mayor orden (6). 2 2 4 2 2 4 1 S S R def I [ h ] I [h] I I − ≅ = − [ h ] Análogamente, dos estimaciones de orden 6 proporcionan una estimación de orden 8, y así sucesivamente. Ejemplo 3 Definimos una función .m simpson la cual aplicamos para calcular la integral del Ejemplo 1 por la Regla de Simpson con 2, 4 y 8 intervalos. i=simpson('senxx',0,pi/2,2) n = 2 i = 1.3713 7.4 Integración de Romberg La aplicación sistemática de la extrapolación de Richardson se conoce con el nombre de Integración de Romberg. La fórmula de los trapecios para cierto h proporciona la primera estimación de la integral, I T [h]. Obtenemos una segunda estimación con paso h/2, por trapecios iterativos, y de ambas, una estimación de Simpson I S [h/2]. El tercer paso comienza con la estimación I T [h/4], que junto con I T [h/2], da lugar a otra estimación de Simpson, I S [h/4]. De las dos estimaciones disponibles de Simpson se obtiene la primera de Romberg: I R [h/4]. El proceso se puede continuar hasta alcanzar la precisión requerida. Diseñamos un procedimiento de MATLAB que devuelva una matriz con las estimaciones calculadas por el método de Romberg. El programa contiene dos bucles while anidados. El while interno recorre una fila y el externo crea una fila nueva. El primer elemento de cada fila se obtiene por la fórmula de los trapecios, directa en la primer fila y por refinamiento iterativo en las siguientes. Los restantes elementos de la fila, hasta la diagonal, se obtienen por la fórmula de Romberg adecuada. • Entrada: a, b: intervalo n: número de subintervalos tol: precisión maxiter: tope de iteraciones • Salida: I: Tabla de Romberg incr: estimación del error k: número de iteraciones efectuadas • Proceso: Calcular I 11 por trapecios con n intervlos Inicializar incr, k Mientras incr >tol y k < maxiter Evaluar I k1 refinado I k-1,1 % Primer elemento Inicializar j Mientras Incr > tol y j < k % Resto de la fila k Calcular I kj por la fórmula de Romberg Incrementar j Incrementar k Si incr > tol mensaje de error: no logragada convergencia Aplicamos ahora el Método de Romberg Ejemplo 4 Definimos una función .m romberg. Evalúamos la integral del Ejemplo 1 por el método de Romberg, partiendo de trapecios simple con un máximo de 8 subintervalos. [sol,i,incr,k]=romberg('senxx',0,pi/2,8,1e-4,100) sol = 1.3708 i = 1.3695 0 0 1.3704 1.3708 0 1.3707 1.3708 1.3708 incr = 7.4353e-009 k = 2 7.5 Problemas 1. La longitud de una curva de ecuación y=f(x), para x variando en [a,b], viene dada por la integral 2 1 b a y dx ′ + ∫ . Halla la longitud de una elipse de semiejes 2 y 1. 2. La integral elíptica completa de primera especie es 2 2 2 0 ( ) 1 sin sin dx K x π θ θ = − ∫ Calcula K(π/6) utilizando la regla de Simpson con cuatro intervalos. El resultado exacto con cuatro decimales es 1'6858. Halla K(17π/36), cuyo valor aproximado es 3'832. ¿Por qué tiene tanto error este resultado, mientras que el primero era bastante preciso? 3. En teoría de campos eléctricos se prueba que el campo magnético inducido por una corriente en una espira circular de alambre es 2 2 2 0 ( ) ( ) sin x r H x I d π θ θ = − ∫ donde I es la intensidad de la corriente, r el radio de la circunferencia y x la distancia del centro al punto donde se calcula el campo. Si I=15.3, r=120 y x=84, halla el campo en x por integración de Romberg con tolerancia 10 −6 . 4. La función de Bessel de orden 0 está definida por la ecuación 0 0 1 ( ) cos( sin ) J x x d x π θ θ = ∫ Halla J 0 (1) por la fórmula de Simpson 3/8. 4. (Examen de Septiembre de 1998). El área de un círculo de radio 1 se obtiene integrando su ecuación explícita en [-1,1]: 1 2 1 2 1 x dx π − = − ∫ a) Aproxima esta integral por el método de Romberg, a partir de valores de trapecios con 2, 4, 8, 16 y 32 intervalos. Explica por qué la estimación obtenida por trapecios no mejora sustancialmente al aplicar Romberg. El área del círculo puede aproximarse mediante el área de polígonos inscritos. Utilizaremos para ello el cuadrado (de lado √2) y los polígonos regulares de 8, 16, 32 y 64 lados. Es fácil comprobar que el área del polígono regular de 2n lados es A 2n = nx n /2, siendo x n el lado del polígono regular de n lados (la mitad). También es fácil obtener una relación algebraica entre los lados de estos polígonos: 2 2 2 2 4 n n x x = − − b) Halla las áreas de los polígonos mencionados. Escribe los comandos o archivos.m elaborados para ello. c) Comprueba numéricamente que la diferencia entre el área del círculo y la del polígono es proporcional al cuadrado del lado. ¿Cuál es el coeficiente de proporcionalidad? d) Suponiendo que al tomar el doble de lados, la longitud del lado se divide aproximadamente por 2, aplica el algoritmo de Romberg a las áreas halladas para obtener una mejor estimación de π. Compara los resultados con los del apartado a). (Indicación: modifica el algoritmo de Romberg para que en lugar de calcular la primera columna por trapecios, la admita como argumento de entrada) 7.6 Soluciones file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%207/Practica%207.txt Métodos para calcular la primitiva ---------------------------------- FORMULA DE LOS TRAPECIOS ------------------------ Aproximar el area bajo una curva mediante una figura mas sencilla pero similar. El area del trapecio (que se puede convertir en un cuadrado cortando un trozo y poniendola arriba) viene dada como f(a)+f(b) (b -a)--------- 2 El error en esa aproximacion viene dada por: (b - a)^3 E = - --------- f''(e) para cierto e E [a,b] 12 Nota: f''(e) = 0 para polinomios de primer grado, en los cuales el error es cero Nota: f''(e) indica si la funcion es concava o convexa, indicando si el error es positivo o negativo (sobreestimado o subestimado) Nota: Si la funcion no es ni fu ni fa, algunos trozos por encima, otros por debajo para saber si el error es negativo o positivo depende del tamaño de las zonas por encima o por debajo. Nota: (b-a)^3 puede ser un numero muy grande. Conviene dividir el trapecio en trapecios mas pequeños (ver apuntes a mano) ------ file:///E|/Documentos/Estudios/Documentacion%20Asignatu...cas/Primer%20Cuatrimestre/Practica%207/Practica%207.txt (1 of 2) [09/03/2008 13:49:20] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%207/Practica%207.txt >> [I,incr,k] = trapiter('cos',0,pi/2,5,1e-8,20) I = Columns 1 through 2 0.99176176875473 0.99794298635436 .... incr = 5.882744735785650e-009 k = 12 >> I' ans = 0.99176176875473 0.99794298635436 0.99948590524853 0.99987148622292 0.99996787217507 0.99999196808247 0.99999799202304 0.99999949800591 0.99999987450149 0.99999996862537 0.99999999215634 0.99999999803909 >> (4*I(2)-I(1))/3 ans = 1.00000339222090 file:///E|/Documentos/Estudios/Documentacion%20Asignatu...cas/Primer%20Cuatrimestre/Practica%207/Practica%207.txt (2 of 2) [09/03/2008 13:49:20] 8. Integración numérica (III) 8.1. Métodos de Newton-Cotes Los métodos numéricos de integración vistos hasta ahora se basan en dividir el intervalo de integración en subintervalos iguales a los que se aplica una fórmula simple que satisface ciertas condiciones y sumar los resultados de cada subintervalo. En el caso de la fórmula de los trapecios, la condición es integrar exactamente funciones de primer grado y en la de Simpson funciones de segundo grado, aunque en este caso resulta exacta para polinomios de tercer grado incluso. El aumento de precisión de estos métodos se consigue aumentando el número de subintervalos. La alternativa que examinamos en esta sección consiste en lograr fórmulas simples más precisas, a base de exigir que integren exactamente polinomios de mayor grado. Se obtienen así las llamadas fórmulas de Newton-Cotes, que engloban las anteriores como caso particular. En la sección siguiente abordamos una estrategia complementaria más sofisticada, consistente en aplicar estas fórmulas a subintervalos de tamaño variable que se determina en función del error estimado en cada subintervalo. Es lo que se llama integración adaptativa. Figura 1: Nodos y valores de la función en el intervalo de integración. La idea de los métodos de integración de tipo interpolatorio consiste en determinar los pesos n p p p , , , 2 1 K , para que la fórmula ) ( ) ( ) ( ) ( 2 2 1 1 1 n n n x f p x f p x f p f I + + + = − K (8.1) integre exactamente polinomios de grado inferior a n en el intervalo [a, b], siendo n x x x , , , 2 1 K , puntos dados de dicho intervalo llamados nodos. Los pesos se determinan resolviendo el sistema lineal que se obtiene al imponer las condiciones requeridas. Para 1 , , 2 , 1 , 0 − = n k K , al exigir que la fórmula integre exactamente x k en [a, b] queda dx x x I b a k k n ∫ = − ) ( 1 1 1 1 2 2 1 1 + − = + + + + + k a b x p x p x p k k k n n k k K (8.2) f(x 2 ) f(x 1 ) f(x 3 ) f(x n ) a x 1 x 2 x 3 · · · · x n b La matriz del sistema resultante es de tipo Vandermonde, lo que, en teoría, garantiza la existencia de solución y, en la práctica, la inestabilidad del resultado. La calidad de la fórmula resultante depende en gran manera de los nodos. Lo más habitual es considerar nodos uniformemente repartidos en el intervalo, dado que son aplicables a la integración de datos experimentales. Este es el caso de las fórmulas de Newton-Cotes. Las fórmulas de integración de Gauss, que no tratamos aquí, eligen los nodos de manera que se consiga la mayor precisión posible. Los nodos resultan no equiespaciados, por lo que el integrando debe poder evaluarse en ellos, lo cual es un inconveniente grave en las aplicaciones prácticas. Casi siempre se eligen los nodos dispuestos simétricamente en el intervalo, aunque a continuación vemos un ejemplo elemental dónde no es así. Ejemplo 1 Si consideramos un solo nodo situado en el extremo izquierdo del intervalo y exigimos que la fórmula 8.1 integre exactamente polinomios de grado 0, o sea, constantes, se ha de verificar: 1 1 1 p a b dx b a = − = ∫ de donde se obtiene la fórmula ) ( ) ( ) ( a f a b dx x f b a − ≅ ∫ que se denomina fórmula del extremo izquierdo y que, por construcción resulta exacta para polinomios de grado 0. Para obtener una fórmula más precisa, hemos de tomar más nodos. Ejemplo 2 Supongamos que queremos integrar la función seno entre 0 y 2 π a partir de los valores de la tabla adjunta, utilizando una fórmula interpolatoria de máximo grado. 1 2 / 3 2 / 2 2 / 1 0 sin 2 / 3 / 4 / 6 / 0 x x π π π π En primer lugar creamos un vector para los nodos y otro para los valores del integrando. x = [0 pi/6 pi/4 pi/3 pi/2] y = [0 1/2 sqrt(2)/2 sqrt(3)/2 1] Como hay 5 nodos, la fórmula debe integrar polinomios de grado 4. La matriz del sistema tiene en la fila k los valores de 1 − k x en los nodos. A = [x.^0; x; x.^2; x.^3; x.^4] A = 1.0000 1.0000 1.0000 1.0000 1.0000 0 0.5236 0.7854 1.0472 1.5708 0 0.2742 0.6169 1.0966 2.4674 0 0.1435 0.4845 1.1484 3.8758 0 0.0752 0.3805 1.2026 6.0881 El término independiente de la ecuación k-ésima es ( ) k dx x k k 2 2 0 1 π π = ∫ − o sea q =pi/2; c = [q; q.^2/2; q.^3/3; q.^4/4; q.^5/5] b = 1.5708 1.2337 1.2919 1.5220 1.9126 Resolvemos el sistema para hallar los pesos pesos = A\c pesos = 0.1440 1.0603 -0.8378 1.0603 0.1440 Multiplicando por los valores y sumando se obtiene la integral aproximada: y*pesos ans = 1.0000 Nota: La obtención de la matriz del sistema puede abreviarse con MATLAB usando A = rot90(vander(x)). A menudo, y sobre todo cuando se trabaja con nodos equiespaciados, es conveniente normalizar el intervalo y utilizar los pesos calculados para el intervalo normalizado. Éste intervalo suele ser [0, 1] o [-1, 1]. Para aplicar una fórmula válida en un intervalo normalizado a una integral sobre un intervalo cualquiera [a, b], basta tomar los nodos adecuados en éste intervalo y multiplicar los pesos por el cociente entre la longitud del intervalo de integración y el normalizado. Ejemplo 3 Vamos a calcular el área de la cardioide de ecuación polar θ ρ cos 1+ = en el intervalo ] , 0 [ π . No es difícil obtener el resultado analíticamente ( ) ( ) 3562 . 2 4 3 2 1 1 2 1 2 2 cos 1 cos 2 1 2 1 cos cos 2 1 2 1 cos 1 2 1 2 1 0 0 0 2 0 2 0 2 ≅ =       + =       + + + = + + = + = = ∫ ∫ ∫ ∫ ∫ π θ θ θ θ θ θ θ θ θ θ ρ π π π π π d d d d d A Se trata de aproximar esta integral por la fórmula del Ejemplo 2. En este caso, basta multiplicar los pesos por 2 y escalar los nodos en la misma proporción. 0.5 1 1.5 2 30 60 90 120 150 180 0 nodos = 2*x; y = (1+cos(nodos)).^2/2; pesos2 = 2*pesos; y*pesos2 ans = 2.3889 El error cometido es 3*pi/4-ans ans = -0.0327 8.1.1.1. Transformación de intervalo Si la adaptación no es obvia, se efectúa una transformación lineal que aplique un intervalo en otro. Supongamos que tenemos la fórmula normalizada ) ( ) ( ) ( ) ( 2 2 1 1 n n x f p x f p x f p dx x f + + + ≅ ∫ K β α y hemos de evaluar la integral dt t g b a ∫ ) ( . Buscamos un cambio de variable de la forma n mx t + = que transforme el intervalo ] , [ b a en ] , [ β α . Ello se consigue para los valores de m y n siguientes α β α β α β − − = − − = b a n a b m , La fórmula de integración adaptada al nuevo intervalo es ) ( ) ( ) ( ) ( 2 2 1 1 n n b a t g q t g q t g q dt t g + + + ≅ ∫ K , donde k k mp q = y n mx t k k + = , para n k , , 2 , 1 K = . Los nodos de las fórmulas de Newton-Cotes son puntos equiespaciados en el intervalo de integración que se obtienen dividiéndolo en partes iguales y tomando los extremos de los subintervalos resultantes. Las fórmulas de Newton-Cotes se denominan fórmulas cerradas o fórmulas abiertas, según consideren o no como nodos los extremos del intervalo inicial. 8.1.1 Fórmulas de Newton-Cotes cerradas La fórmula de Newton-Cotes cerrada de orden n se obtiene dividiendo el intervalo en n subintervalos iguales, tomando sus n+1 extremos como nodos de integración y determinando los pesos de la fórmula 8.1 para que integre exactamente polinomios de grado n. Las fórmulas basadas en un número impar de nodos (n par) son exactas para polinomios de grado n+1, un grado más de lo esperado, por lo que suelen preferirse a las de n impar. Ejemplo 4 La fórmula de los trapecios simple es la fórmula de Newton-Cotes cerrada de orden 1. Se obtiene al tomar como nodos los extremos del intervalo. El sistema 8.2 queda : 2 2 2 2 1 2 1 a b b p a p a b p p − = + − = + y los pesos son 2 2 1 a b p p − = = dando la fórmula de Trapecios simple: ( ) ) ( ) ( 2 ) ( b f a f a b f I T + − = . Ejemplo 5 Vamos a obtener la fórmula de Newton-Cotes cerrada de orden 2. Para simplificar los cálculos elegimos [−1, 1] como intervalo de integración. Imponemos que la fórmula 8.1 integre exactamente los polinomios 1, x, y x 2 . El sistema 8.2 queda entonces 3 2 0 2 3 1 3 1 3 2 1 = + = + − = + + p p p p p p p de donde . 3 4 ; 3 1 2 3 1 = = = p p p Para que los pesos sean aplicables a un intervalo cualquiera [a, b], realizamos el cambio de intervalo (3) con 1 − = α y : 1 = β . 2 , 2 b a b a n a b a b m + = − − = − = − − = α β α β α β Los pesos quedan , 6 4 3 4 ; 6 3 1 2 3 1 a b m q a b m q q − = = − = = = y los nodos . , 2 , 3 2 1 b t b a t a t = + = = La fórmula obtenida es la regla de Simpson simple: . ) ( 2 4 ) ( 6 ) (         +       + + − ≅ ∫ b f b a f a f a b dx x f b a Ejemplo 6 En el Ejemplo 3 calculamos el área de media cardioide mediante una fórmula basada en 5 nodos no equiespaciados. Tomando los nodos equiespaciados, el cálculo corresponde a la fórmula de Newton-Cotes de orden 4. x = 0:pi/4:pi y = (1+cos(x)).^2/2 A = rot90(vander(x)) q = pi; c = [q; q.^2/2; q.^3/3; q.^4/4; q.^5/5] pesos = A\c y*pesos El resultado obtenido, 2.3736, es más aproximado que el del citado ejemplo, pues el error es de −0.0175. La determinación numérica de los pesos se ve afectada por el mal condicionamiento del sistema lineal resultante. Para n elevado, los errores de redondeo limitan la precisión de los pesos que se obtienen, por lo que hay que recurrir a métodos analíticos para su determinación. Otro inconveniente de estas fórmulas al aumentar n es que aparecen pesos de gran valor absoluto y distinto signo, lo que se traduce al aplicar la fórmula en substracción de cantidades grandes, que pueden dar lugar a “cancelaciones catastróficas”. 8.1.2 Fórmulas de Newton-Cotes abiertas La fórmula de Newton-Cotes abierta de orden n se obtiene dividiendo el intervalo en n+2 partes iguales, tomando como nodos los n+1 puntos de división y determinando los pesos de la fórmula 8.1 para que integre exactamente polinomios de grado n. Como en el caso de las fórmulas cerradas, las fórmulas con un número impar de nodos (n par) son exactas para polinomios de grado n+1, cuando lo exigido era de grado n. El hecho de que en las fórmulas abiertas no intervengan los valores del integrando en los extremos del intervalo permite aplicarlas a integrales impropias en que presentan valores infinitos en los extremos. En este caso, conviene analizar previamente la convergencia de la integral y estimar de algún modo el error. En contrapartida, las fórmulas abiertas presentan mayor error que las cerradas del mismo orden, por lo que éstas son más utilizadas en general. Ejemplo 7 La fórmula de Newton-Cotes abierta correspondiente a n=0 es la llamada fórmula de punto medio, porque éste es el único nodo de integración. ) 2 ( ) ( ) ( b a f a b dx x f b a + − ≅ ∫ . Esta fórmula supera las expectativas de precisión al integrar exactamente polinomios de grado 1 y no sólo los de grado 0 para los que está diseñada. Ejemplo 8 La fórmula de Newton-Cotes abierta de orden 2 se obtiene dividiendo el intervalo en 4 partes y considerando como nodos los extremos interiores de los subintervalos. Por ejemplo, tomando [−1, 1] como intervalo de integración, los nodos son –1/2, 0 y 1/2. Exigiendo que la fórmula 8.1 integre exactamente los polinomios 1, x, y x 2 , se obtiene el sistema: 3 2 4 1 4 1 0 2 1 2 1 2 3 1 3 1 3 2 1 = + = + − = + + p p p p p p p de donde . 3 2 ; 3 4 2 3 1 − = = = p p p Para que los pesos sean aplicables a un intervalo cualquiera [a, b], realizamos el cambio de intervalo (3) con 1 − = α y : 1 = β . 2 , 2 b a b a n a b a b m + = − − = − = − − = α β α β α β Los pesos quedan , 3 3 2 ; 3 2 3 4 2 3 1 a b m q a b m q q − − =       − = − = = = y los nodos . 4 3 , 2 , 4 3 3 2 1 b a t b a t b a t + = + = + = La fórmula obtenida es: . 4 3 2 2 4 3 2 3 ) (               + +       + −       + − ≅ ∫ b a f b a f b a f a b dx x f b a Ejemplo 9 Comparemos la precisión de las fórmulas abiertas y cerradas estimando el área de media cardioide por medio de la fórmula de Newton-Cotes abierta de orden 4. h = pi/6 x = 0+h:h:pi-h y = (1+cos(x)).^2/2 A = rot90(vander(x)) q = pi; c = [q; q.^2/2; q.^3/3; q.^4/4; q.^5/5] pesos = A\c y*pesos El resultado obtenido es 2.3169 y el error de 0.0393, que es mayor que el de la fórmula cerrada. 8.1.3 Fórmulas de Newton-Cotes compuestas El error de las fórmulas de Newton-Cotes depende de una potencia del tamaño del intervalo. Conviene pues que el intervalo de integración sea pequeño. Si no lo es, la solución obvia es dividir el intervalo de integración en pequeños subintervalos iguales y aplicar a cada subintervalo la correspondiente fórmula. De este modo se obtienen las fórmulas de Newton-Cotes compuestas. Son conocidas las fórmulas los Trapecios y la de Simpson, pero el procedimiento es completamente general, dando lugar a fórmulas compuestas de orden cualquiera. Por regularidad y precisión, son más usuales las de tipo cerrado, siendo la de punto medio la única abierta que suele usarse en versión compuesta. Ejemplo 10 La fórmula de punto medio compuesta en [a, b] se obtiene dividiendo el intervalo en m subintervalos y tomando como nodos los puntos medios de los mismos, . , , , 2 1 m x x x K Se evalúa la integral por punto medio en cada subintervalo, multiplicando su longitud por el valor de la función en el nodo correspondiente y se suman los resultados. La fórmula queda ( ), ) ( ) ( ) ( ] [ 2 1 m M x f x f x f h h I + + = donde h es la longitud de los subintervalos: m a b h − = . Ejemplo 11 Para estimar la integral dx x x ∫ π 2 0 sin utilizando un método cerrado, hay que definir explícitamente el valor del integrando en 0, que es 1, porque si evaluamos directamente la función, da una indeterminación. Sin embargo, usando un método abierto, evitamos calcular la función en 0 y se puede aplicar directamente la fórmula de integración. Por ejemplo, estimemos esta integral por el método de punto medio con 25 subintervalos. a = 0; b = 2*pi; m = 25; h = (b-a)/m; x = a+h/2 : h : b-h/2; % Nodos de integración y = sin(x)./x; I = h*sum(y) I = 1.4177 Aplicando un método compuesto con distintos valores de h podemos estimar el error y su orden. Ejemplo 12 Evaluamos la integral anterior por la fórmula de punto medio con 25 y 50 intervalos, obteniendo 41773 . 1 1 = I e 41805 . 1 2 = I , respectivamente. La diferencia entre ambos, 4 10 1 . 3 − ⋅ es una estimación aproximada del error. El resultado de la fórmula con 100 intervalos es 41813 . 1 3 = I . El valor del cociente 25 . 0 1 2 2 3 ≅ − − I I I I indica que el error estimado se divide por 4, al dividir el paso h por 2. Concluimos que el error es proporcional a h 2 . Podemos obtener una estimación mejor de la integral siguiendo la idea de Romberg: 41815 . 1 3 4 2 3 = − = I I I R . 8.2. Integración adaptativa Los métodos de integración vistos hasta ahora son independientes del comportamiento del integrando en el intervalo. La estrategia para reducir el error consiste en aumentar el número de subintervalos o el orden del método utilizado. Estos métodos pueden tener dificultades si el integrando varía bruscamente en unas zonas del intervalo y suavemente en otras. En el mejor de los casos, se toma un paso muy pequeño para aproximar bien las variaciones bruscas, lo que trae consigo un elevado número de operaciones que no se necesitan en la zona de variación suave. Para tratar estos casos, se definen los métodos adaptativos, cuya idea es trabajar más allí donde sea necesario y ahorrar operaciones donde el integrando se comporte mejor. Para ello, comienzan aplicando un método determinado, trapecios por ejemplo, primero con uno y luego con dos subintervalos. Si la diferencia entre las estimaciones es mayor que la tolerancia establecida, se repite el procedimiento con cada uno de los dos subintervalos considerados. El proceso de subdivisión prosigue hasta alcanzar la precisión requerida o un nivel máximo de recursión que se establece para que el algoritmo no cicle indefinidamente. La adaptabilidad del método consiste en que en cada subintervalo, el número de subdivisiones realizadas puede ser distinto, dependiendo del comportamiento del integrando en el mismo. Las funciones quad y quad8 de MATLAB son métodos adaptativos basados en el método de Simpson y en método de Newton-Cotes cerrado con 8 subintervalos, respectivamente. Introduciendo un parámetro adicional en la llamada a estos métodos, se representan los valores usados en la estimación de la integral. Se observa la acumulación de los mismos en las zonas más críticas de la función. Ejemplo 13 Para integrar la función de Runge en el intervalo [0, 10] mediante quad, hay que definir previamente un fichero, runge.m, con la función a integrar: function y=runge(x) y=1./(1+x.^2); Utilizamos quad con tolerancia 10 -2 : quad('runge',0,10,1e-2,1) ans = 1.47115451163704 Los argumentos son: el nombre del fichero con el integrando, los extremos del intervalo de integración, la tolerancia y un quinto parámetro que causa la representación gráfica de los valores del integrando utilizados en la evaluación. La figura adjunta muestra las abscisas de dichos valores. Los nodos se acumulan entorno al origen que es donde la función presenta la variación más acusada. 0 1 2 3 4 5 6 7 8 9 10 Si ejecutamos estas funciones omitiendo el parámetro de la tolerancia, se utiliza un error relativo de 10 −3 . Con la misma tolerancia, ambas producen un error del mismo orden (en este caso, quad8 tiene mayor error), aunque quad necesita más evaluaciones de la función. Ejemplo 14 El gráfico adjunto compara los nodos utilizados para integrar la función de Runge con ambas funciones y distintas tolerancias. La figura se obtiene con el código siguiente: subplot 221 quad8('runge',0,10,1e-2,1); title('QUAD8 con tol=1e-2') subplot 222 quad('runge',0,10,1e-2,1); title('QUAD con tol=1e-2') subplot 223 quad8('runge',0,10,[],1); title('QUAD8 con tol por defecto') subplot 224 quad('runge',0,10,[],1); title('QUAD con tol por defecto') Ejemplo 15 Evaluamos la integral del Ejemplo 11 mediante quad('sinc',eps,2*pi) ans = 1.41815007017436 donde sinc es un fichero.m con la expresión y = sin(x)./x; 8.3. Problemas a) Comprueba que los pesos de la fórmula de Newton-Cotes cerrada de orden 3 en el intervalo [0, 1] son 1/8, 3/8, 3/8 y 1/8. Esta fórmula recibe el nombre de regla de Simpson 3/8. b) Comprueba que fórmula de orden 2 integra exactamente los mismos polinomios que la de orden 3. c) Compara la precisión de ambas fórmulas al integrar la función 1/x entre 1 y 2. Considera la integral ∫ π φ θ − φ = θ 2 / 0 2 2 ) ( sin ) ( sin 1 ) ( d k a) Trabajando siempre en radianes, calcula k(30º) por la fórmula de Newton-Cotes abierta de orden 3. (Valor exacto con 4 decimales: 1.6858). b) Calcula k(85º) por el mismo procedimiento. (Valor exacto con 3 decimales: 3.832). Justifica la magnitud del error, en comparación con el del apartado anterior. Halla el número de condición del sistema planteado para determinar los pesos de la fórmula cerrada de Newton-Cotes de orden 6 en el intervalo [0, 1]. Observa cómo cambia el número de condición al tomar el intervalo ]. 1 , 1 [− Escribe un fichero.m para estimar la integral de una función en un intervalo cualquiera por la fórmula de Newton-Cotes de orden 6. El propio fichero debe calcular los pesos teniendo el cuenta lo anterior y aplicar la fórmula de cambio de intervalo. Evalúa la integral dt x ∫ π 2 0 2 sin aplicando la fórmula de Newton-Cotes compuesta cerrada de orden 4 y estima el error cometido, comparando los resultados obtenidos para distinto número de subintervalos. Se mide a intervalos regulares de 0.25 s la velocidad de un móvil en m/s obteniéndose los valores siguientes t v 0 0.9162 0.25 0.8109 0.5 0.6931 0.75 0.5596 1 0.4055 Se trata de hallar el espacio recorrido por el móvil, integrando la velocidad en [0, 1]. a) Indica todas las fórmulas de Newton-Cotes simples o compuestas, abiertas o cerradas que pueden utilizarse con los datos disponibles. b) Evalúa dichas fórmulas para estimar el recorrido. La función densidad de probabilidad de la distribución normal es 2 2 2 1 ) ( t e t f − = π 1 2 3 4 5 6 La probabilidad de que una variable aleatoria X con distribución normal tome valores entre −x y x viene dada por la integral ) ( erf 2 2 1 ) ( 0 2 2 2 2 x dt e dt e x X p x t x x t = π = π = < ∫ ∫ − − − Evalúa esta integral por Newton-Cotes de distintos tipos y órdenes, para un valor de x determinado. Analiza el error comparando el resultado con la función erf de MATLAB. La longitud del arco de la curva de ecuación ) (x f y = entre los puntos de abscisa x = a y x = b viene dada por la integral dx x f L b a ∫ + = 2 ) ( ' 1 Calcula la longitud de una circunferencia de radio 1 aplicando una fórmula de integración abierta para evitar la singularidad del integrando. Indica el error respecto al valor exacto. El área de la superficie de revolución engendrada por la curva de ecuación ) (x f y = entre los puntos de abscisa x = a y x = b, al girar entorno al eje OX viene dado por la integral dx y y A b a ∫ + π = 2 ' 1 2 Halla el área de la superficie de revolución engendrada por la curva p x q y / = , con x entre 0 y p, al girar entorno al eje OX (un plato de antena "parabólica"). 7 8 q p 8.4. Soluciones a) Para obtener la fórmula de Newton-Cotes cerrada de orden 3 en [0, 1], dividimos el intervalo en 3 partes y consideramos como nodos los extremos de los subintervalos, 0, 3 1 , 3 2 y 1. Exigiendo que la fórmula integre exactamente polinomios de grado 3, obtenemos el sistema lineal que proporciona los pesos:               =                             4 1 3 1 2 1 4 3 2 1 27 8 27 1 9 4 9 1 3 2 3 1 1 1 0 1 0 1 0 1 1 1 1 p p p p Efectuando los cálculos con MATLAB se obtiene el resultado pedido: h = 1/3; x = 0:h:1; A = rot90(vander(x)); b = [1; 1/2; 1/3; 1/4]; pesos = A\b pesos = 0.1250 0.3750 0.3750 0.1250 La fórmula, llamada de Simpson 3/8, queda ( ) ( ) ( ) ( ) ( ) 1 3 3 0 8 1 ) ( 3 2 3 1 1 0 f f f f dx x f + + + ≅ ∫ b) Por construcción, la fórmula de Newton-Cotes de orden 3 integra exactamente polinomios de tercer grado. La fórmula de orden 2 está diseñada para integrar polinomios de grado 2, pero también resulta exacta para los de grado 3. En efecto,       + + = = ∫ 1 8 1 4 0 6 1 4 1 1 0 3 dx x c) El valor exacto de la integral es 2 log 1 2 1 = ∫ dx x Estimándola por Newton-Cotes de segundo orden obtenemos 36 25 2 1 3 2 4 1 6 1 ) 2 ( 2 3 4 ) 1 ( 6 1 2 =       + + =         +       + = f f f I y por Newton-Cotes de tercer orden 160 111 2 1 5 3 3 4 3 3 1 8 1 ) 2 ( 3 5 3 3 4 3 ) 1 ( 8 1 3 =       + + + =         +       +       + = f f f f I Los errores respectivos son 0013 . 0 2 log 2 − ≅ − I y 0006 . 0 2 log 3 − ≅ − I La fórmula de tercer orden sólo reduce el error a la mitad, a costa de evaluar la función en un nodo más. 1 Dividimos el intervalo ] 2 , 0 [ π en 5 partes iguales. Los extremos interiores son los nodos de integración. Los pesos se obtienen resolviendo el sistema que resulta al exigir que la fórmula integre exactamente los polinomios de grado 4. a = 0; b = pi/2; n = 5; h = (b-a)/n; x = a+h : h : b-h; % Nodos A = rot90(vander(x)); c = [b; b^2/2; b^3/3; b^4/4]; pesos = A\c pesos = 0.7199 0.0654 0.0654 0.7199 a) Evaluamos el integrando en los nodos y aplicamos los pesos para estimar la integral z = pi/6 y = 1./sqrt(1-(sin(z)*sin(x)).^2); I = y*pesos z = 0.5236 I = 1.6871 El error es 1.6858-I ans = -0.0013 b) Repetimos los cálculos para el ángulo de 85º. El resultado es ahora z = 1.4835 I = 3.1982 Y el error 3.832-I ans = 0.6338 Del aspecto de las gráficas se deduce que el comportamiento de la segunda es mucho más variable que el de la primera y esto se traduce en un mayor error al calcular la integral. Para calcular los pesos de la fórmula de Newton-Cotes cerrada de orden 6, tomamos 7 puntos equiespaciados de 0 a 1 y calculamos la matriz del sistema resultante al imponer que la fórmula integre exactamente polinomios de grado 6. nodos = 0 : 1/6 : 1; A = rot90(vander(nodos)); 2 3 0 1 2 0 2 4 6 8 10 12 z=30º z=85º El número de condición de A es bastante elevado. disp(cond(A)) 3.6061e+004 Repitiendo los cálculos en el intervalo [−1, 1] se observa que el número de condición se reduce notablemente. nodos = -1 : 1/3 : 1; A = rot90(vander(nodos)); disp(cond(A)) 189.8141 Para utilizar la fórmula de Newton-Cotes en un intervalo cualquiera [a, b], determinamos los pesos para un intervalo normalizado [−1, 1] y los multiplicamos por (b−a)/2. Los valores de la función se calculan en nodos equiespaciados en el intervalo [a, b]. Teniendo en cuenta las observaciones del problema 3, evaluamos primero los pesos de la fórmula de Newton-Cotes simple cerrada de orden 4 en el intervalo normalizado [−1, 1]. nodos = -1 : 0.5 : 1; A = rot90(vander(nodos)); c = 2*[1; 0; 1/3; 0; 1/5]; pesos = A\c pesos = 0.1556 0.7111 0.2667 0.7111 0.1556 Para aplicar la fórmula compuesta, dividimos el intervalo de integración en m subintervalos iguales y estimamos la integral en cada uno de ellos mediante la fórmula simple multiplicada por el factor de escala, que es el cociente entre la longitud h de cada subintervalo y la del intervalo normalizado, que es 2. Finalmente, sumamos los resultados de cada trozo para obtener la estimación le la integral en el intervalo total. a = 0; b = 2*sqrt(pi); m = 10; h = (b-a)/m; x = a : h : b; % Extremos de los subintervalos I = 0; % Inicialización de la integral for k = 1:m nodos = x(k) : h/4 : x(k+1); y = sin(nodos.^2); p(k) = h/2*y*pesos; % Integral en el subintervalo end I = sum(p) % Integral en el intervalo total I = 0.4863 4 Para estimar la precisión, repetimos los cálculos con m = 20, obteniendo I2 = 0.48624731612146; La diferencia entre ambos resultados es una estimación del error de la fórmula I-I2 = 2.0972e-005 a) La tabla adjunta muestra las fórmulas aplicables con los pesos correspondientes a cada nodo y la estimación que resulta. Nodos 0 1/4 1/2 3/4 1 Tipo Orden Interv. Nombre Pesos Valor A 0 1 Punto medio simple 1 0.6931 A 0 2 Punto medio compta. 1/2 1/2 0.68525 A 2 1 Newton-Cotes 2/3 −1/3 2/3 0.68263 C 1 1 Trapecios simple 1/2 1/2 0.66085 C 1 2 Trapecios compta. 1/4 1/2 1/4 0.67698 C 1 4 Trapecios compta. 1/8 1/4 1/4 1/4 1/8 0.68111 C 2 1 Simpson simple 1/6 2/3 1/6 0.68235 C 2 2 Simpson compta. 1/12 1/3 1/6 1/3 1/12 0.68249 C 4 1 Newton-Cotes 7/90 32/90 12/90 32/90 7/90 0.6825 5 file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat...tematicas/Primer%20Cuatrimestre/Practica%207%20-%202/practica%208.txt NEWTON COTES ------------ ejemplo del seno >> y = [ 0 1/2 sqrt(2)/2 sqrt(3)/2 1] %se puede hacer y=sin(x) >> x = [0 pi/6 pi/4 pi/3 pi/2]; >> A = [x.^0; x.^1; x.^2; x.^3; x.^4] A = 1.0000 1.0000 1.0000 1.0000 1.0000 0 0.5236 0.7854 1.0472 1.5708 0 0.2742 0.6169 1.0966 2.4674 0 0.1435 0.4845 1.1484 3.8758 0 0.0752 0.3805 1.2026 6.0881 >> q = pi/2; %Longitud del intervalo >> b = [q; q^2/2; q^3/3; q^4/4; q^5/5] b = 1.5708 1.2337 1.2919 1.5220 1.9126 >> pesos = A\b % si haces sum pesos tiene que dar b pesos = 0.14398966328953 1.06028752058655 -0.83775804095728 1.06028752058655 0.14398966328953 >> format long >> I = dot(pesos,y) I = 0.99998495997193 --------- ejemplo 2 --------- >> %area de la cardioide, adptando los nodos ya obtenidos >> nodos = 2*x >> pesos = 2 * pesos; >> %introducimos la funcion: >> y = (1+cos(nodos)).^2/2; >> I = dot(pesos,y) I = 2.3889 >> (3*pi/4)-I ans = -0.0327 ---------- ejemplo 3 ---------- >> % cambiar intervalo [0, pi] a [-1,1] >> pesos = (2/pi)*pesos pesos = 0.1833 1.3500 -1.0667 file:///E|/Documentos/Estudios/Documentacion%20Asignat...r%20Cuatrimestre/Practica%207%20-%202/practica%208.txt (1 of 3) [09/03/2008 13:49:23] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat...tematicas/Primer%20Cuatrimestre/Practica%207%20-%202/practica%208.txt 1.3500 0.1833 >> nodos = (2/pi) * nodos - 1 nodos = -1.0000 -0.3333 0 0.3333 1.0000 >> y = 1./(1+nodos.^2) y = 0.5000 0.9000 1.0000 0.9000 0.5000 >> I = dot(pesos,y) I = 1.5467 >> pi/2 - I %error cometido ans = 0.0241 ----------------------- ejemplo con mas nodos ----------------------- >> nodos = 0:pi/4:pi; >> A = rot90(vander(x)); >> q = pi; b = [q; q.^2/2; q.^3/3; q.^4/4; q.^5/5] b = 3.1416 4.9348 10.3354 24.3523 61.2039 >> pesos = A\b pesos = 0.2443 1.1170 0.4189 1.1170 0.2443 >> %con estos pesos puedo integrar cualqueir funcion en el intervalo [0 pi] o generalizarlo a cualqueir intervalo mediante el itercambio de coordenadas >> sum(pesos) %comprobacion rutinaria ans = 3.1416 >> y = (1+cos(nodos)).^2/2; >> I = dot(pesos,y) I = 5.6430 (puede que el resultado este mal,he cambiado una cosa) ------------------ >> %N-C abierto ------------------ >> nodos = 1/6:1/6:(1-1/6); >> A = rot90(vander(nodos)); >> q=1; >> b = [q; q.^2/2; q.^3/3; q.^4/4; q.^5/5]; >> pesos = A\b pesos = 0.5500 -0.7000 1.3000 -0.7000 0.5500 >> sum(pesos) %la formula del algodon... file:///E|/Documentos/Estudios/Documentacion%20Asignat...r%20Cuatrimestre/Practica%207%20-%202/practica%208.txt (2 of 3) [09/03/2008 13:49:23] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat...tematicas/Primer%20Cuatrimestre/Practica%207%20-%202/practica%208.txt ans = 1 >> y = 1./sqrt(nodos); >> I = dot(pesos,y) I = 1.7184 >> %tiene mucho error (debiera ser 1) porque hemos elegido pocos nodos >> %y la funcion se comporta mal (tiene asintita en x=0)! ----------------------------- otro ej que se comporte mejor la cardioide ----------------------------- >> nodos = pi*nodos; >> pesos = pi*pesos pesos = 1.7279 -2.1991 4.0841 -2.1991 1.7279 >> y = (1+cos(nodos)).^2/2; >> I = dot(pesos,y) I = 2.3169 >> 3*pi/4 - I ans = 0.0393 2.3169 -------------------- Punto medio compuesta --------------------- >> h = 1/50; >> x = h/2: h: 1-h/2; >> y = 1./sqrt(x); >> I = h*sum(y) %en este caso es facil, porque los pesos son todos iguales y son h. I = 1.9145 >> h = 1/500; >> x = h/2: h: 1-h/2; >> y = 1./sqrt(x); >> I = h*sum(y) I = 1.9729 file:///E|/Documentos/Estudios/Documentacion%20Asignat...r%20Cuatrimestre/Practica%207%20-%202/practica%208.txt (3 of 3) [09/03/2008 13:49:23] 10 Interpolación Polinómica 10.1 Introducción En temas anteriores hemos estudiado problemas en los que aparecía una función, dando directamente su expresión en la forma y f , o bien los datos necesarios para establecerla. Esto nos permitía realizar un estudio sobre las características y el comportamiento, y utilizarlas en la resolución del problema. ( ) x = Ahora nos planteamos la situación inversa, es decir, a partir de una serie de puntos ( , ), 1,..., 1 i i x y i n = + + , hemos de encontrar una función f(x), que verifique todos estos valores. La técnica que nos permite, a partir de unas observaciones, hallar los valores que toma la función desconocida f(x) se conoce como interpolación. La necesidad de plantear un problema de este tipo deriva del siguiente hecho: En la mayoría de casos, las normas que rigen el comportamiento humano, la evolución de la naturaleza, etc. no son descritas por una fórmula concreta y conocida, normalmente, sólo se dispone de una serie más o menos amplia de valores, obtenidos de forma experimental, que nos dan la pauta de su comportamiento; a partir de éstos podremos deducir, con un error más o menos controlado, datos no considerados en el estudio. Así, podemos estimar la altura de un individuo teniendo en cuenta la nuestra propia y la de nuestros conocidos, o el tiempo que tardará en llegar a cierto punto un vehículo sabiendo qué tiempo ha tardado en distancias y circunstancias similares. Otra aplicación de la interpolación es encontrar valores aproximados de una función conocida pero difícil de estimar en determinados puntos. Para las funciones trigonométricas y logarítmicas ha sido tradicional el uso de tablas; el cálculo de los valores no señalados en las tablas había que obtenerlo por interpolación. Las calculadoras han arrinconado las tablas, pero los procedimientos siguen siendo válidos. La importancia de la interpolación sigue vigente, siendo la base de algoritmos de diseño gráfico, de métodos de integración aproximada y de evaluación de funciones de matrices, entre otros. 10.2 Interpolación polinómica Ante la diversidad de funciones interpoladoras que se pueden construir, es lógico elegir la de cálculo más simple y mejor comportamiento, selección que recae en la función polinómica. Por tanto el objetivo es la obtención del polinomio de interpolación, que es el polinomio de grado menor o igual que n que pasa por n+1 puntos ( , también llamados nodos de interpolación. , ), 1,..., 1 i i x y i n = Planteando directamente las condiciones anteriores se obtiene un sistema de ecuaciones lineales con solución única, pero generalmente mal condicionado. Los polinomios de Lagrange permiten obtener una expresión explícita del polinomio de interpolación cuyo interés es más bien teórico, pues es costosa de evaluar en puntos concretos. Numéricamente es mucho más útil la forma de Newton del polinomio de interpolación. Aunque no tiene expresión explícita, su obtención es más estable que por los métodos anteriores, su evaluación no presenta los inconvenientes de los polinomios de Lagrange, y sobre todo, se puede actualizar fácilmente si se añaden nuevos nodos de interpolación. Interpolación lineal Si el polinomio es de grado 1 hablamos de interpolación lineal, tremendamente útil por su fácil cálculo y por su error reducido si los puntos están suficientemente próximos. La utilizaremos si los datos que poseemos son dos puntos ), o se eligen sólo dos puntos entre varios para calcular la aproximación en un valor intermedio, a partir de la recta que pasa por dichos puntos. 1 1 2 2 ( , ) y ( , ) x y x y Ejemplo 1 Sabiendo que l Calcula por interpolación lineal el logaritmo en base 10 de 90. 10 10 og 10 1 y log 100 2. = = 2 = Los puntos de interpolación son (10,1) y (100,2) calculamos pues la ecuación de la recta que pasa por ellos. 1 1 2 1 1 2 1 1 ( ) (10) 10 1 (100) 100 2 p x a x a p a a p a a = + = + = = + Resolviendo el sistema obtendremos los coeficientes del polinomio y podremos evaluarlo en puntos intermedios. A=[10 1;100 1]; y=[1;2]; p=A\y; p90=polyval(p,90), %valor aproximado del log10 90 %Representación de la función f(x) = log10(x) junto al polinomio que la interpola, y los nodos de interpolación . x=[10 100];y=[1 2]; xg=5:.1:105; yg=log10(xg); yp=polyval(p,xg); plot(x,y,'*',xg,yp,xg,yg,'r') Title('interpolación lineal') p90 = 1.8889 Si calculamos con MATLAB log10(90) ans = 1.9542 Observamos que el error cometido ans-p90 es considerable ello es debido a que los puntos de interpolación son muy distantes. Si elegimos abscisas cercanas, el error es mucho menor, de forma que la gráfica de la función logarítmica y la recta que la interpola en un intervalo muy pequeño prácticamente coinciden. Esto justifica el uso de la interpolación lineal para calcular valores de una función tabulada 0 20 40 60 80 100 120 0.6 0.8 1 1.2 1.4 1.6 1.8 2 2.2 p(x) log10(x) interpolación lineal Interpolación cuadrática Si disponemos de tres puntos que determinan una parábola tendremos un polinomio de grado 2, se trata de interpolación cuadrática. El polinomio de grado dos p x que pasa por se determina análogamente resolviendo el sistema. 2 2 1 2 ( ) a x a x a = + + 3 1 1 2 2 3 3 ( , ), ( , ) y ( , ) x y x y x y 2 1 1 2 1 3 1 2 1 2 2 2 3 2 2 1 3 2 3 3 3 a x a x a y a x a x a y a x a x a y + + = + + = + + = Ejemplo 2 De un muelle con un extremo fijo colgamos distintas masas obteniendo la siguiente tabla: Masa (kg) 5 10 15 Longitud (cm) 395 620 795 Utiliza la interpolación cuadrática para estimar la longitud del muelle para una masa de 7 Kg. Imponiendo las condiciones de interpolación (5,395), (10,620) y (15,795) tenemos un sistema de ecuaciones lineales cuya expresión matricial es: 1 2 3 25 5 1 a 395 100 10 1 a 620 225 15 1 a 795         =                  Observemos que la matriz del sistema es la matriz de Van der Monde. Esta matriz está mal condicionada para tamaños relativamente pequeños. Esto hace desaconsejable la obtención del polinomio de interpolación por este método. Creamos en MATLAB dos vectores con las abscisas y las ordenadas, respectivamente de los puntos a interpolar: x=[5;10;15]; y=[395;620;795]; A=vander(x); cond(A) ans = 1.1079e+003 Resolviendo el sistema se obtienen los coeficientes del polinomio buscado. p=A\y p = -1.0000 60.0000 120.0000 Por lo que el polinomio de interpolación se tiene la siguiente expresión: 2 2 ( ) 60 120 p x x x = − + + Comprobamos que cumple las condiciones de interpolación, o sea, que pasa por los puntos dados. polyval(p,x) ans = 395.0000 620.0000 795.0000 Valor esperado en 7 kg m = v=polyval(p,7) v = 491.0000 Representamos el polinomio junto a los puntos de interpolación. xn=3:.1:20; yn=polyval(p,xn); plot(x,y,'*',xn,yn) xlabel('Masas') ylabel('Longitudes') Title('Polinomio de grado 2') 2 4 6 8 10 12 14 16 18 20 200 300 400 500 600 700 800 900 1000 Masas L o n g i t u d e s Polinomio de grado 2 Interpolación polinómica en general El problema de interpolación es más general y se adapta mejor a los casos reales si se dispone de una serie de puntos, obtenidos de forma experimental, y analizamos si con una interpolación lineal o cuadrática se obtiene una buena estimación o necesitamos un polinomio de interpolación de mayor grado. El hecho de aumentar el grado del polinomio de interpolación no implica que se obtenga mejor aproximación puesto que la coincidencia del polinomio con muchos puntos de interpolación se consigue a costa de grandes oscilaciones en los intervalos entre nodos o puntos de interpolación dados. La obtención de este polinomio se basa en el siguiente resultado:. Dados n+1 puntos de abscisas distintas ( , existe un único polinomio de grado menor o igual que n, cumpliendo las condiciones de interpolación 1 1 2 2 1 1 , ), ( , ),..., ( , ) n n x y x y x y + + ( ) , 1, 2,..., 1. n i i P x y i n = = +         Para demostrar este resultado basta expresar el polinomio buscado en forma normal -1 1 2 1 ( ) ··· n n n n P x a x a x a + = + + + e imponer las condiciones de interpolación, con lo que se obtiene el siguiente sistema de n+1 ecuaciones con n+1 incógnitas -1 -2 1 1 1 1 1 -1 -2 2 2 2 2 2 -1 -2 3 3 3 3 3 -1 -2 1 1 1 1 1 1 1 1 1 n n n n n n n n n n n n n n n n n a y x x x a y x x x a y x x x a y x x x + + + + +                 =                   L L L M M M M M O M L El determinante de la matriz del sistema es un determinante de Van der Monde de la forma: 1 2 3 1 1 1 ( , , , , ) ( ) n j i j n V x x x x x x + ≤ < ≤ + … = − ∏ i 1 y es no nulo al ser distintos por hipótesis, los n+1 valores de x. Por lo tanto, el sistema es compatible determinado, es decir, admite solución única. Este resultado, aparte de asegurar la existencia y unicidad del polinomio de interpolación, proporciona también un método de cálculo que, en general, suele ser muy laborioso y presenta el problema del mal condicionamiento de la matriz del sistema. El polinomio de interpolación obtenido mediante los valores se utiliza para estimar valores en puntos intermedios a los que se han dado, es decir x x , si se utiliza para un valor de x que no pertenece al intervalo [x 1 1 2 2 1 1 ( , ), ( , ),..., ( , ) n n x y x y x y + + 1 : n x x + ≤ ≤ 1 , x n+1 ] estaremos ante un problema de extrapolación, el método de operar es idéntico pero con riesgo de obtener resultados con errores considerables, ya que no se puede garantizar el comportamiento fuera del intervalo. Vamos a crear una función en MATLAB que utilizando el método expuesto calcule el polinomio de interpolación que pasa por todos los puntos. Algoritmo INTERPOL Entrada: (x i , y i ) i = 1,.. ., n+1, puntos de interpolación. Salida: P n (x) polinomio de interpolación de grado n Proceso: n = longitud del vector de nodos –1; (grado del polinomio) V= vander(n+1) p=V\y; xg=linspace(x(1),x(n+1)); yg=polyval(p,xg); plot(xg,yg) title([‘polinomio de interpolación de grado ’,num2str(n)]) Ejemplo 3 Un estudio sobre la eficiencia de los trabajadores en una factoría ha determinado que el promedio de piezas producidas por hora de sus trabajadores está relacionado con el número de horas transcurridas a partir del comienzo de la jornada. A partir de la siguiente tabla haz una estimación del número de piezas producidas después de 3, 5 y 7 horas de trabajo. Horas transcurridas 0 2 4 6 8 Piezas producidas 0 62 116 114 8 En este caso si consideramos todos los nodos o puntos de interpolación podremos hallar el polinomio de grado 4 resolviendo el sistema de ecuaciones lineales de 5 vamos a utilizar nuestra función interpol ya preparada en MATLAB, a la que añadimos una instrucción para obtener el número de condición de la matriz del sistema: 5 × x=0:2:8; y=[0 62 116 114 8]; p=interpol(x,y); v=polyval(p,[3,5,7]) 1 n + ncon = 1.4361e+004 v = 93.0000 125.0000 77.0000 0 1 2 3 4 5 6 7 8 0 20 40 60 80 100 120 140 Polinomio de interpolación de grado 4 Podemos establecer como conclusión que el rendimiento de los empleados va aumentando a lo largo de la jornada hasta que alrededor de las cinco horas de trabajo se alcanza la producción máxima y a partir de ese momento la producción empieza a disminuir. Si en este problema nos preguntáramos sobre la producción al cabo de 10 horas de trabajo estaríamos ante un problema de extrapolación que proporciona un resultado inadmisible al evaluar el polinomio de interpolación. v=polyval(p,10) v = -250.0000 Desplazamiento del origen El problema del mal condicionamiento de la matriz de Van der Monde asociada al sistema que resulta al hallar el polinomio de interpolación puede resolverse mediante un desplazamiento del origen, es decir, eligiendo otra base para expresar este polinomio. Desplazar el origen a un nodo x i implica expresar el polinomio como una combinación lineal de potencias de - : i x x -1 1 2 ( ) ( - ) ( - ) ... n n n i i P x b x x b x x b + = + + La condición P x ( ) n i i y = proporciona directamente el valor de b n+1 y queda un sistema mejor condicionado que el anterior. Esta mejora no es definitiva, pues la matriz del nuevo sistema es parecida a la de Van der Monde y para mayor grado reaparecerá el mal condicionamiento. Ejemplo 4 Vamos a resolver el Ejemplo 2 realizando un desplazamiento del origen a x 1 = 5. Comprueba la mejora del número de condición de la matriz del sistema, expresa el polinomio respecto de la nueva base matizando que se trata del mismo polinomio que el hallado en dicho ejemplo. x=[5;10;15]; y=[395;620;795]; A=vander(x); ncond1=cond(A) p=A\y; xd=x-5; Ad=vander(xd); ncond=cond(Ad) pd=Ad\y ncond1 = 1.1079e+003 ncond = 109.0659 pd = -1 50 395 Observamos que aunque el número de condición ha mejorado todavía sigue siendo alto. La expresión del polinomio será: 2 2 ( ) ( 5) 50( 5) 395 p x x x = − − + − + Como el polinomio de interpolación es único éste coincidirá con el anteriormente hallado: 2 2 ( ) 60 120 p x x x = − + + Para comprobarlo evaluamos los dos en un mismo conjunto de puntos y vemos que los resultados coinciden; xn=linspace(5,15,10); vp=polyval(p,xn); vpd=polyval(pd,xn-5);%observa como se evalúa el polinomio desplazado E=max(abs(vp-vpd)) E = 1.1369e-013 Método de Lagrange Este método de interpolación consiste en obtener directamente el polinomio de interpolación expresado respecto de otra base de forma que no precisa realizar ningún cálculo, la notación utilizada se debe a Lagrange quien proporcionó las fórmulas. En el caso de la interpolación cuadrática dados los nodos ( el polinomio será de la forma: 1 1 2 2 3 3 , ), ( , ) y ( , ) x y x y x y 1 1 2 2 3 3 ( ) ( ) ( ) ( ) P x y L x y L x y L x = + + de forma que: 1 1 1 2 1 3 ( ) 1; L ( ) 0; L ( ) 0; L x x x = = = 3 Por lo que 1 1 2 ( ) ( )( ) L x a x x x x = − − por tanto 1 1 1 1 2 1 3 1 1 2 1 3 1 ( ) 1 ( )( ) ( )( L x a x x x x a x x x x = = − − → = − − ) y en consecuencia queda determinado este factor 1 2 1 1 2 1 3 ( )( ( ) ( )( x x x x L x x x x x − − = − − ) ) = = Análogamente tendremos 2 1 2 2 2 3 3 1 3 2 2 3 ( ) 0; L ( ) 1; L ( ) 0; ( ) 0; L ( ) 0; L ( ) 1; L x x x L x x x = = = = Estos polinomios serán: 1 3 2 2 1 2 3 1 2 3 3 1 3 2 ( )( ( ) ( )( ( )( ( ) ( )( x x x x L x x x x x x x x x L x x x x x − − = − − − − = − − ) ) ) ) Así pues la expresión completa del polinomio de Lagrange es: 2 3 1 3 1 2 2 1 2 3 1 2 1 3 2 1 2 3 3 1 3 2 ( )( ) ( )( ) ( )( ( ) ( )( ) ( )( ) ( )( x x x x x x x x x x x x P x y y y x x x x x x x x x x x x − − − − − − = + + − − − − − − ) ) + 1 = y claramente se tiene 2 ( ) 1, 2, 3. i i P x y i = = En general dados n+1 nodos ( consideramos L 1 1 2 2 1 1 , ), ( , ),..., ( , ), n n x y x y x y + + , j x j i (x) un polinomio de grado n, que se anule en todos los puntos , salvo en el i-ésimo, donde vale 1; es decir, tal que 1, ..., 1 n = ( ) 0 ( ) i j i i L x si j i y L x = ≠ Razonando de forma análoga al caso n = 2 se obtiene la siguiente expresión para estos polinomios: 1 1 1 1 1 1 1 1 1 1 L n i i n i i i i i i i i n i j i (x x ) (x x )(x x ) (x x ) x x (x) (x x ) (x x )(x x ) (x x ) x x + − + + = − + + ≠ − − − − − = = − − − − ∏ L L L L i j − Es inmediato comprobar entonces que el polinomio 1 1 1 2 2 3 3 1 1 1 ( ) ( ) ( ) ( ) ··· ( ) ( ) n n n n i i i P x y L x y L x y L x y L x y L x + + + = = + + + + = ∏ cumple las condiciones ( ) , 1, 2..., 1. n i i P x y i n = = + lo que prueba directamente la existencia del polinomio de interpolación. La unicidad se puede garantizar utilizando el hecho de que un polinomio de grado n puede tener a lo sumo n raíces. Si dos polinomios de grado ≤ n interpolan n+1 puntos, su diferencia se anula en dichos puntos, por lo que sólo puede ser el polinomio idénticamente nulo. Ejemplo 5 Expresa el polinomio de interpolación de Lagrange para los datos del Ejemplo 2: Directamente sin realizar ningún cálculo a partir de los nodos (5,395), (10,620) y (15,795) podemos expresar el polinomio de grado 2: ( 10)( 15) ( 5)( 15) ( 5)( 10) ( ) 395 620 795 2 (5 10)(5 15) (10 5)(10 15) (15 5)(15 10) x x x x x x P x − − − − − − = + + − − − − − − Las operaciones que nos hemos ahorrado en su determinación, hemos de pagarlas al evaluar el polinomio en un punto concreto (del orden de n 2 operaciones por cada evaluación). Además, los productos a efectuar pueden causar desbordamiento numérico y la fórmula no es estable numéricamente. Método de Newton El primer método estudiado para hallar el polinomio de interpolación, que resulta de forma natural al plantear las condiciones de interpolación, da lugar a un sistema de ecuaciones lineales mal condicionado por lo que su utilización no resulta aconsejable, aunque una vez obtenido resulta muy cómodo de evaluar para obtener estimaciones. Lo contrario sucede con el método de Lagrange que proporciona directamente la expresión del polinomio de interpolación con el inconveniente de la evaluación del mismo en un punto dado, por el elevado número de operaciones que se precisan realizar. Vamos a ver ahora el método de Newton que salva los inconvenientes anteriores y resulta ser el más útil y práctico. Este nuevo método consiste en expresar el polinomio de interpolación respecto de la base 1 Por lo que su expresión será: 1 1 2 1 2 , - , ( - )( - ), ..., ( - )( - ) ( - ). n x x x x x x x x x x x x L 1 1 -1 1 2 1 1 2 ( ) ( - ) ( - )( - ) ( - )( - ) ( - ) n n n n n P x c c x x c x x x x c x x x x x x + = + + + + L L Imponiendo las condiciones de interpolación, podemos determinar los coeficientes de este polinomio. 1 1 1 2 2 1 2 1 3 3 1 3 1 -1 3 2 3 1 1 1 1 1 1 -1 1 1 1 2 1 1 1 1 2 1 ( ) ( ) ( - ) ( ) ( - ) ( - )( - ) ( ) ( - ) ( - )( - ) ( - )( - ) ( - ) n n n n n n n n n n n n n n n n n n n n n n P x y c P x y c c x x P x y c c x x c x x x x P x y c c x x c x x x x c x x x x x x + + + + + + + + + + + + = = = = + = = + + = = + + + + K L L n El sistema lineal obtenido tiene una matriz análoga a la de Van der Monde, pero con la ventaja de ser triangular inferior. 1 1 2 1 2 3 1 3 1 3 2 3 1 1 1 1 1 1 2 1 1 1 2 1 1 1 1 0 0 0 1 0 0 1 ( )( ) 0 0 1 ( )( ) ( )( ) ( ) n n n n n n n n n n y c x x y c x x x x x x y c x x x x x x x x x x x x y c + − + + + + + +       −       − − − =           − − − − − −     L L L M M M O M M L L +                 , i Los coeficientes pueden determinarse con menos operaciones (del orden de n 2 , en lugar de n 3 ), no obstante en la mayoría de casos va a persistir el mal condicionamiento del sistema. Es importante notar que el hecho de añadir nuevos nodos no afecta a los coeficientes ya calculados, por lo que se pueden ir añadiendo nuevos puntos aumentando el grado del polinomio y conseguir la precisión deseada sin tener que calcular de nuevo todos los coeficientes. Es decir, 3 c es el polinomio de grado 0 que pasa por ( , 1 1 ) x y 3 2 1 ( - ) c c x x + es el polinomio de grado 1 que pasa por (x 1 , y 1 ) y (x 2 , y 2 ), 3 2 1 1 1 2 ( - ) ( - )( - ) c c x x c x x x x + + es el polinomio de grado 2 que pasa por (x 1 , y 1 ), (x 2 , y 2 ) y (x 3 , y 3 ) En general, cada polinomio se obtiene del anterior mediante -1 1 1 2 -1 ( ) ( ) ( - )( - ) ( - ) i i P x P x c x x x x x x = + L ) Como consecuencia de este hecho se suelen tomar los nodos en cierto orden, considerando primero los más próximos al punto que nos interesa, aunque el polinomio obtenido finalmente es independiente del orden considerado. Ejemplo 6 Utiliza el método de Newton para obtener el polinomio de interpolación de grado 3 que evaluarías para estimar en el Ejemplo 3 el número de piezas producidas por los empleados al cabo de 5 horas trabajadas: . Horas transcurridas 0 2 4 6 8 Piezas producidas 0 62 116 114 8 El polinomio de interpolación de Newton de grado 3 tendrá la forma: 3 4 3 1 2 1 2 1 1 2 ( ) ( ) ( )( ) ( )( )( p x c c x x c x x x x c x x x x x x = + − + − − + − − − 3 ) 1 Para determinarlo se necesitan 4 nodos, elegimos los más cercanos al punto que se quiere realizar la estimación, es decir (4,116), (6,114), (2,62), y (8,8). Sustituyendo estos nodos en la expresión anterior obtenemos el siguiente sistema triangular: 3 4 3 4 3 3 4 3 2 3 4 3 2 (4) 116 (6) 114 2 (2) 62 - 2 8 (8) 8 4 8 48c P c P c c P c c c P c c c = = = = + = = + = = + + + que directamente proporciona la solución: c4=116,c3=(114-c4)/2, c2=(62-c4+2*c3)/8,c1=(8-c4-4*c3-8*c2)/48 , c4 = 116 c3 = -1 c2 = -7 c1 = -1 Por lo que el polinomio tendrá la siguiente expresión: 3 ( ) 116 ( 4) 7( 4)( 6) ( 4)( 6)( 8) p x x x x x x x = − − − − − − − − − Notemos que 0 ( ) 116 p x = es el polinomio de grado 0 que pasa por (4,116), 1 ( ) 116 - ( - 4) p x x = es el polinomio de grado 1 que pasa por (4,116) y (6,114), 2 ( ) 116 - ( - 4 ) - 7( - 4)( - 6) p x x x x = es el polinomio de grado 2 que pasa por (4,116), (6,114) y (2,62) Si resolvemos el sistema por el método de Gauss puede haber desbordamiento numérico debido al mal condicionamiento de la matriz, en particular para tamaños mayores: A=[0 0 0 1;0 0 2 1;0 8 -2 1;48 8 4 1]; b=[116 114 62 8]'; cond(A) p=A\b ans = 57.5941 p = -1 -7 -1 116 Por lo que normalmente se recurre a otra técnica, la tabla de diferencias divididas, que proporciona los coeficientes del polinomio sin necesidad de resolver el sistema de ecuaciones lineales. Tabla de diferencias divididas Dado el polinomio de interpolación de Newton 1 1 -1 1 2 1 1 2 ( ) ( - ) ( - )( - ) ( - )( - ) ( - ) n n n n n P x c c x x c x x x x c x x x x x x + = + + + + L L Imponiendo las condiciones de interpolación, podemos determinar sus coeficientes: 1 1 ( ) n P x y c + = = 1 n 1 que denotaremos , teniendo así: 1 [ ] f x 1 1 [ ] n c f + = x 2 2 1 2 ( ) ( - ) n n n P x y c c x x + = = + de donde 2 1 2 2 1 2 1 [ ] [ ] [ ] n y f x f x f x c x x x x − − = = − − 1 ] ] 1 2 Esta expresión se denomina cociente de diferencias o diferencias divididas de primer orden, proporciona el valor de c n en función de los puntos de interpolación, y se denota por , es decir c f y el polinomio de Newton de grado 1 es de la forma: 1 2 [ f x x 1 2 [ n x x = 1 1 1 2 ( ) [ ] [ ]( ) p x f x f x x x x = + − Veamos que el polinomio de grado 2 tiene la forma: 2 1 1 2 1 1 2 3 1 ( ) [ ] [ ]( ) [ ]( )( ) p x f x f x x x x f x x x x x x x = + − + − − siendo 2 3 1 2 1 2 3 3 1 [ ] [ [ ] f x x f x x f x x x x x − = − ] el cociente de diferencias divididas de orden 2. Para ello veamos que este polinomio pasa por los puntos de interpolación y por unicidad tendremos la conclusión. 1 1 2 2 3 3 ( , ), ( , ) y ( , ) x y x y x y En efecto 2 1 1 1 ( ) [ ] p x f x y = = 2 1 2 2 1 2 1 2 2 2 1 [ ] [ ] ( ) [ ] ( ) [ ] f x f x p x f x x x f x y x x − = + − = = − 2 3 1 2 2 1 2 3 1 3 1 3 1 3 2 2 1 3 1 3 2 2 1 2 1 1 3 1 3 2 2 1 3 2 2 1 2 1 1 2 1 3 2 3 3 2 1 [ ] [ ] [ ] [ ] ( ) [ ] ( ) ( )( ) [ ] [ ] [ ] [ ] [ ] [ ] [ ] ( ) ( ) ( ) [ ] [ ] [ ] ( ) [ ] [ ] [ ] f x x f x x f x f x p x f x x x x x x x x x x x f x f x f x f x f x f x f x x x x x x x x x x x x x f x f x f x x x f x f x f x y x x − − = + − + − − = − − − − − + − + − − − − − − + − + − = = − 3 2 − = Una vez demostrado que tiene la forma citada, por un proceso de inducción se puede probar que en general el coeficiente c 2 ( ) p x n-k+1 de grado k tiene la forma 2 3 1 1 2 1 1 2 1 1 1 [ ... ] [ ... ] [ ... ] k k n k k k f x x x f x x x c f x x x x x + − + + + − = = − que es el llamado cociente de diferencias divididas de orden k, y se expresa en función de las diferencias divididas de orden k-1. En la práctica, los cálculos se disponen en una tabla de diferencias divididas, colocando en la primera columna los valores de la función o diferencias divididas de orden 0, en la segunda columna las diferencias divididas de primer orden, en la tercera columna las de orden 2, y así sucesivamente. La tabla queda de la forma siguiente: 1 1 2 2 1 2 3 3 2 3 1 2 3 4 4 3 4 2 3 4 1 2 3 4 [ ] [ ] [ , ] [ ] [ , ] [ , , ] [ ] [ , ] [ , , ] [ , , , y f x y f y f x y f x f x x x x = = = = L L L L x f x x f x x f x x x f x x f x x x ] La construcción de la tabla de diferencias divididas es relativamente sencilla teniendo en cuenta el esquema anterior. En la diagonal de la tabla aparecen los coeficientes c n+1 , c n , c n-1 ,..., c 1 de los polinomios de interpolación. Ejemplo 7 Utiliza MATLAB para resolver el Ejemplo 6 mediante la tabla de diferencias divididas Para el polinomio de grado 3 tomamos 4 puntos y los ordenamos según su proximidad a las 5h transcurridas que es donde se quiere realizar la estimación % Horas transcurridas t = [2 4 6 8]'; % Piezas producidas T = [62 116 114 8]'; % Orden de las componentes por proximidad a las 5h horas transcurridas I = [2 3 1 4]; % Valores ordenados X = t(I); Y = T(I); % Inicialización de la Tabla de Newton n = 3; A = zeros(n+1,n+1); % La primera columna son las ordenadas A(:,1) = Y; % La segunda son los cocientes de diferencias primeras A(2:n+1,2)=(A(2:n+1,1)-A(1:n,1))./(X(2:n+1)-X(1:n)); % Luego, las diferencias segundas A(3:n+1,3)=(A(3:n+1,2)-A(2:n,2))./(X(3:n+1)-X(1:n-1)); % Y así sucesivamente A(4:n+1,4)=(A(4:n+1,3)-A(3:n,3))./(X(4:n+1)-X(1:n-2)) p=diag(A) A = 116 0 0 0 114 -1 0 0 62 13 -7 0 8 -9 -11 -1 p = 116 -1 -7 -1 Tenemos así el polinomio de Newton que ya habíamos calculado en el Ejemplo 6, nos falta ahora evaluarlo en el punto requerido. Evaluación del polinomio de Newton Para evaluar el polinomio de interpolación en un punto dado x = a tendremos en cuenta la expresión anidada del polinomio: 1 1 -1 1 2 1 1 2 1 1 2 -1 -2 3 -1 2 1 1 2 -1 3 -2 ( ) ( - ) ( - )( - ) ( - )( - ) ( - ) ( - )( ( - )( ... ( - )( ( - )( ( - ) ))...) ( (( ( - ) )( - ) )( - ) n n n n n n n n n n n n n n n P x c c x x c x x x x c x x x x x x c x x c x x c x x c x x c x x c c x x c x x c x x c + + = + + + + + + + + + + = + + + + L L L L 1 )( - ) n x x c + + = = Las operaciones se efectúan teniendo en cuenta la precedencia establecida mediante los paréntesis, o sea, comenzando con los más interiores. Ejemplo 8 Evalúa el polinomio de interpolación de grado 3 que has obtenido en el ejemplo anterior para estimar el número de piezas producidas por los empleados al cabo de 5 horas trabajadas: Expresemos el polinomio de grado 3 en su forma anidada. 3 4 3 1 2 1 2 1 1 2 3 4 1 3 2 2 3 1 1 3 2 2 3 1 4 ( ) ( ) ( )( ) ( )( )( ) ( )( ( )( ( ) )) (( ( ) )( ) )( ) p x c c x x c x x x x c x x x x x x c x x c x x c x x c c x x c x x c x x c = + − + − − + − − − = + − + − + − = = − + − + − + De esta forma es fácil calcular con MATLAB el valor numérico del polinomio paso a paso. a=5; v=p(4); v=v*(a-X(3))+p(3); v=v*(a-X(2))+p(2); v=v*(a-X(1))+p(1) v = 125 Valor que coincide con el obtenido en el Ejemplo 3, aunque allí se evaluaba en un vector de puntos, vamos a hacer los cambios necesarios para conseguir que este proceso sea válido también para el caso que se quiera evaluar en más de un punto, basta con darle carácter vectorial a las instrucciones, y tenemos así la posibilidad de representar el polinomio. a=[3 5 7]; v=p(4); v=v.*(a-X(3))+p(3); v=v.*(a-X(2))+p(2); v=v.*(a-X(1))+p(1) v = 93 125 77 Representemos el polinomio: a=linspace (t(1),t(4)); v=p(4); v=v.*(a-X(3))+p(3); v=v.*(a-X(2))+p(2); v=v.*(a-X(1))+p(1); plot(t,T,'*',a,v) Proponemos en el problema 4 la generalización de este razonamiento para obtener el valor numérico mediante una función de MATLAB. Error de interpolación Teorema: Si interpola a la función f(x) en los puntos distintos x ( ) n p x 1 ,…,x n+1 y f tiene derivadas continuas hasta orden n en un intervalo I que contiene a los x i 's. Entonces para cualquier x en I existe un η entre x y los xi's tal que: ( 1) 1 2 ( ) ( ) ( ) ( )( ) ( ) ( 1)! n n n f f x P x x x x x x x n η + + − = − − − + L 1 Una consecuencia práctica de la forma del error es que hemos de tomar puntos próximos al punto x en que hemos de evaluar el polinomio. Normalmente, comenzamos con un polinomio de grado bajo, por ejemplo, la recta que pase por los dos puntos más próximos a x, y vamos añadiendo puntos por orden de proximidad y calculando polinomios de mayor grado, hasta alcanzar la precisión deseada. La derivada que aparece en la expresión anterior puede aproximarse a su vez por un cociente en diferencias, pues se tiene que [ ] ( 1) 1 1 ( ) , , , ( 1)! n n n f f x x x n η + + = + L para cierto η en el menor intervalo que contiene a x 1 , x 2 , ..., x n+1 . Esta expresión sugiere una regla práctica para decidir qué polinomio interpola mejor n+1 puntos. Si en la tabla de diferencias divididas, los valores de la columna k, por ejemplo, son aproximadamente iguales y los de la columna k+1 son aproximadamente cero, el polinomio interpolador más adecuado es de grado k. La razón es que el error viene dado por diferencias divididas de la columna siguiente, k+1, que suponemos casi nulas. Los productos que aparecen en la fórmula del error nos indican que éste puede ser muy grande si hay muchos puntos o si x no está muy próximo a ellos. Cuando x no está en el menor intervalo determinado por x 1 , x 2 , ..., x n+1 , estamos extrapolando, en lugar de interpolando. Si f(x) es una función en [ y los x , ] a b i 's están uniformemente distribuidos en [ , i.e., , ] a b ( -1) , 1,..., 1. i x a i h i n = + = + entonces se puede demostrar que: 1 ( 1) [ , ] ( ) ( ) max ( ) ( 1)! n n n x a b h f x p x f x n + + ∈   − ≤   +   De modo que si ( ) [ , ] max ( ) n x a b f x M ∈ ≤ donde M es una constante independiente de n, entonces el error de interpolación tiende a cero según h se va acercando a cero, i.e., hay convergencia. Este es el caso, por ejemplo para las funciones trigonométricas sin (x) y cos(x), y para la exponencial exp(x) en un intervalo finito. Ejemplo 9 Halla la cota del error al aproximar la función sin(x) con nodos equiespaciados en [0, π ] por el polinomio interpolador de tercer grado. Según la expresión del error para este caso: 1 ( 1) [ , ] ( ) ( ) max ( ) ( 1)! n n n x a b h f x p x f x n + + ∈   − ≤   +   como la derivada n-ésima de la función está acotada por la unidad, podemos generalizar ( 1) [ , ] max ( ) 1 n x a b f x + ∈ ≤ y decir que para cualquier valor de n el error está acotado por 1 ( ) ( ) ( 1)! n n h f x p x n +   − ≤   +   en particular para 3 y 4 h π = = n será: 4 1 0.0159 24 4 E π   ≤ =     Esta propiedad (derivadas de todo orden acotadas uniformemente) no la poseen todas las funciones. El ejemplo clásico de este mal comportamiento en las derivadas es la función de Runge como vemos a continuación: Nodos de Chebyshev Cuando una función tiene características muy diferentes a los polinomios, la interpolación polinómica con nodos equiespaciados puede resultar inadecuada, el aumento del grado empeora el resultado en vez de mejorarlo. Consideremos la función de Runge en el intervalo [−5,5]: 2 1 1 y x = + Los polinomios que interpolan sus valores en puntos equiespaciados de este intervalo se desvían bastante de la función, sobre todo cerca de los extremos. Interpolación con nodos equiespaciados -5 0 5 -0.5 0 0.5 1 Grado 4 -5 0 5 -2 -1 0 1 Grado 8 -5 0 5 -4 -2 0 2 Grado 12 -5 0 5 -15 -10 -5 0 5 Grado 16 Observamos que el error máximo en el intervalo aumenta con el grado del polinomio interpolante. Para minimizar el error es conveniente tomar nodos de interpolación especiales, en lugar de los nodos equiespaciados considerados hasta ahora. Interpolación con nodos de Chebyshev -5 0 5 -0.5 0 0.5 1 Grado 4 -5 0 5 -0.5 0 0.5 1 Grado 8 -5 0 5 0 0.5 1 Grado 12 -5 0 5 0 0.5 1 Grado 16 Los llamados nodos de Chebyshev hacen mínimo, en un intervalo dado, el valor máximo del polinomio ( ) que aparece en la expresión del error. Para el caso particular del intervalo [−5,5], estos nodos son 1 2 ( ) ( n x x x x x x + − − − L 1 ) 2( ( 1)) 1 5cos , 1, 2,..., 1. 2 2 i n i x i n π − − +   = =   +   n + En las gráficas se aprecia la reducción del error al interpolar la función de Runge en los nodos de Chebyshev. Otra alternativa puede ser interpolar mediante funciones de otro tipo. En lugar de polinomios, podemos considerar funciones racionales, funciones definidas por intervalos, etc., como veremos en temas posteriores. Problemas 1.- La solubilidad del cloruro amónico en el agua toma, a distintas temperaturas, los valores siguientes: Temperatura 10 20 30 40 50 60 Solubilidad 33 37 42 46 51 55 Utiliza interpolación lineal para estimar la solubilidad del compuesto a una temperatura de 45º. Compara el resultado con el obtenido mediante interpolación cuadrática. 2.- Hace unos años, no tantos como imaginas, disponer de una calculadora no era nada fácil, para evaluar las funciones trigonométricas, por ejemplo sin(x), se disponía de tablas del siguiente tipo: 0' 10' 20' 30' 40' 50' 45 7071 7092 7112 7133 7153 7173 46 7193 7214 7234 7254 7274 7294 47 7314 7333 7353 7373 7392 7412 48 7431 7451 7470 7490 7509 7528 Halla mediante interpolación lineal el seno de 47º 34', compara el resultado con el obtenido al utilizar todos los puntos para obtener el polinomio de interpolación y en ambos casos halla el error cometido utilizando el valor que proporciona MATLAB. 3.- Las diferentes contracciones de un resorte dependiendo de las cargas aplicadas vienen dadas en la siguiente tabla: Carga (Kp) 5 10 15 20 25 Contracción (mm) 49 105 172 253 352 a) Escribe el polinomio de Lagrange de grado 2 para estimar la contracción producida por una carga de13 Kp. b) Edita una función en MATLAB para evaluar el polinomio de interpolación de Lagrange en un punto dado y ejecútala para obtener el valor numérico del polinomio anterior en x = 13. 4.- La emisora de radio de la UPV ha determinado, por medio de encuestas, el porcentaje de ciudadanos que la sintonizan entre las 6 de la tarde y las 12 de la noche, lo mostramos en la siguiente tabla: Horas 6 7 8 9 10 11 12 Oyentes (%) 0.2 0.25 0.1 0.12 0.15 0.3 0.11 Construye la tabla de diferencias divididas para estos valores y expresa de forma completa el polinomio de Newton que consideres más adecuado para estimar el porcentaje de oyentes a las 9:30 de la noche. 5.- Edita una función en MATLAB para que a partir de los puntos de interpolación construya la tabla de diferencias dividas y obtenga como parámetro de salida los coeficientes del polinomio de Newton, lo evalúe en una serie de puntos y lo represente junto a los puntos de interpolación dados. 6.-Utiliza la función de MATLAB que has programado en el problema 4 para obtener las gráficas de los polinomios de interpolación que aparecen en el apartado de teoría de Nodos de Chebyshev para aproximar a la función de Runge tanto con nodos equiespaciados como con nodos de Chebyshev. 7.-El número de personas afectadas por el virus contagioso que produce la gripe en una determinada población viene dado por la siguiente función, donde t indica el tiempo en días: 2.1 1000 ( ) 2 999 t f t e − = + a) Aproxima esta función en [0,7] por polinomios de interpolación de grados 4,6 y 8, tomando nodos equiespaciados. Representa la función junto al polinomio para comprobar que en los extremos del intervalo el error es considerable. b) Calcula ahora los polinomios de interpolación tomando nodos de Chebyshev, para ello edita una función en MATLAB que vaya calculando los sucesivos polinomios de interpolación tomando nodos de Chebyshev hasta que el error global dado por la expresión: 1 0 0 2 2 1 1 ( ( ) ( ) ) 1 0 1 k k k E f t p = = − ∑ t 1 sea menor que una décima. Nota: Los nodos de Chebyshev se han dado en el intervalo [-5,5], hemos de obtenerlos ahora en [0,7], sabiendo que existe una correspondencia biyectiva entre los dos intervalos. 8.-Considera el polinomio q para nodos igualmente equiespaciados una distancia h. Demuestra que 1 2 ( ) ( )( ) ( ) n x x x x x x x + = − − − L 1 1 1 ( ) ! n n q x n h x x x + + ≤ ≤ ( ) x f x e = ≤ Si ) es el polinomio interpolador de en [0,1] usa el resultado anterior para demostrar que: ( ) n p x 0 1 max ( ) 0 cuando x n x e p x n ≤ ≤ − → → +∞ 9.-. Se desea aproximar la función tg x en el intervalo [−3/2,3/2]. a) Considera como nodos de interpolación los puntos , precisamente en este orden. Construye la tabla de diferencias divididas y justificar el comportamiento de los coeficientes de interpolación. , 0, 1, 2, 3 k x k para k α = ⋅ = ± ± ± b) Representa gráficamente la diferencia entre el polinomio de grado 5 y la función interpolada en [−3/2, 3/2], tomando 150 intervalos. ¿Cuál es el error máximo apreciado en la tabla de valores? c) Halla un valor de α que minimice el error máximo. Explica el procedimiento seguido en su determinación. d) Toma como nodos de interpolación los puntos x s , hallar el α óptimo y el error máximo. Compara con el error obtenido con nodos equiespaciados. 3 ( / 6) k en k α π = Soluciones 3.- a) Elegimos los tres nodos más cercanos a x = 13, que son (10, 105), (15,172) y (20, 253) el polinomio de Lagrange será de la forma: ( 10)( 20) ( 15)( 20) ( 15)( 10) ( ) 172 105 253 2 (15 10)(15 20) (10 15)(10 20) (20 15)(20 10) x x x x x x P x − − − − − − = + + − − − − − − b) Para evaluarlo se requieren realizar numerosos cálculos y puede acumularse error de redondeo por lo que este tipo de polinomio no suele ser muy utilizado, no obstante como práctica de programación es interesante pensar el algoritmo que nos proporcionaría la evaluación de estos polinomios. function v=lagrange(x,y,a) n=length(x);%grado pol n-1 v=0; for i=1:n xi=x(i); xn=[x(1:i-1) x(i+1:n)]; l(i)=(prod(a-xn))./(prod(xi-xn)); x=[x(1:i-1) xi x(i+1:n)]; v=v+y(i)*l(i); end xn=[15 10 20]; yn=[172 105 253]; v=lagrange(xn,yn,13) v = 143.5200 4.- Editamos en primer lugar una función para crear la tabla de diferencias divididas y así obtener los coeficientes del polinomio de Newton de forma análoga a como lo hicimos en el Ejemplo 7, posteriormente en otra función procedemos a evaluar este polinomio utilizando su forma anidada como vimos en el Ejemplo 8, finalmente representamos el polinomio mediante una función que llama a estas dos. function p =tabladd(x,y) %parámetros de entrada: x e y son los puntos de interpolación %A es la matriz de diferencias divididas de Newton %parámetro de salida: p son los coeficientes del polinomio de Newton n=length(y); A=zeros(n,n); A(:,1)=y; for k=2:n A(k:n,k)=(A(k:n,k-1)- A(k-1:n-1,k-1))./ (x(k:n)-x(1:n-k+1)); end p=diag(A); function y=polynew(p,nodo,x) %p es el vector de coeficientes del polinomio %nodo son las abscisas de los puntos de interpolación %evalúa el polinomio de Newton en el punto x n=length(p)-1; y=p(n+1); for k=n:-1:1 y=y.*(x-nodo(k))+p(k); end y=polynw(p,nodo,x) function repnew(x,y) p=tabladd(x,y); xp=linspace(x(1),x(length(x)); yp=polynw(p,x,xp) plot(x,y,'*',xp,yp) 5.-Editamos una función para evaluar la función de Runge. function y=f(x) y=1./(1+x.^2); Mediante distintas llamadas a las funciones anteriores obtenemos los polinomios que aproximan a la función de Runge en el primer caso tomando nodos equiespaciados y en el segundo con nodos de Chebychef xf=linspace(-5,5); yf=feval('f',xf); j=1; for i=5:4:17 x=linspace(-5,5,i); y=feval('f',x); subplot(2,2,j) j=j+1; p=tabladd(x',y'); yp=polynew(p,x,xf); plot(x,y,'*',xf,yf,xf,yp) end Ahora con nodos de chebyshev clear x xf=linspace(-5,5); yf=feval('f',xf); j=1; for i=4:4:16 for k=1:i+1 x(k)=5*cos(((2*(i-(k-1))+1)/(2*i+2))*pi); end y=feval('f',x); p=tabladd(x',y'); yp=polynew(p,x,xf); subplot(2,2,j) j=j+1; plot(x,y,'*',xf,yf,xf,yp) end 7.- b) Escribimos el código de la función: function y=gr(t) y=100./(2+999*exp(-2.1*t)); Interpolamos con nodos de Chebyshev: clear x xg=linspace(0,7); yg=feval('gr',xg); E=1; n=1; while E>0.1 for i=1:n+1 x(i)=cos(((2*(n-(i-1))+1)/(2*n+2))*pi);% nodos de Chebyshev en [-1,1] end xc=(x+1)/2*7;% nodos de Chebyshev en [0,7] yc=feval('gr',xc); p=interpol(xc',yc'); yp=polyval(p,xg); E=sum((yg-yp).^2)/100; n=n+1; end E E = 0.0344 0 1 2 3 4 5 6 7 0 10 20 30 40 50 60 Polinomio de interpolación de grado 10 file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat.../Practica%2010%20-%20Interpolacion%20Polinomica/practica%2010.txt.txt PRACTICA 10 - INTERPOLACION POLINOMICA ejemplo del muelle: >> x = [5 10 15]'; y = [395 620 795]'; >> A = [x.^2 x x.^0] A = 25 5 1 100 10 1 225 15 1 >> p = A\y p = -1.0000 60.0000 120.0000 >> %p(x) = -x.^2 + 60x + 120 >> xg = linspace(5,15); >> yg = polyval(p,xg); >> plot (x,y,'*',xg, yg) >> %Desplazando el origen >> clear >> x = [5;10;15]; >> y = [395; 620; 795]; >> xd = x-10; >> Ad = vander(xd); >> cond(Ad) ans = 35.4120 >> pd = Ad\y; >> xn = linspace(5,15,10); >> vpd = polyval(pd, xn-10); >> plot (x,y,'*',xn, vpd) >> %la grafica resultante, es la misma >> %pero se ha calculado con operaciones mas estables ---------- METODO DE NEWTON file:///E|/Documentos/Estudios/Documentacion%20Asignatu...%20-%20Interpolacion%20Polinomica/practica%2010.txt.txt (1 of 3) [09/03/2008 13:49:25] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat.../Practica%2010%20-%20Interpolacion%20Polinomica/practica%2010.txt.txt >> x = [4,6,2,8]'; y = [114 116 62 8]'; >> [p,v] = pnewton(x,y,2) p = 114.0000 1.0000 -6.2500 -1.2500 v = 62 Recuerda que Newton no devuelve los coeficientes del polinomio Para evaluar el polinomio que devuelve newton se utiliza el parametro z de la propia funcion >> x = [5 10 15]'; y = [395 620 795]'; >> A = vander(x) A = 25 5 1 100 10 1 225 15 1 >> p = A\y p = -1.0000 60.0000 120.0000 >> >> polyval(p,1) ans = 179.0000 >> >> [pn,v] = pnewton(x,y,1) pn = 395 45 -1 v = 179 file:///E|/Documentos/Estudios/Documentacion%20Asignatu...%20-%20Interpolacion%20Polinomica/practica%2010.txt.txt (2 of 3) [09/03/2008 13:49:25] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat.../Practica%2010%20-%20Interpolacion%20Polinomica/practica%2010.txt.txt representacion gráfica >> z = linspace(5,15); >> [pn,v] = pnewton(x,y,z); >> plot(z,v,x,y,'*') ej de las transparencias >> x = [2 4 6 8]'; y = [62 114 116 8]'; >> z = linspace(2,8); >> [pn,v] = pnewton(x,y,z); >> plot(z,v,x,y,'*') file:///E|/Documentos/Estudios/Documentacion%20Asignatu...%20-%20Interpolacion%20Polinomica/practica%2010.txt.txt (3 of 3) [09/03/2008 13:49:25] 11 Interpolación Polinómica Segmentaria Podemos ver en la figura la puesta en órbita del primer elemento de la estación orbital internacional, que incluía el sistema de manipulación remota canadiense: Canadian Mobile Servicing Center. Los sistemas de manipulación remota como éste y otros muchos utilizan un avanzado sistema de control que guía un brazo manipulador hacia posiciones predeterminadas. Uno de los requisitos de dicho sistema de control es el diseño de una trayectoria para que el brazo se mueva de un sitio a otro de manera que se eviten movimientos bruscos que puedan causar que se desprendan los objetos transportados o incluso que se dañe el propio brazo robótico. Dicha trayectoria se diseña inicialmente en términos de un cierto número de puntos hacia los que debe moverse el brazo. Debe encontrarse una curva que pase por todos esos puntos y que además sea lo más suave posible, de manera que no se produzcan daños en el brazo. La interpolación polinómica segmentaria nos permitirá definir una curva suficientemente suave (contínua, diferenciable) para este y otros propósitos. El caso lineal nos permitirá un ajuste contínuo en los puntos con pocas operaciones, pero sin "suavidad", es decir, sin derivabilidad en los nodos. Sin embargo, la interpolación polinómica segmentaria cúbica cumplirá nuestras espectativas definiendo una trayectoria suave que se ajuste a los puntos predefinidos y sin las grandes oscilaciones de los polinomios interpolantes de grado superior. 11.1Interpolación Polinómica Segmentaria Lineal La interpolación polinómica ordinaria presenta inconvenientes cuando hay muchos nodos y la función no se parece mucho a un polinomio. En la práctica anterior hemos visto que al interpolar la función de Runge, el aumento del número de nodos (y consiguientemente, del grado del polinomio) en lugar de proporcionar más precisión, provoca mayores oscilaciones del interpolante e inestabilidad en el cálculo. Los polinomios no son adecuados para aproximar ciertos tipos de funciones, por ejemplo funciones racionales como la de Runge o funciones periódicas como el seno o el coseno. La interpolación polinómica segmentaria evita estos inconvenientes limitando el grado del polinomio. En contrapartida, las condiciones de interpolación se satisfacen localmente, utilizando polinomios distintos en cada intervalo. Dada una función f o un conjunto de pares de valores (x k , y k ), k = 1, 2, …, n+1, determinaremos una función s que pasa por los puntos dados y que en cada intervalo [x k , x k+1 ] es un polinomio ( ) ( ) | | 1 , , , 1, 2,..., k k k s x q x x x x k n + = ∈ = La función interpolante s se denomina spline, aludiendo a unas reglas elásticas que se usan en delineación. Los splines son muy utilizados en diseño, porque se adaptan a los nodos prescritos sin oscilar demasiado en puntos intermedios. Los distintos trozos se ensamblan suavemente si se toman los polinomios de grado suficiente. El polinomio de interpolación es muy sensible a pequeñas variaciones en los datos. En cambio, la obtención de los splines es numéricamente estable y puede hacerse utilizando matrices dispersas (véase el código de la función spline de MATLAB). El caso más simple de interpolación polinómica segmentaria consiste en tomar, en cada subintervalo, el segmento de recta que une los valores de la función en los extremos. El resultado es una línea quebrada, poco agradable estéticamente, si la función oscila mucho. Evitamos las esquinas considerando polinomios de mayor grado en cada subintervalo. Los splines cúbicos ofrecen un buen equilibrio entre dificultad de cálculo y apariencia suave del resultado, que es de grado 3 en cada subintervalo. Para determinar el spline cúbico, se necesitan un par de condiciones adicionales, que dan lugar a distintos tipos de spline. Analizaremos los llamados splines naturales, splines completos y splines no nodo. La interpolación segmentaria lineal utiliza polinomios de primer grado para construir el spline. En cada subintervalo hemos de determinar los coeficientes a k y b k para que la recta de ecuación ( ) ( ), 1, 2,..., k k k k q x a b x x k n = + − = pase por los puntos (x k , y k ) y (x k+1 , y k+1 ). La condición de interpolación en el extremo izquierdo de cada intervalo, q k (x k ) = y k proporciona directamente a k , 1, 2,..., k k a y k n = = Imponiendo la condición de interpolación en el extremo derecho, q k (x k+1 ) = y k+1 , obtenemos la fórmula para b k 1 1 , 1, 2, ..., k k k k k y y b k n x x + + − = = − Para aplicar estas fórmulas con MATLAB conviene considerar los coeficientes a k como componentes de un vector a. Análogamente, los coeficientes b k serán las componentes de un vector b. Ejemplo 1 Obtengamos estos vectores con MATLAB para la función de Runge en el intervalo [-1,1]: 2 1 ( ) . 1 25 f x x = + n = 10; h = 2/n;% Tomamos 10 subintervalos x = [-1:h:1];% Abscisas y = 1./(1 + 25*x.^2);% Ordenadas de Runge a = y(1:n)% y tiene n+1 componentes b = diff(y)./diff(x) a = Columns 1 through 7 0.0385 0.0588 0.1000 0.2000 0.5000 1.0000 0.5000 Columns 8 through 10 0.2000 0.1000 0.0588 b = Columns 1 through 7 0.1018 0.2059 0.5000 1.5000 2.5000 -2.5000 -1.5000 Columns 8 through 10 -0.5000 -0.2059 -0.1018 Una vez obtenidos los coeficientes del spline, su evaluación en un punto x requiere un poco de trabajo: determinar a qué intervalo nodal [x k , x k+1 ] pertenece el punto x, elegir los coeficientes a k , b k del polinomio correspondiente y ya, por fin, evaluar q k (x) según su fórmula. Afortunadamente, MATLAB automatiza estas tareas mediante las órdenes que veremos a continuación. 11.2 Funciones de MATLAB para Splines MATLAB dispone de varias funciones específicas para calcular splines y evaluarlos. Si hemos calculado ya los coeficientes, lo primero que hacemos es unirlos en una matriz. s = [b' a']% De mayor a menor grado s = 0.1018 0.0385 0.2059 0.0588 0.5000 0.1000 1.5000 0.2000 2.5000 0.5000 -2.5000 1.0000 -1.5000 0.5000 -0.5000 0.2000 -0.2059 0.1000 -0.1018 0.0588 Para evaluar el spline, además de los coeficientes, se necesitan los nodos. Con ambos datos, la función mkpp (make piecewise polynomial) crea un vector con toda la información relativa al spline. ps = mkpp(x,s) La evaluación del spline en esta forma recuerda a la de un polinomio ordinario, usando ppval en lugar de polyval. Representemos gráficamente la aproximación segmentaria lineal de la función de Runge. xg = (-1:.005:1)'; yg = 1./(1+25*xg.^2); ys = ppval(ps,xg); plot(x,y,'*',xg,yg,xg,ys) -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 -0.5 0 0.5 1 1.5 2 Comparando el spline lineal con el polinomio de grado 10 que interpola los mismos nodos, observamos que este último presenta más oscilaciones, sobre todo en los extremos del intervalo, mientras que el spline se ajusta mejor, pero no es derivable en los nodos. Empleando polinomios de mayor grado se obtienen splines que sí lo son. Consideraremos el caso de grado 3. 11.3 Interpolación Polinómica Segmentaria Cúbica El spline cúbico elimina dos problemas de la interpolación lineal: su lentitud de convergencia y el que presenta ángulos en los nodos, lo cual es inadecuado en ciertas aplicaciones. Un spline cúbico es una función polinómica segmentaria de grado 3 con derivada primera y segunda continuas. Dados n + 1 puntos (x k , y k ), k = 1, 2, …, n+1, con x 1 < x 2 < ... < x n+1 , hallaremos splines cúbicos ( ) ( ) | | 1 , , , 1, 2,..., k k k s x q x x x x k n + = ∈ = que verifiquen las siguientes condiciones de interpolación 1 1 ( ) , 1, 2, , ( ) , 1, 2, , k k k k k k q x y k n q x y k n + + = = = = K K y también las condiciones de conexión 1 1 1 1 1 1 ( ) ( ), 1, 2, , 1 ( ) ( ), 1, 2, , 1 k k k k k k k k q x q x k n q x q x k n + + + + + + ′ ′ = = − ′′ ′′ = = − K K Las primeras condiciones establecen que s es continua e interpola los puntos (x k , y k ). Las segundas implican que s tiene derivadas primera y segunda continuas. Para determinar el spline, podemos escribir cada polinomio componente de forma adecuada, por ejemplo, ( ) ( ) ( ) ( ) 2 3 , 1, 2,..., k k k k k k k k q x a b x x c x x d x x k n = + − + − + − = y sustituir esta expresión en las condiciones anteriores. Así obtenemos un sistema de ecuaciones lineales que deben verificar los coeficientes. Este procedimiento tiene dos desventajas. Primero, produce un sistema con ancho de banda innecesariamente grande y cuyos coeficientes pueden oscilar en varios ordenes de magnitud. En segundo lugar, el sistema tiene 4n incógnitas, mientras que las condiciones anteriores sólo proporcionan 4n–2 ecuaciones. Obviamente, esta indeterminación es intrínseca al problema, pero el ataque directo da poca información sobre cómo resolverlo. Por ello, procederemos de otro modo: obtendremos los coeficientes del spline en función de la derivada segunda del spline en los nodos, empleando las condiciones de interpolación. A continuación, las condiciones de conexión nos permitirán plantear un sistema lineal de ecuaciones, cuya resolución proporcionará el valor de la derivada segunda en los nodos y, por tanto, el valor de los coeficientes del spline. 11.3.1 Determinación de las derivadas segundas del spline Supongamos por un momento que conocemos los valores r k de las derivadas segundas del spline en los nodos ( ) , 1, 2,..., 1 k k s x r k n ′′ = = + Entonces, para k = 1, 2, ..., n ( ) ( ) 1 1 k k k k k k q x r q x r + + ′′ = ′′ = Como la derivada segunda de q k es de primer grado, su ecuación es la de la recta que pasa por los puntos (x k , r k ) y (x k+1 , r k+1 ): 1 ( ) ( ), 1, 2, ..., k k k k k k r r q x r x x k n h + − ′′ = + − = donde h k = x k+1 – x k . Integrando dos veces obtenemos 2 3 1 ( ) ( ) ( ) ( ) , 1, 2, ..., 2 6 k k k k k k k k k k r r r q x a b x x x x x x k n h + − = + − + − + − = donde a k y b k son constantes a determinar. Esta expresión proporciona directamente los coeficientes c k y d k del polinomio q k en función de las derivadas segundas r k . 1 2 6 k k k k k k r c r r d h + = − = Veamos cómo obtener los otros dos coeficientes. La primera condición de interpolación proporciona directamente el valor de a k . ( ) k k k k q x a y = = La condición de interpolación en el extremo derecho proporciona 2 2 1 1 1 ( ) 2 6 k k k k k k k k k k k r r r q x a b h h h y + + + − = + + + = De las dos expresiones precedentes obtenemos el valor de b k : 1 1 1 6 3 6 3 k k k k k k k k k k k y y r r r r b h e h h + + + − | | | | = − + = − + | | \ . \ . Una vez expresados todos los coeficientes en función de las r k , volvamos al cálculo de estos valores. Ya hemos utilizado las condiciones de interpolación. La ecuación de partida presupone la continuidad de la derivada segunda. Sólo falta imponer, para k = 1, 2, ..., n–1, la coincidencia de las derivadas primeras en los nodos interiores: 1 1 1 1 1 ( ) 2 ( ) k k k k k k k k k k k r r q x b r h h q x b + + + + + − ′ = + + ′ = Igualando tenemos 1 1 2 k k k k k r r h b b + + + = − Sustituyendo las expresiones de los b k y agrupando los coeficientes de r k queda 1 1 1 2 1 , 1, 2, ..., 1 6 3 6 k k k k k k k k k h h h h r r r e e k n + + + + + + + + = − = − que es un sistema lineal de n–1 ecuaciones con n+1 incógnitas, los r k . Veamos la estructura de la matriz del sistema y los términos independientes. Las ecuaciones obtenidas se expresan matricialmente como M r = g donde r es la columna de incógnitas, la matriz del sistema es 1 1 2 2 2 3 3 2 3 3 4 4 2 2 1 1 1 1 6 3 6 6 3 6 6 3 6 6 3 6 6 3 6 n n n n n n n n h h h h h h h h h h h h M h h h h h h h h − − − − − − + + + = + + O O O y el vector de términos independientes 2 1 3 2 4 3 1 2 1 n n n n e e e e e e g e e e e − − − − − − − = − − M El sistema tiene dos ecuaciones menos que incógnitas, por lo que hacen falta dos condiciones adicionales para que tenga solución única. La elección de estas condiciones puede hacerse de varias formas, dando lugar a distintos tipos de spline. 11.4 Splines naturales Si en el anterior sistema de ecuaciones lineales eliminamos dos de las incógnitas, quedarán (n-2) ecuaciones y (n-2) valores de la derivada segunda por averiguar. Así, podemos definir un spline fijando de antemano el valor de la derivada segunda en el primer nodo y en el último. 11.4.1 Derivadas segundas del spline natural Si las derivadas segundas en los extremos son conocidas, pasamos r 1 y r n+1 al segundo miembro de las primera y última ecuaciones, que quedarán como 1 2 2 1 2 3 2 1 1 1 1 1 1 1 3 6 6 6 3 6 n n n n n n n n n h h h h r r e e r h h h h r r e e r − − − − + + + = − − + + = − − El sistema resultante es tridiagonal simétrico y se resuelve por eliminación gaussiana con O(n) operaciones sin necesidad de pivotación parcial. 1 2 2 1 2 1 1 2 2 3 3 2 3 3 2 3 3 4 4 4 4 3 1 1 2 2 2 1 1 1 1 1 1 3 6 6 6 3 6 6 3 6 6 3 6 6 6 3 n n n n n n n n n n n n n n n h h h h e e r h h h h r r e e h h h h r e e r e e h h h h r h e e r h h h − − − − − − − − + − − + − − + − + − = − + − − + M M O O O Calculados los restantes r k , los coeficientes del spline se hallan aplicando las relaciones obtenidas anteriormente. Cuando las derivadas en los extremos son nulas el spline se llama natural. A pesar de su nombre, este spline no es especialmente recomendable, pues en general, la función a interpolar no tendrá derivada segunda nula en los extremos, e imponer esta condición empeorará la aproximación, al menos cerca de estos. Ejemplo 2 Halla el spline cúbico que interpola la función ( ) sin cos 2 x y x | | = + | \ . , tomando 7 nodos equiespaciados en el intervalo | | 2 , 2 π π − , sabiendo que el valor de la derivada segunda en ambos extremos del intervalo es 0.25. Determinemos en primer lugar los nodos y valores a interpolar n = 6;% Número de subintervalos x = linspace(-2*pi,2*pi,n+1)% Nodos equiespaciados y = sin(x)+cos(x/2)% Valores a interpolar x = -6.2832 -4.1888 -2.0944 0 2.0944 4.1888 6.2832 y = -1.0000 0.3660 -0.3660 1.0000 1.3660 -1.3660 -1.0000 Los valores de la derivada segunda en los extremos son las componentes primera y última del vector r. r1 = 0.25; rn1 = 0.25; Obtendremos las restantes componentes de r resolviendo el sistema lineal que satisfacen las derivadas segundas. Al pasar al segundo miembro los términos correspondientes a r 1 y r n+1 queda un sistema cuadrado de orden n–1 con matriz tridiagonal simétrica. Construimos su matriz por diagonales, operando adecuadamente con los elementos del vector h. h = diff(x);% Vector de pasos ds = h(2:n-1)/6;% Diagonales secundarias dl = h(1:n-1)/3; dr = h(2:n)/3; dp = dl+dr;% Diagonal principal M = diag(dp) + diag(ds,-1) + diag(ds,1) M = 1.3963 0.3491 0 0 0 0.3491 1.3963 0.3491 0 0 0 0.3491 1.3963 0.3491 0 0 0 0.3491 1.3963 0.3491 0 0 0 0.3491 1.3963 Los términos independientes se obtienen fácilmente con el comando diff e = diff(y)./h g = diff(e) e = 0.6522 -0.3495 0.6522 0.1748 -1.3045 0.1748 g = -1.0018 1.0018 -0.4775 -1.4792 1.4792 Si las derivadas segundas no son nulas, hay que ajustar el primer y el último elementos de g: g(1) = g(1) - h(1)*r1/6 g(n-1) = g(n-1) - h(n)*rn1/6 g = -1.0890 1.0018 -0.4775 -1.4792 1.4792 g = -1.0890 1.0018 -0.4775 -1.4792 1.3920 Ya podemos resolver el sistema lineal para obtener los valores desconocidos de las segundas derivadas, r k . r = M\g' r = -1.0415 1.0460 -0.2727 -1.3232 1.3277 r = [r1;r;rn1] r = 0.2500 -1.0415 1.0460 -0.2727 -1.3232 1.3277 0.2500 11.4.2 Coeficientes de los polinomios q k (x), k = 1, 2, ..., n Una vez obtenidas las derivadas segundas, aplicamos las fórmulas de los coeficientes de los polinomios interpolantes. rl = r(1:n);rr = r(2:n+1); a = y(1:n)'; b = e' -(rr + 2*rl).*h'/6; c = rl/2; d = diff(r)./h'/6; Ya sólo queda componer la matriz del spline y representarlo gráficamente, como en el caso lineal: s = [d, c, b, a] % Coeficientes de los qk ps = mkpp(x,s); % Codificación del spline xg = linspace(-2*pi,2*pi); % Abscisas para gráfico ys = ppval(ps,xg); % Evalúa el spline yg = sin(xg)+cos(xg/2); % Evalúa la función plot(x,y,'*',xg,yg,xg,ys,'-.')% Gráfico s = -0.1028 0.1250 0.8412 -1.0000 0.1661 -0.5207 0.0124 0.3660 -0.1049 0.5230 0.0172 -0.3660 -0.0836 -0.1363 0.8270 1.0000 0.2110 -0.6616 -0.8442 1.3660 -0.0858 0.6639 -0.8394 -1.3660 -8 -6 -4 -2 0 2 4 6 8 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 La gráfica muestra la excelente aproximación de la función mediante el spline calculado conociendo las derivadas segundas en los extremos. 11.5 Splines completos Si tenemos información de la derivada de la función en los extremos del intervalo, podemos obtener un spline cuya derivada tome estos valores. 11.5.1 Derivadas segundas del spline completo Sean 1 y′ e n y′ estas derivadas. Entonces se ha de cumplir ( ) ( ) 1 1 1 1 1 n n n q x y q x y + + ′ ′ ′ ′ = = Imponemos estas condiciones y expresamos los b k en función de los r k : 2 1 1 1 1 1 1 1 1 1 6 3 2 6 3 2 n n n n n n n n n n n n r r y b e h r r r r r r y b h e h h + + + + | | ′ = = − + | \ . + + | | | | | | ′ = + = − + + | | | \ . \ . \ . Ordenando quedan dos ecuaciones en los coeficientes r k 1 1 1 2 1 1 1 1 3 6 6 3 n n n n n n h h r r e y h h r r y e + + ′ + = − ′ + = − que añadimos al sistema lineal para tener n+1 ecuaciones con n + 1 incógnitas. 1 1 1 1 2 2 1 1 0 2 2 1 2 2 3 3 3 3 2 1 1 1 1 3 6 6 3 6 6 3 6 6 3 6 6 3 n n n n n n n n n n n n h h h h h h r e y r e e h h h h r e e r e e h h h h r y e h h − − − + + ′ − − + − = − + ′ − M M O O O El spline así obtenido se denomina spline completo. Ejemplo 3 Hallaremos a continuación el spline completo de la función ( ) sin cos 2 x y x | | = + | \ . , tomando 7 nodos equiespaciados en el intervalo | | 2 , 2 π π − , sabiendo que el valor de la derivada primera en ambos extremos del intervalo es 1. La matriz del sistema para el caso de condiciones sobre la derivada primera es fácil de construir: ds = h/6; % Diagonal secundaria dp = ([h';0]+[0;h'])/3; % Diagonal principal M = diag(dp) + diag(ds,-1) + diag(ds,1) M = 0.6981 0.3491 0 0 0 0 0 0.3491 1.3963 0.3491 0 0 0 0 0 0.3491 1.3963 0.3491 0 0 0 0 0 0.3491 1.3963 0.3491 0 0 0 0 0 0.3491 1.3963 0.3491 0 0 0 0 0 0.3491 1.3963 0.3491 0 0 0 0 0 0.3491 0.6981 De nuevo la matriz del sistema es tridiagonal simétrica y estrictamente diagonalmente dominante. El término independiente se expresa sencillamente como: e = diff(y')./h'; dy0=1; dyn=1; g = diff([dy0; e; dyn]) g = -0.3478 -1.0018 1.0018 -0.4775 -1.4792 1.4792 0.8252 siendo dy0 y dyn las derivadas en los nodos extremos. El sistema lineal proporciona ahora los valores r k de la derivada segunda en todos los nodos. r = M\g r = -0.0124 -0.9715 1.0287 -0.2736 -1.3023 1.2451 0.5595 Sustituyendo en las expresiones adecuadas calculamos los coeficientes del spline completo, a k , b k , c k y d k , exactamente igual que en el caso del spline natural. rl = r(1:n); rr = r(2:n+1); a = y(1:n)'; b = e - h'.*(2*rl + rr)/6; c = rl/2; d = diff(r)./h'/6; Formamos la matriz de coeficientes del spline: s = [d c b a] s = -0.0763 -0.0062 1.0000 -1.0000 0.1592 -0.4858 -0.0304 0.3660 -0.1036 0.5144 0.0295 -0.3660 -0.0819 -0.1368 0.8203 1.0000 0.2027 -0.6512 -0.8299 1.3660 -0.0546 0.6226 -0.8898 -1.3660 Una vez obtenidos los coeficientes, los pasamos al modo de polinomio segmentario: ps = mkpp(x,s) Evaluamos el spline y lo representamos: ys = ppval(ps,xg); plot(x,y,'*',xg,yg,xg,ys) -8 -6 -4 -2 0 2 4 6 8 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 11.6 Splines no nodo Si no disponemos de información sobre el comportamiento de la función en los nodos extremos, en lugar de asignar arbitrariamente las derivadas primeras o segundas, una alternativa mejor es suponer que los dos primeros polinomios, q 1 y q 2 , coinciden y los dos últimos, q n-1 y q n , también. Así obtenemos dos condiciones adicionales que hacen determinado el sistema lineal. Como q 1 y q 2 son de tercer grado y coinciden en x 2 , lo mismo que sus derivadas primera y segunda, sólo falta imponer que las derivadas terceras sean iguales: 1 2 2 ( ) ( ) q x q x ′′′ ′′′ = La derivada segunda de q k es de primer grado, por lo que su derivada es el cociente incremental 1 1 1 ( ) ( ) k k k k k k k k k k q x q x r r q x x h + + + ′′ ′′ − − ′′′ = = − Tomando k = 1, 2 y sustituyendo en la igualdad anterior obtenemos una ecuación lineal ( ) 2 1 1 2 2 1 3 0 h r h h r h r − + + − = que añadirmos al principio del sistema. Análogamente, igualando las derivadas terceras en x n obtenemos otra ecuación lineal ( ) 1 1 1 1 0 n n n n n n n h r h h r h r − − − + − + + − = que añadimos al final del sistema. Estas condiciones determinan un spline, llamado spline no nodo porque el polinomio interpolador no cambia al pasar por x 2 y por x n . 11.7 Splines en MATLAB Recogiendo todas las operaciones efectuadas en los ejemplos de esta Práctica, no es difícil editar ficheros.m para obtener splines con condiciones naturales o condiciones sobre la derivada en los extremos. La función spline incorporada en MATLAB obtiene el spline no nodo. Calcula internamente los coeficientes de los polinomios y da el resultado ya en forma de polinomio segmentario, que se evalúa con ppval para su representación gráfica. ps = spline(x,y); ys = ppval(ps,xg); plot(x,y,'*',xg,yg,xg,ys,'-.') -8 -6 -4 -2 0 2 4 6 8 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 Los coeficientes de los polinomios se obtienen con la función unmkpp (unmake piecewise polynomial), que separa la información en un vector de nodos y una matriz de coeficientes. El proceso inverso, obtener el polinomio segmentario a partir de los nodos y los coeficientes del spline, se realiza con la función mkpp, ya utilizada previamente en varias ocasiones. [nodos, coefs] = unmkpp(ps) Si damos tres argumentos de entrada a spline, el tercero es tomado como abscisas en las que se evalúa el spline, y el programa devuelve las ordenadas correspondientes, en lugar de los coeficientes del polinomio segmentario. ys = spline(x,y,xg) MATLAB dispone asimismo de una función genérica para la interpolación segmentaria de funciones de una variable, interp1, que engloba la interpolación lineal y los splines cúbicos. Poniendo yl = interp1(x,y,xg) se obtienen las ordenadas correspondientes a xg que interpolan linealmente (x,y). Añadiendo como cuarto argumento la cadena 'spline', da el mismo resultado que la orden spline. ys = interp1(x,y,xg,'spline') Ejemplo 4 Las gráficas muestran distintas aproximaciones de la función de Runge 2 1 1 25 y x = + obtenidas interpolando sus valores en 9 nodos equiespaciados en [–1,1]. La primera se obtiene con la función spline de MATLAB. x = -1:.5:1; % Nodos y = 1./(1+25*x.^2); % Valores xg = -1.1:0.05:1.1; % Abscisas para el gráfico yg = 1./(1+25*xg.^2); % Ordenadas ys = spline(x,y,xg); plot(x,y,'*',xg,yg,xg,ys) -1.5 -1 -0.5 0 0.5 1 1.5 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 spline no-nodo -1.5 -1 -0.5 0 0.5 1 1.5 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 spline lineal La interpolación segmentaria lineal de esta función, a la que corresponde la segunda gráfica, se ejecuta con las siguientes instrucciones: xl = -1:0.02:1; yl = interp1(x,y,xl); plot(x,y,'*',xg,yg,xl,yl) Los dos últimos gráficos muestran los splines obtenidos con condiciones naturales (considerando nulas las derivadas segundas en los extremos) y con derivadas primeras dadas en los extremos (aproximadamente 0.08 y - 0.08, para la función de Runge). -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 spline natural -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 spline completo El peor ajuste del primer gráfico en los extremos se debe a que, en el spline de MATLAB, los dos primeros polinomios coinciden, al igual que los dos últimos, y en este ejemplo sólo hay ocho intervalos. Ejemplo 5 Consideremos un brazo robótico como el que nos ha servido para introducir el tema. Tenemos almacenados en una tabla algunos puntos de la trayectoria del brazo; además, dichos puntos están en el orden necesario para que el brazo se mueva hasta una posición para coger un objeto y luego vuelva a la posición original. Supondremos también que los puntos intermedios incluidos en la trayectoria tratan de evitar choques del brazo o bien guiarlo hacia sensores que recogen información. Así, cada punto tendrá tres coordenadas: las coordenadas x e y relativas a la posición del brazo y una tercera componente, que denotaremos por acción, codificada del siguiente modo: Acción Significado 0 posición de partida 1 posición intermedia 2 posición de coger objeto 3 posición de soltar objeto El problema consiste en diseñar una curva "suave" mediante interpolación cúbica segmentaria de manera que sirva de guía para que el brazo robótico, partiendo de un punto determinado, se mueva a una posición concreta para coger un objeto, lo deje en otra posición y vuelva al punto de partida. Estas posiciones, junto con otras intermedias, se ven reflejadas en la siguiente tabla: x y acción 0 0 0 2 4 1 6 4 1 7 6 2 12 7 1 15 1 3 8 -1 1 4 -2 1 0 0 0 En primer lugar representamos gráficamente dichos puntos conectándolos mediante rectas, lo que en la práctica supone una interpolación polinómica segmentaria lineal. x=[0 2 6 7 12 15 8 4 0]; y=[0 4 4 6 7 1 -1 -2 0]; plot(x,y,'*',x,y) 0 5 10 15 -2 -1 0 1 2 3 4 5 6 7 Observamos cómo esta aproximación, además de ser muy pobre, se traduce en movimientos excesivamente bruscos para un comportamiento eficiente de un brazo robótico. Se hace, por tanto, necesaria una trayectoria que permita al brazo moverse con suavidad de una posición a otra sin poner en peligro a los objetos que transporta. 0 5 10 15 -2 -1 0 1 2 3 4 5 6 7 Para diseñar el spline cúbico dividiremos la trayectoria en tres trozos: desde la posición de partida hasta coger el objeto, desde ese intante hasta que soltamos el objeto y, por último, desde que se suelta el objeto hasta que se vuelve a la posición original. Esta división es lógica puesto que el brazo ha de detenerse al final de cada una de estas trayectorias. accion=[0 1 1 2 1 3 1 1 0]; coger=find(accion==2); soltar=find(accion==3); fin=length(x); x1=x(1:coger), y1=y(1:coger) x2=x(coger:soltar), y2=y(coger:soltar) x3=x(soltar:fin), y3=y(soltar:fin) ; x1 = 0 2 6 7 y1 = 0 4 4 6 x2 = 7 12 15 y2 = 6 7 1 x3 = 15 8 4 0 y3 = 1 -1 -2 0 Para determinar el número de puntos que usaremos para representar los splines, calculamos la distancia mínima entre los puntos conocidos en toda la trayectoria. Así, el incremento en la variable x para definir el spline será la décima parte de esa distancia mínima. incr=min(abs(x(2:fin)-x(1:fin-1)))/10; De este modo, al menos habrá 10 puntos de representación entre cada par de puntos de la tabla anterior, distribuidos del siguiente modo: t1=x(1):incr*sign(x(coger)-x(1)):x(coger); t2=x(coger):incr*sign(x(soltar)-x(coger)):x(soltar); t3=x(soltar):incr*sign(x(fin)-x(soltar)):x(fin); Calculamos los splines no-nodo mediante el comando de MATLAB: s1=spline(x1,y1,t1); s2=spline(x2,y2,t2); s3=spline(x3,y3,t3); y dibujamos la trayectoria resultante: plot([t1 t2 t3],[s1 s2 s3],x,y,'o') title('Recorrido del brazo articulado'), xlabel('x'),ylabel('y'),grid 0 5 10 15 -4 -2 0 2 4 6 8 10 Recorrido del brazo articulado x y 11.8 Problemas 1. Aproxima el valor de la función ( ) ( ) 3 cos f x x x = − definida en el intervalo [-3,3], en el punto x = 0.75, empleando para ello: a) el polinomio interpolador de Newton de quinto grado, empleando nodos equiespaciados distribuidos en torno al punto a aproximar, b) un spline lineal, empleando 10 puntos equidistribuidos en el intervalo [-3,3], c) un spline no-nodo, utilizando los mismos puntos que en el apartado anterior. d) . ¿Cuál es el valor aproximado de la función en el punto x = 0.75 en cada una de las aproximaciones?. ¿Cuál es el error cometido en cada caso? 2. Siguiendo las instrucciones de la sección 11.4, calcula la aproximación a la función ( ) ( ) 3 cos f x x x = − del problema anterior mediante un spline natural. Emplea para ello 10 puntos equidistribuidos en el intervalo [-3,3]. ¿Se observan mejoras respecto a los resultados obtenidos en el problema 1?. 3. Se ha plasmado en una tabla la evolución, cada dos horas, de la temperatura en Valencia durante un día invernal: Hora Grados Hora Grados Hora Grados Hora Grados 2 8 8 8 14 16 20 11 4 8 10 14 16 14 22 10 6 7 12 15 18 13 24 8 a) Representa gráficamente los valores de la tabla. b) Mediante un polinomio interpolador de tercer grado, aproxima la temperatura en Valencia a las 8:45 de la fecha. c) Emplea un spline lineal para aproximar la temperatura a la misma hora. d) ¿Qué temperatura marcarían los termómetros en Valencia a las 8:45 si la aproximamos mediante un spline natural?¿Y con un spline no-nodo? e) Representa gráficamente las curvas calculadas en los apartados anteriores. 4. Siguiendo las instrucciones de la sección 11.5, calcula la temperatura en Valencia a las 8:45 horas mediante un spline completo, suponiendo que la variación de la tempertura es nula en los instantes inicial y final del estudio. ¿Consideras esta suposición razonable a la vista de los resultados obtenidos en el ajuste?. 5. A continuacion motramos, tabulados, algunos valores de la función error, erf(x). x 0.15 0.27 0.76 0.89 1.07 2.11 f(x) 0.1680 0.2974 0.7175 0.7918 0.8698 0.9972 a) Utiliza los datos de la tabla para construir un spline cúbico (no-nodo) que aproxime la función error. Representa gráficamente dicho spline, junto con los datos tabulados. b) Compara las aproximaciones obtenidas en x = 0.33, x = 0.92 y x = 2.05 con los valores que MATLAB proporciona empleando la instrucción erf. c) ¿Mejoran los resultados si empleamos un spline natural?¿y con un spline completo?. 6. Las estrellas llamadas cefeidas se caracterizan por una variación en el tiempo suave y periódica de su brillo aparente, llamado magnitud visible. En la siguiente tabla se proporcionan datos experimentales acerca de la variación de la magnitud ∆m de la estrella δ Cephei, que da nombre a este tipo de estrellas variables, en un periodo de tiempo t determinado. t -0.2 -0.1 0 0.1 0.2 0.3 0.4 0.5 ∆m -0.3 -0.5 -0.97 -0.94 -0.8 -0.7 -0.56 -0.45 t 0.6 0.7 0.8 0.9 1 1.1 1.2 ∆m -0.34 -0.25 -0.35 -0.6 -1 -0.97 -0.8 a) Representa gráficamente los puntos dados y el spline lineal calculado para aproximar la magnitud aparente de δ Cephei en los instantes t = 0.43, t = 0.67 y t = 1.05. ¿Cuál es la aproximación en cada caso. b) Aproxima la magnitud aparente de δ Cephei en los instantes t = 0.43, t = 0.67 y t = 1.05 mediante un spline no-nodo, empleando los datos de la tabla adjunta. Representa gráficamente la aproximación obtenida. c) ¿Varía sustancialmente la aproximación si se consideran únicamente los datos correspondientes a t = -0.2, 0, 0.2, ..., 1.2?. Razona la respuesta. 7. La medición del tiempo se basa en las observaciones de la rotación diurna de la bóveda celeste y del movimiento anual del Sol, es decir en la rotación de la Tierra sobre su eje y en la traslación de ésta alrededor del Sol. Para determinar la hora oficial de un lugar del que conocemos la posición del meridiano, resulta necesario conocer el valor de la llamada ecuación de tiempos (Eq), que proporciona la diferencia entre el tiempo solar medio y el tiempo solar verdadero en un mismo instante y lugar. En la siguiente tabla se proporciona el valor de la ecuación de tiempos (en minutos y segundos) el día 15 de cada mes para un año determinado (bisiesto). En aras de una mayor simplicidad, se han numerado los días del año de forma consecutiva. a) Representa gráficamente los datos tabulados. b) Aproxima el valor de la ecuación de tiempos el 3 de mayo (día 124) mediante un spline lineal. ¿Cuál es el error cometido teniendo en cuenta que el valor exacto es de -3m 8s? ¿Mejora un spline cúbico la aproximación?¿Cuál es el error cometido en este caso? c) Utiliza un spline cúbico para aproximar el valor de la ecuación de tiempos el 30 de septiembre (día 274). ¿Cuál es el error cometido teniendo en cuenta que el valor exacto es de -9m 57s? d) Representa gráficamente los splines obtenidos en los apartados anteriores. Día Eq Día Eq Día Eq 15 9m 3s 136 -3m 42s 259 -4m 45s 46 14m 13s 167 0m 23s 289 -14m 11s 75 9m 0s 197 5m 54s 320 -15m 25s 106 0m 5s 228 4m 29s 350 -4m 56s 11.9 Soluciones Problema 1 Aproximaremos la función ( ) ( ) 3 cos f x x x = − en el intervalo [-3,3] empleando distinto número de puntos, en función de lo pedido en cada apartado: a) En primer lugar, partimos de 6 puntos equiespaciados, ya que el polinomio interpolador es de grado 5: x = -3:6/5:3 y = x-cos(x.^3) x = -3.0000 -1.8000 -0.6000 0.6000 1.8000 3.0000 y = -2.7079 -2.6999 -1.5768 -0.3768 0.9001 3.2921 Reordenamos ambos vectores en torno al punto a aproximar: x1 = [0.6 -0.6 1.8 -1.8 3.0 -3.0]; y1 = [-0.3768 -1.5768 0.9001 -2.6999 3.2921 -2.7079]; Utilizaremos el vector xg = -3:0.05:3; para representar gráficamente el polinomio interpolador de Newton. [yg,p]=polynew(x,y,x1,y1,xg,5); plot(x,y,'*',xg,yg) b) Para construir el spline lineal con diez puntos equiespaciados: x = -3:2/3:3; y = x-cos(x.^3); n=length(x); a = y(1:n-1);% y tiene n+1 componentes b = diff(y)./diff(x); s = [b' a']% De mayor a menor grado s = -0.9241 -2.7079 2.6099 -3.3239 0.0655 -1.5840 0.3115 -1.5403 1.0000 -1.3326 1.6885 -0.6660 1.9345 0.4597 -0.6099 1.7493 2.9241 1.3427 Para evaluar el spline, creamos el vector ps con toda la información relativa al spline. ps = mkpp(x,s); Evaluamos el spline y representemos gráficamente la aproximación segmentaria lineal de la función, junto con la función a aproximar: ys = ppval(ps,xg); xg = -3:0.05:3; yg = xg-cos(xg.^3); plot(x,y,'*',xg,yg,'b',xg,ys,'g') observando cómo el spline lineal es una aproximación sumamente pobre. c) A continuación emplearemos un spline no-nodo, utilizando los mismos puntos que en el apartado anterior, ps2 = spline(x,y); ys2 = ppval(ps2,xg); plot(x,y,'*',xg,yg,xg,ys2,'-.') observando una cierta mejora en la aproximación de la función, aunque todavía está lejos de ser una buena aproximación, ya que el número de puntos empleados es muy pequeño en proporción a la complejidad de la función a aproximar. d) Si evaluamos cada una de las aproximaciones en el punto x = 0.75 y calculamos el error exacto en cada caso, obtenemos los siguientes resultados: ƒ en el caso de la interpolación polinómica de grado 5: x = -3:6/5:3;y = x-cos(x.^3); x1 = [0.6 -0.6 1.8 -1.8 3.0 -3.0]; y1 = [-0.3768 -1.5768 0.9001 -2.6999 3.2921 -2.7079]; [ya,p]=polynew(x,y,x1,y1,0.75,5) ya = -0.2327 yex=0.75-cos(0.75^3); errora=abs(ya-yex) errora = 0.0704 ƒ en el caso del spline lineal: yb = ppval(ps,0.75); errorb=abs(yb-yex) errorb = 0.1999 ƒ para el spline no-nodo: yc = ppval(ps2,0.75); errorb=abs(yc-yex) errorb = 0.1173 Concluimos de los resultados obtenidos que, aunque en general el spline cúbico es la mejor aproximación, en el caso particular de la abscisa 0.75 la mejor aproximación la proporciona el polinomio interpolador de grado 5. ¡Error! No se encuentra el origen de la referencia. Dado que la función a aproximar es la misma que en el ejercicio anterior: x = -3:2/3:3; y = x-cos(x.^3); n=length(x)-1; % número de subintervalos Calculamos los valores en los extremos de la derivada segunda de la función a interpolar: r1=9*x(1)^4*cos(x(1)^3)+6*x(1)*sin(x(1)^3) rn1=9*x(n+1)^4*cos(x(n+1)^3)+6*x(n+1)*sin(x(n+1)^3) r1 = -195.7544 rn1 = -195.7544 Para obtener las restantes componentes de r resolveremos el sistema lineal definido por la matriz: h = diff(x);% Vector de pasos ds = h(2:n-1)/6;% Diagonales secundarias dl = h(1:n-1)/3; dr = h(2:n)/3; dp = dl+dr;% Diagonal principal M = diag(dp) + diag(ds,-1) + diag(ds,1) M = 0.4444 0.1111 0 0 0 0 0 0 0.1111 0.4444 0.1111 0 0 0 0 0 0 0.1111 0.4444 0.1111 0 0 0 0 0 0 0.1111 0.4444 0.1111 0 0 0 0 0 0 0.1111 0.4444 0.1111 0 0 0 0 0 0 0.1111 0.4444 0.1111 0 0 0 0 0 0 0.1111 0.4444 0.1111 0 0 0 0 0 0 0.1111 0.4444 y el vector de términos independientes e = diff(y)./h g = diff(e) e = -0.9241 2.6099 0.0655 0.3115 1.0000 1.6885 1.9345 -0.6099 2.9241 g = 3.5340 -2.5443 0.2459 0.6885 0.6885 0.2459 -2.5443 3.5340 Por último, ajustamos el primer y el último elemento de g: g(1) = g(1) - h(1)*r1/6; g(n-1) = g(n-1) - h(n)*rn1/6 g = 47.0349 -2.5443 0.2459 0.6885 0.6885 0.2459 - 2.5443 47.0349 y resolvemos el sistema lineal: r = M\g' r = 115.0765 -36.9916 9.9910 -0.7589 -0.7589 9.9910 -36.9916 115.0765 Completamos el vector de las derivadas segundas: r = [r1;r;rn1] r = -195.7544 115.0765 -36.9916 9.9910 -0.7589 -0.7589 9.9910 -36.9916 115.0765 -195.7544 Una vez obtenidas las derivadas segundas, calculamos los coeficientes de los polinomios interpolantes. rl = r(1:n);rr = r(2:n+1); a = y(1:n)'; b = e' -(rr + 2*rl).*h'/6; c = rl/2; d = diff(r)./h'/6; construimos el spline y lo representamos gráficamente: s = [d, c, b, a] % Coeficientes de los qk ps3 = mkpp(x,s); % Codificación del spline xg = -3:0.05:3; yg = xg-cos(xg.^3); ys3 = ppval(ps3,xg); % Evalúa el spline plot(x,y,'*',xg,yg,xg,ys3,'-.')% Gráfico s = 77.7077 -97.8772 29.7906 -2.7079 -38.0170 57.5383 -18.8525 -3.3239 11.7456 -18.4958 7.1758 -1.5840 -2.6875 4.9955 -1.8244 -1.5403 -0.0000 -0.3794 1.2530 -1.3326 2.6875 -0.3794 0.7470 -0.6660 -11.7456 4.9955 3.8244 0.4597 38.0170 -18.4958 -5.1758 1.7493 -77.7077 57.5383 -0.8980 1.3427 Comprobemos el error exacto de este spline en el punto x = 0.75: y3 = ppval(ps3,0.75); errorb=abs(y3-yex) errorb = 0.0639 y efectivamente, el error es el menor de los cometidos con los diferentes métodos estudiados. Problema 3 a)Para representar gráficamente los datos de la tabla, generamos los vectores x (hora) e y (grados): x=2:2:24;y=[8 8 7 8 14 15 16 14 13 11 10 8]; plot(x,y,'*') b)Construiremos un polinomio interpolador de tercer grado, reordenando ambos vectores en torno al punto a aproximar y tomando los cuatro primeros elementos: x1 = [8 10 6 12]; y1 = [8 14 7 15]; y la aproximación de la temperatura es: [yb,p]=polynew(x,y,x1,y1,8.75,3) yb = 10.2012 c)Emplearemos a continuación un spline lineal con el mismo propósito; para ello, utilizaremos la instrucción de MATLAB interp1, simplemente introduciendo los vectores correspondientes a los datos de la tabla y el punto en el que queremos obtener la aproximación: yc = interp1(x,y,8.75) yc = 10.2500 d)Para emplear un spline natural, generamos una función que incluya los pasos llevados a cabo en la sección 11.4 y la ejecutamos con los vectores x e y, considerando que la derivada de segundo orden de la temperatura es nula en los extremos. Obtendremos la matriz s en la que se encuentran los coeficientes de los sucesivos polinomios de tercer grado que forman el spline, junto con ps, que prepara el camino para la evaluación del trazador cúbico en un punto o conjunto de puntos. [s,ps] = natural(x,y,0,0) s = -0.0360 0 0.1442 8.0000 0.0552 -0.2163 -0.2883 8.0000 0.1902 0.1150 -0.4908 7.0000 -0.4410 1.2562 2.2517 8.0000 0.3239 -1.3899 1.9842 14.0000 -0.2296 0.5536 0.3114 15.0000 0.2196 -0.8243 -0.2300 16.0000 -0.1489 0.4936 -0.8914 14.0000 0.1261 -0.4001 -0.7044 13.0000 -0.1056 0.3567 -0.7911 11.0000 0.0461 -0.2767 -0.6311 10.0000 ps = form: 'pp' breaks: [2 4 6 8 10 12 14 16 18 20 22 24] coefs: [11x4 double] pieces: 11 order: 4 dim: 1 Evaluamos el spline mediante la instrucción ppval: ys = ppval(ps,8.75) ys = 10.2093 La instrucción spline de MATLAB nos permite calcular la aproximación mediante un spline no-nodo: ps2 = spline(x,y); ys2 = ppval(ps2,8.75) ys2 = 10.2067 e)Por último, representaremos gráficamente las distintas aproximaciones: [yg,p]=polynew(x,y,x1,y1,xg,3); ysn = ppval(ps,xg); ysnn = ppval(ps,xg); plot(x,y,'*',xg,yg,'r',x2,y2,'b',xg,ysn,'g',x2,ysnn,'m') El polinomio interpolador decrece muy rápidamente y distorsiona la gráfica. Efectuamos un zoom sobre la región en la que se encuentran los puntos de interpolación y observamos que los resultados obtenidos por los splines natural y no- nodo se superponen, pudiendo considerarse ambos la mejor aproximación. file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat...ctica%2011-%20Interpolacion%20Polinomica%20Segmentaria/practica11.txt Spline Lineal ----------- >> x = 0:pi/3:2*pi; >> y = sin(x); >> n = length(x) - 1; >> a = y(1:n); >> b = diff(y)./diff(x); >> s = [b' a']; >> ps = mkpp(x,s); >> >> %la grafica >> >> xg = linspace(0,2*pi); >> yg = sin(xg); >> ys = ppval(ps,xg); >> plot (x, y, '*', xg, yg, xg, ys); Spline Cubico Natural -------------- >> %Spline natural para el seno , sabiendo las derivadas segudnas en los extremos >> >> x = -2*pi:pi/3:2*pi; >> y = sin(x); >> xg = linspace(-2*pi,2*pi); >> yg = sin(xg); >> [ps,s]=natural(x,y,0,0) ps = form: 'pp' breaks: [1x13 double] coefs: [12x4 double] pieces: 12 order: 4 dim: 1 file:///E|/Documentos/Estudios/Documentacion%20Asignatu...Interpolacion%20Polinomica%20Segmentaria/practica11.txt (1 of 3) [09/03/2008 13:49:28] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat...ctica%2011-%20Interpolacion%20Polinomica%20Segmentaria/practica11.txt s = -0.0754 0 0.9097 0.0000 -0.0000 -0.2369 0.2481 0.8660 0.0754 -0.2369 -0.6616 0.8660 0.0754 -0.0000 -0.9097 -0.0000 -0.0000 0.2369 -0.2481 -0.8660 -0.0754 0.2369 0.6616 -0.8660 -0.0754 0 0.9097 0 -0.0000 -0.2369 0.2481 0.8660 0.0754 -0.2369 -0.6616 0.8660 0.0754 0.0000 -0.9097 0.0000 -0.0000 0.2369 -0.2481 -0.8660 -0.0754 0.2369 0.6616 -0.8660 >> ys = ppval(ps,xg); >> plot (x, y, '*', xg, yg, xg, ys); %xg, yg es la funcion original % xg, ys es la funcion obtenida %Aproximar cualquier dato ------------------------ >> x = 1:10; >> y = rand(10,1); >> [ps,s]=natural(x,y,0,0); >> xg = linspace(1,10); >> ys = ppval(ps, xg); >> plot (x, y, '*', xg, ys); Otras posibles condiciones de derivadas segundas en los extremos dan lugar a otros splines. %SPLINE de MATLAB ----------------- >> ps = spline(x,y); >> ysm = ppval(ps,xg); file:///E|/Documentos/Estudios/Documentacion%20Asignatu...Interpolacion%20Polinomica%20Segmentaria/practica11.txt (2 of 3) [09/03/2008 13:49:28] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat...ctica%2011-%20Interpolacion%20Polinomica%20Segmentaria/practica11.txt >> plot (xg, ys); >> plot (x, y, '*', xg, ys); difiere de la nuestra sólo en los extremos file:///E|/Documentos/Estudios/Documentacion%20Asignatu...Interpolacion%20Polinomica%20Segmentaria/practica11.txt (3 of 3) [09/03/2008 13:49:28] 12. La función f(x) = 0 El problema inverso al de evaluar una función en un punto consiste en hallar un punto en el que la función tome un valor determinado. Normalmente, el problema inverso es más difícil, porque no disponemos de una expresión sencilla de la función inversa. Por ejemplo, hallar el volumen de un cubo conociendo la arista es fácil, mientras que para obtener la arista a partir del volumen, necesitamos una calculadora capaz de extraer raíces cúbicas. Matemáticamente, estos problemas se plantean como la resolución de una ecuación de la forma ( ) 0 f x = donde f es una función continua conocida y x es la incógnita a obtener, con la condición de que verifique la ecuación dada. Es posible obtener una idea aproximada de la solución empleando técnicas gráficas, que desarrollamos en la primera sección, aunque en este caso ni siquiera puede hablarse de precisión en los cálculos, ya que no hay tales. Dispuestos a obtener una solución precisa de la ecuación , nos planteamos el dilema entre resolución analítica (limitada sólo a algunos casos en los que se puede despejar la variable independiente, o la función f pertenece a una clase de funciones determinada) o numérica, en cuyo caso recurrimos a un método iterativo. La idea es una formalización del proceso de tanteo, en el que vamos probando valores de x cada vez más próximos a la solución, que hagan cada vez más pequeño el valor de f(x). ( ) 0 f x = En este capítulo resolvemos de forma aproximada ecuaciones no lineales de una variable empleando para ello diferentes métodos iterativos: distinguiremos en primer lugar aquellos que utilizan el teorema de Bolzano, aprovechando el cambio de signo de la función f antes y después de la raíz. Llamaremos a éstos métodos de intervalos, y concretamente estudiaremos los métodos de Bisección y Regula Falsi. Completaremos el estudio de los métodos elementales de resolución de ecuaciones de una variable en la siguiente sección, con los llamados métodos abiertos, entre los que destacan los métodos de Punto Fijo, Newton y de la Secante. Recordemos que para resolver una ecuación por un método iterativo hemos de: 1. Obtener una estimación inicial x 1 de la solución. En ella se resume la información previa de que disponemos. En la siguiente sección aprenderemos a deducir la información necesaria de la representación gráfica de la función cuyo cero estamos buscando. 2. Refinar iterativamente la aproximación, obteniendo valores x 2 , x 3 , x 4 , ..., que converjan a la solución x * . 3. Establecer un criterio de parada. Respecto a éste último punto, dependiendo del método numérico utilizado, exigiremos que las iteraciones varíen poco o que la ecuación se satisfaga con aproximación suficiente. Para determinar el error de la aproximación x k , deberíamos calcular la diferencia, en valor absoluto, entre aproximación y solución exacta: * k x x − Sin embargo, desconocemos el valor de la solución exacta x * , así que consideramos 1 k k x x − − como estimación del error. Si esta cantidad es suficientemente pequeña (menor que un argumento de entrada al que siempre llamaremos tol), detenemos el algoritmo suponiendo que hemos alcanzado la precisión requerida. Tendremos en cuenta que si el método converge lentamente, estamos subestimando el error; al contrario, si converge rápidamente, el error será seguramente inferior a tol. A veces, no interesa tanto la determinación precisa de la solución, como que el valor de la función sea pequeño. En este caso, el criterio de parada será ( ) k f x tol < Conviene también limitar el número máximo de iteraciones, en previsión de que el algoritmo diverja, oscile indefinidamente o converja muy lentamente. Llamaremos maxiter al máximo número de pasos que permitimos realizar a un algoritmo iterativo. Si este número se supera, detenemos las iteraciones aunque no se haya alcanzado la convergencia y emitimos un mensaje de advertencia. Algunos de estos métodos que mostraremos en este capítulo y el siguiente pueden generalizarse para resolver sistemas de ecuaciones no lineales, , con las modificaciones que implica el que f sea una función vectorial de varias variables; ello, sin embargo, forma parte del contenido de asignaturas de cursos posteriores. ( ) 0 f x = 12.1 Método gráfico El más simple de los métodos (aunque no el más preciso) para obtener una aproximación a la raíz de una ecuación no lineal consiste, en primer lugar, en obtener una representación gráfica de la curva para, posteriormente, observar donde cruza dicha curva el eje de abscisas. Ese valor en el que se anula la función es la aproximación que buscamos. ( ) 0 f x = ( ) y f x = ( ) f x Comenzaremos con un problema clásico: calcular cuál debe ser la arista de un cubo para duplicar su volumen. Buscamos la solución a la ecuación no lineal . La representación gráfica de la curva y f la obtenemos ejecutando las expresiones: ( ) 3 2 0 f x x = − = ( ) 3 2 x x = = − x=0:.1:2; y=x.^3-2; plot(x,y) Partiendo de la representación gráfica podemos deducir que la curva corta el eje de abscisas aproximadamente en el punto (1.25,0). Para confirmar esta estimación basta sustituirla en la ecuación: y=1.25^3-2 Para obtener mayor precisión, podemos emplear el comando ginput de MATLAB para obtener un resultado más preciso, marcando con el ratón sobre la gráfica el punto cuyas coordenadas queremos averiguar. [X,Y]=ginput(1) No es práctico, sin embargo, tratar de obtener una solución a una determinada ecuación no lineal empleando exclusivamente métodos gráficos, ya que ésta no podría obtenerse con toda la precisión deseada. No obstante, sí es posible obtener aproximaciones de la raíz, que se pueden utilizar a su vez como aproximaciones iniciales en los métodos numéricos que desarrollaremos en este capítulo y el siguiente. Además, la representación gráfica ayuda en la comprensión de los resultados obtenidos mediante métodos numéricos e incluso permite detectar errores en los mismos. Suponiendo que es una función continua, en las siguientes gráficas observamos diferentes casos en los que la raíz que buscamos está (o no) en el intervalo definido por dos valores de la variable x, x ( ) f x 1 y x 2 : (a) , es decir, ambas imágenes tienen el mismo signo y no existe ninguna raíz en el intervalo [ ] ; ( ) ( ) 1 2 0 f x f x ⋅ > < ] > ] < 1 2 , x x (b) , por lo que el teorema de Bolzano nos permite afirmar que existe una raíz (o un número impar de ellas) en el intervalo [ ; en este caso, la raíz es única. ( ) ( ) 1 2 0 f x f x ⋅ 1 2 , x x (c) , nuevamente ambas imágenes tienen el mismo signo; sin embargo, sí existen raices en el intervalo [ , en número par; ( ) ( ) 1 2 0 f x f x ⋅ 1 2 , x x (d) por lo que, aplicando de nuevo el teorema de Bolzano, afirmamos que existe un número impar de raices en el intervalo [ ] , concretamente tres. ( ) ( ) 1 2 0 f x f x ⋅ 1 2 , x x Las funciones discontinuas y aquellas que son tangenciales al eje x son excepciones a los casos anteriormente expuestos: observamos en la siguiente figura la representación gráfica de la función . Notemos que x = 2 es una raíz múltiple (de multiplicidad 2) y en este caso, la curva es tangente al eje de abscisas. Así, una mala elección del intervalo (por ejemplo [1.5,2.5]) podría hacernos pensar que no hay raíces que encontrar cuando en realidad hay una raíz doble. Sin embargo, un intervalo más amplio en el que la función cambie de signo puede permitirnos encontrar todas los ceros de la función. ( ) ( 2 2 y x x = − − ) 4 12.2 Métodos de intervalos En esta sección trataremos aquellos métodos que aprovechan el cambio de signo de la función en el entorno de una raíz. Así, partiendo de dos valores proporcionados inicialmente, dichos métodos tratan de reducir el tamaño del intervalo que encierra a la raíz buscada, hasta converger a ésta con la suficiente precisión. 12.2.1 Método de la bisección El método de bisección garantiza la convergencia a la raíz de una ecuación , partiendo de un intervalo en cuyos extremos la función continua f toma signos distintos. ( ) 0 f x = Como ya hemos observado anteriormente, el llamado Teorema de Bolzano afirma que si una función continua cambia de signo en un intervalo, ésta se anula en algún punto del mismo. La bisección es un proceso sistemático para buscar ese punto: tras comprobar si la función cambia de signo en un intervalo concreto, se evalúa el valor de la función en el punto medio, que es una nueva estimación de la raíz. Si aún no tenemos la precisión deseada, se divide el intervalo por la mitad y se comprueba en cuál de ellas se encuentra la raíz, es decir, se comprueba en qué subintervalo cambia de signo la función. El proceso se repite y la aproximación a la raíz mejora cada vez más a medida que los subintervalos se dividen por la mitad. Podemos resumir el método en los siguientes pasos: 3.Partimos de un intervalo inicial [a,b] en el que suponemos está la raíz. Esto se puede verificar comprobando que ( ) ( ) 0 f a f b ⋅ < 4.Determinamos la primera aproximación a la raíz como 2 a b c + = . 5.Realizamos las siguientes comprobaciones: a) Si , entonces la raíz se encuentra en el intervalo [a,c]. Así, consideramos b = c y continuamos en el punto (2) para determinar una nueva aproximación de la raíz. ( ) ( ) 0 f a f c ⋅ < b) Si , entonces la raíz está en el intervalo [c,b]. Así, consideramos a = c y continuamos en el punto (2) para determinar una nueva aproximación de la raíz. ( ) ( ) 0 f c f b ⋅ < 6.Si (ó ), la raíz es igual a c y termina el proceso. ( ) ( ) 0 f c f b ⋅ = ( ) ( ) 0 f c f a ⋅ = Consideraremos como cota del error cometido en la aproximación de la raíz la amplitud del último subintervalo considerado, siendo el centro de éste nuestra aproximación a la solución. Además, tras un proceso de n iteraciones, puede demostrarse que el error cometido está acotado por el cociente: 2 n b a Error − < donde a y b son los extremos iniciales del intervalo en el que encontramos la solución. Por otra parte, como criterio de parada en el algoritmo de bisección, consideraremos la amplitud del intervalo actual en cada iteración (también podríamos utilizar ( ) incr f c tol = < ), ya que se puede probar que ésta tiende a cero. Ejemplo 1 Resolveremos a continuación el problema del cálculo de la arista de un cubo para duplicar su volumen, descrito por la ecuación . Comprobamos visualmente que en intervalo [1,2] podemos encontrar una raíz y evaluamos la función en los extremos del intervalo: ( ) 3 2 0 f x x = − = ( ) 3 2 f x x = − a=1; fa=a^3-2; b=2; fb=b^3-2; calculamos el punto medio del intervalo y evaluamos en él la función: c =(a+b)/2; fc=c^3-2; a continuación, comprobamos en cuál de los subintervalos [a,c] y [c,b] se encuantra la raíz y nos centramos en él: if fa*fc<0 %elige [a,c] b=c; fb=fc; end if fc*fb<0 %elige [c,b] a=c; fa=fc; end Comprobamos si la amplitud del nuevo intervalo [a,b] es tan pequeña como para considerar que su punto medio es una buena aproximación de la raíz. Si es así, hemos alcanzado el objetivo que nos habíamos propuesto. En caso contrario, calcularemos de nuevo el punto medio de [a,b] y repetiremos el proceso previo. En el caso del cálculo de la arista del cubo, si exigimos una tolerancia de 10 -6 , son necesarias 20 iteraciones para alcanzar la solución aproximada, x = 1.259921. Además, dado que conocemos la solución exacta, podemos calcular el error exacto cometido en este caso: error=abs(x-2^(1/3)) Si estudiamos la tasa de convergencia lineal, obtenemos en todas las iteraciones el valor 0.5, lo que resulta lógico si pensamos en que asociamos la estimación del error a la amplitud del intervalo actual, que se divide por la mitad en cada paso. Así, podemos afirmar que la velocidad de convergencia del método de bisección es siempre lineal, de tasa 0.5. La ventaja del algoritmo de bisección es que siempre converge, supuesto que partimos de un intervalo que contiene a la raíz. Sin embargo, la convergencia es muy lenta y puede darse el caso de que el punto medio calculado en un paso esté más alejado de la raíz que el del paso anterior. Ejercicio Implementa en MATLAB el método de bisección, de manera que, dados el intervalo inicial, la tolerancia y el número máximo de iteraciones, proporcione la solución aproximada al problema, la estimación del error y el número de iteraciones empleado. Ejemplo 2 Para jugar al billar en una mesa circular hemos de golpear la bola Q de la figura con la bola P, tras un impacto I en la banda. Conocido el radio R de la mesa y las posiciones en coordenadas cartesianas (cuyo origen es el centro de la mesa) de los puntos P y Q, ( ) y , el punto de impacto viene definido por el angulo central θ. , P x y P ) ( , Q Q x y Tras un análisis geométrico del problema, se prueba que los valores de θ que proporcionan los puntos de impacto posibles son los ceros de la función: ( ) ( ) ( ) ( ) ( ) 2 2 2 sin cos sin cos cos sin cos sin Q Q P P P P Q Q x y x y f R x R y R x R y θ θ θ θ θ θ θ θ θ − − = + − + − − + − 2 ) Consideraremos un billar de radio unidad, P y . Si estudiamos gráficamente los ceros de la función podremos proporcionarle al método de bisección un intervalo inicial razonable: ( ) 0.6, 0 = ( 0.6, 0 Q = − t = 0:.1:2*pi; P = [0.6,0];Q = [-0.6,0]; y1=(P(1)*sin(t)-P(2)*cos(t)); den1=sqrt((cos(t)-P(1)).^2+(sin(t)-P(2)).^2); y1=y1./den1; y2=(Q(1)*sin(t)-Q(2)*cos(t)); den2=sqrt((cos(t)-Q(1)).^2+(sin(t)-Q(2)).^2); y2=y2./den2; y=y1+y2; plot(t,y),grid on Podemos deducir que una de las raíces buscadas está en el intervalo [1,2], por lo que aplicamos el método de bisección con este intervalo de partida, tolerancia 10 -4 y 100 iteraciones como máximo a la función , almacenada en el fichero billar.m: ( ) f θ [sol,iter]=bisec('billar',1,2,1e-4,100) sol = 1.5707 iter = 14 Observamos en la figura anterior que una solución exacta de la ecuación es 90º 2 π θ = = , por lo que podemos calcular el error cometido en nuestra aproximación: error=abs(sol-pi/2) Podemos observar en la siguiente tabla las sucesivas aproximaciones con distintas aproximaciones iniciales, el número de iteraciones necesario y el error exacto cometido en las mismas. k x k (rad.) x k (grad.) Error ex. 1 1.5000 85.9437 4.0563 2 1.7500 100.2676 10.2676 3 1.6250 93.1056 3.1056 4 1.5625 89.5247 0.4753 5 1.5938 91.3151 1.3151 6 1.5781 90.4199 0.4199 7 1.5703 89.9723 0.0277 8 1.5742 90.1961 0.1961 9 1.5723 90.0842 0.0842 10 1.5713 90.0282 0.0282 11 1.5708 90.0003 0.0003 12 1.5706 89.9863 0.0137 13 1.5707 89.9933 0.0067 14 1.5707 89.9968 0.0032 Notemos que para alcanzar esta solución la primera aproximación es especialmente buena, c = 1.5, pero el siguiente iterado es 1.75, que evidentemente es una aproximación bastante peor que la anterior. Esto sucede también al acercarnos a la solución exacta: observamos cómo la aproximación proporcionada por el iterado x 12 es bastante mejor que la siguiente, aunque finalmente obtengamos la precisión requerida. Estudiaremos otros métodos que nos permitirán evitar estas desviaciones sistemáticas, resultado de considerar el punto medio del intervalo como iterado, independientemente del valor que tome la función en ese punto. Generalmente, el método de bisección se utiliza en combinación con otros métodos más rápidos, bien para proporcionar una estimación inicial suficientemente próxima a la raíz, bien para evitar la divergencia en cualquier paso intermedio. 12.2.2 Método de Regula-Falsi Nos planteamos a continuación una variante en la que, en lugar de tomar el punto medio, se considera el punto (c,0) en el que la recta que pasa por los puntos ( ) y cortan el eje de abscisas. Para averiguar el valor de c, igualaremos dos fórmulas que nos proporcionan la pendiente de esa recta: ( ) , a f a ( ) ( , b f b ) f(b) f(a) m b a − = − que se obtiene al usar los puntos ( ) y ( , y también ( ) , a f a ( ) , b f b ) 0 f(a) m c a − = − Igualando ambas pendientes obtenemos la expresión f(b) f(a) c a f(a) b a − = − − que divide el intervalo en partes proporcionales al valor de la función en los extremos. Una vez calculado el punto c, se elige el subintervalo [a,c], o [c,b] en el que la función cambia de signo. Este se denomina método de Régula Falsi: aunque el método generalmente converge con menos iteraciones que el de bisección, presenta el inconveniente de que la longitud del intervalo puede no tender a cero, por lo que estimaremos la precisión mediante ( ) inc , y de este modo medimos cuán cerca está c de ser solución de la ecuación . Por otra parte, obtendremos la diferencia entre dos iterados consecutivos, lo que nos permitirá calcular la velocidad de convergencia. r f c tol = < ( ) 0 f x = El algoritmo del método de regula falsi difiere del de bisección únicamente en el cálculo del nuevo extremo del intervalo, en el que se utiliza la expresión f(b) f(a) c a f(a) b a − = − − junto con la forma en que se estima la precisión alcanzada por el método. Ejercicio Implementa en MATLAB el método de Regula Falsi, de manera que, dados el intervalo inicial, la tolerancia y el número máximo de iteraciones, proporcione la solución aproximada al problema, la estimación del error y el número de iteraciones empleado. Ejemplo 3 Si aplicamos el método de Régula Falsi a la ecuación del ejemplo 1, . con un itervalo inicial a = 1, b = 2, tolerancia 10 ( ) 3 2 0 f x x = − = -6 y un máximo de 50 iteraciones, [sol,iter]=regula('cubica',1,2,1e-6,50) obtenemos una solución suficientemente precisa, sol = 1.25992096146283, en 17 iteraciones, con una velocidad de convergencia lineal, pero ligeramente más rápida que utilizando el método de bisección. En este caso, la tasa de convergencia es de 0.41, aproximadamente. Ejemplo 4 En el ejemplo del al billar circular de radio unidad, con las posiciones de las bolas y y la misma tolerancia, obtenemos el resultado deseado, sol = 1.5708 = 90.0000º, en tan sólo tres iteraciones, siendo en este caso la velocidad de convergencia superlineal (tasa de convergencia lineal prácticamente nula, 0.0345) y el error exacto, 2.9 10 ( ) 0.6, 0 P = ( 0.6, 0 Q = − ) -9 . [sol,iter]=regula('billar',1,2,1e-4,50) error=abs(sol-pi/2) Aunque el método de Regula Falsi proporciona mejores resultados que el de Bisección en los ejemplos tratados, no es correcto generalizar esa conclusión, como se deduce del siguiente ejemplo: Ejemplo 5 Aplicando sobre la función los métodos anteriores, partiendo del intervalo [0,1.5], con tolerancia 10 ( ) 10 1 f x x = − -6 y un máximo de 500 iteraciones, observamos que el método de regula falsi converge con mucha más lentitud que el de bisección a la raíz múltiple (de multiplicidad 10) x = 1. [sol,iter]=bisec(0,1.5,1e-6,500) sol = 0.99999976158142 iter = 21 [sol,iter]=regula(0,1.5,1e-6,500) sol = 0.99998978416958 iter = 158 Más adelante describiremos métodos cuya velocidad de convergencia es, bajo determinadas condiciones, más rápida que la de tipo lineal o superlineal que presentan los anteriores. 12.3 Métodos abiertos En los métodos de intervalo descritos en la sección anterior partimos siempre de dos valores (los extremos del intervalo) que encierran a la raíz, de manera que convergen a ella con mayor o menor velocidad. A continuación describiremos métodos que, partiendo de una (métodos de Punto Fijo y Newton) o dos aproximaciones (método de la secante), la aproximan con la precisión deseada. Estos métodos pueden converger o no a la solución buscada pero, cuando convergen, lo hacen generalmente con mayor velocidad que los métodos de intervalos. 12.3.1 Método de Punto Fijo Comenzaremos definiendo un punto fijo de una función como un número real p que verifica: g p . Geométricamente, los puntos fijos de una función son los puntos de corte de la función con la recta . ( ) g x ( ) p = ( ) y g x = y x = La clave del método de punto fijo es transformar la ecuación en otra equivalente de punto fijo, y construir una sucesión de iterados ( ) 0 f x = ( ) g x x = ( ) 1 1, 2,... k k x g x k + = = a partir de una estimación inicial x 1 de la solución. Si la sucesión {x k } converge y la función de iteración g es continua, entonces el límite es punto fijo de g y, por la equivalencia, solución de la ecuación . ( ) 0 f x = Usaremos el ejemplo del cálculo de la arista de un cubo para duplicar su volumen, para ilustrar los pasos del método de punto fijo: en primer lugar hay que despejar una x de la ecuación x , dejándola en función de otras x (si las despejamos todas, ya tenemos la solución). En este caso obtenemos dos ecuaciones de punto fijo equivalentes a la inicial. ( ) 3 2 0 f x x = − = 3 2 0 − = 2 2/ o bien 2/ x x x = = x A continuación sustituimos la x del segundo miembro por una estimación inicial de la solución y tomamos el resultado como nuevo valor de x. Este proceso se repite hasta que x se estabiliza o bien al comprobar que los valores de x divergen u oscilan mucho. Para elegir una buena estimación inicial, representamos gráficamente la función de punto fijo y buscamos su intersección con la bisectriz del primer cuadrante. Partiremos de la estimación inicial de la solución x = 1, deducida gráficamente: x=1; % Estimación inicial y evaluamos repetidas veces la función de punto fijo: x=2/x^2 % Ecuación equivalente iteración sol. aprox. 1 1 2 2 3 0.5 4 8 5 0.03125 Observamos que no converge. Repetimos ahora el proceso iterando con la función de punto fijo 2/ x x = : x=1; % Estimación inicial x=sqrt(2/x) % Otra ecuación equivalente iteración sol. aprox. 1 1.41421356237310 2 1.18920711500272 3 1.29683955465101 4 1.24185781207348 Observamos cómo los iterados se estabilizan rápidamente, aproximándose a la solución 3 2 x = . Para mejorar el experimento almacenamos en un vector las diez primeras aproximaciones, calculadas mediante un bucle for. k=1; x(k)=2; % Estimación inicial for k=1:10 x(k+1)= sqrt(2/x(k)); k=k+1; % Iteraciones end siendo la última estimación obtenida: x(end) ans = 1.26048973986985 y el error exacto cometido: error=abs(x(10)-2^(1/3)) error = 0.00113661034516 Finalmente, para observar la evolución de las componentes de x, representaremos las diez primeras iteraciones con plot(x,'*') Para estudiar la velocidad de convergencia, analizamos la tasa de convergencia lineal a partir de los diez iterados calculados: e = abs(diff(x)); % ek = |xk+1 - xk| n = length(e); r = e(2:n)./e(1:n-1) % rk = ek+1/ek Observamos que las componentes de r se estabilizan entorno a 1/2, por lo que la convergencia es lineal de razón 1/2. Podemos llegar también a esta conclusión representando gráficamente el vector r. plot(r) Demostraremos que la convergencia del método de punto fijo depende del valor de la derivada de la función de iteración. De hecho, de la elección adecuada de la función de punto fijo depende, no sólo la velocidad de convergencia, sino la misma convergencia del método. Ejemplo 6 En la resolución de la ecuación mediante la búsqueda de un punto fijo de la ecuación ( ) 3 2 0 f x x = − = 2/ = x , se comprueba que x ( ) * 1 ' 2 g x = , siendo x * el punto fijo de ( ) 2/ g x x = . No es casual que el valor de la derivada coincida con la razón de convergencia: si escribimos las componentes de r como cocientes incrementales de g en valor absoluto, ( ) ( ) ( ) ( ) ( ) ( ) 3 2 4 3 5 4 2 1 3 2 4 3 2 1 3 2 4 3 2 1 3 2 4 3 , , ,... , , ,... x x x x x x r x x x x x x g x g x g x g x g x g x x x x x x x   − − − =     − − −     − − − =     − − −   observamos como, para una función de punto fijo continuamente derivable, ( ) ( ) ( ) 1 * 1 lim lim ' k k k k k k k g x g x r g x x + →∞ →∞ + − = = − x siendo . * lim k k x x →∞ = Para programar el método de punto fijo en MATLAB, crearemos un fichero de función que, partiendo de una estimación inicial, x 1 , construya una sucesión de iterados (en realidad, un vector finito) de la función g, que a su vez estará en otro fichero de función, hasta detectar si hay convergencia o no. Se establecerá como criterio de parada la diferencia, en valor absoluto, entre dos estimaciones sucesivas de la solución. Partiendo de estas diferencias, resultará sencillo calcular posteriormente la tasa de convergencia, tanto lineal como cuadrática. Ejemplo 7 Comprobaremos el funcionamiento de nuestro algoritmo para encontrar la solución de la ecuación empleando la ecuación de punto fijo ( ) 3 2 0 f x x = − = 2/ = x x que almacenamos en el fichero de función "pf_cubica.m": [sol, incr, it] = pfijo('pf_cubica',1,1e-6,50) La solución obtenida es 1.25992077227690, con precisión estimada de 8.328540990198974 10 -7 . Hemos necesitado 20 iteraciones (sin contar la estimación inicial). El trabajo de estos algoritmos suele medirse por las veces que evalúan la función, que han sido 20. Ejercicio Modifica tu función pfijo para que dé como argumento de salida, x, el vector de iterados. Observa la convergencia con plot(x). Ejercicio Pon en pf_cubica2.m la función de punto fijo x=2/x 2 y ejecuta pfijo con un máximo de 6 iteraciones. Observa gráficamente la divergencia. Ejemplo 8 Comprobemos que la función de punto fijo 2 1 2 ( ) 2 3 g x x x  = +      resuelve el problema del cubo y converge cuadráticamente: al ejecutar el método de punto fijo sobre la función pf_cubica3.m en que almacenamos 2 1 2 ( ) 2 3 g x x x  = +      (se puede probar fácilmente que esta función de punto fijo es equivalente a la función original). [sol, incr, it] = pfijo('pf_cubica3',1,1e-6,50) sol = 1.25992104989487 incr = 1.228965818000916e-010 it = 5 Observamos que encuentra la solución del problema con una precisión muy elevada y una rapidez mucho mayor de lo esperado: en tan sólo 5 iteraciones. Si estudiamos la velocidad de convergencia a través de la representación gráfica de su tasa de convergencia (lineal y cuadrática), notamos que, con esta función de punto fijo, dicha velocidad es cuadrática, ya que la tasa de convergencia cuadrática tiende a 0.8, aproximadamente. 12.3.1.1 1 Convergencia del método de Punto Fijo Deducimos de los resultados obtenidos hasta el momento que la elección de la función de punto fijo es importante a la hora de resolver una ecuación no lineal por este método, no sólo para su convergencia, sino también para acelerar la velocidad a la que ésta se produce. El siguiente resultado es la clave del proceso: [ ] g : a,b R → ( ) [ ] , a b ∈ [ ] , x a b ∈ ] [ 1 para todo g'(x) K < x a,b ≤ ∈ ( ) 1 1, 2,... k k x g x k + = = [ ] 1 , x a b ∈ Sea continuamente derivable tal que g x para todo . Además, supongamos que . Entonces, la iteración de punto fijo converge al único punto fijo x* para cualquier punto de partida . Esbozamos a continuación la demostración de este resultado: aplicando el Teorema del Valor Medio a la función g en el intervalo [x 1 , x*], se obtiene que ( ) ( ) ( )( ) * * 1 1 ' g x g x g x x ξ − = − para cierto ξ 1 del intervalo ]x 1 , x*[. Por definición de las iteraciones y por ser x* punto fijo, ( ) ( ) ( )( ) * * 1 2 1 1 ' g x g x x x g x x ξ − = − = − * Tomando valor absoluto y usando la acotación de la derivada tenemos ( ) * * 2 1 1 ' x x g x x K x x ξ − = − < − * 1 Aplicamos de nuevo el TVM al intervalo [x 2 , x*] y obtenemos ( ) * * 3 2 2 2 ' x x g x x K x x ξ − = − < − * Teniendo en cuenta la desigualdad anterior * * 2 3 2 1 x x K x x K x x − < − < − * Repitiendo este proceso, para n = 4, 5, ... probamos que * 1 1 n n x x K x x − − < − * 0 Al ser K < 1, K n tiende a 0 y, por tanto, x n tiende a x*, como queríamos demostrar. Además, ya hemos demostrado que la convergencia de los iterados de punto fijo es, al menos, lineal de razón |g'(x * )|, por la hipótesis de continuidad de la derivada. Sin embargo, si g x , se demuestra análogamente, utilizando el desarrollo de Taylor de orden 2, que las iteraciones convergen cuadráticamente. Este es el caso de la función de punto fijo en el ejemplo anterior, ( ) * ' = 2 1 2 ( ) 2 3 g x x x  = +      , para la que la convergencia del método era cuadrática ya que, en este caso, 3 '( 2) 0 g = . Como regla práctica podemos decir que: • Si ( ) * ' g x >1 los iterados no convergen a x*. • Si ( ) * ' g x <1 los iterados convergen linealmente a x*, • Si ( ) * ' g x = 0 los iterados convergen cuadráticamente a x*. Hemos visto que los casos anteriores corresponden a las funciones de punto fijo ( ) 2 2 g x x = , ( ) 2 g x x = y 2 1 2 ( ) 2 3 g x x x  = +      12.3.1.2 , respectivamente, para el ejemplo del cálculo de la raíz cúbica de 2. Interpretación gráfica de la iteración de Punto Fijo Sabemos que si la derivada de la función de punto fijo verifica la desigualdad: ( ) * ' 1 g x < los iterados convergen linealmente a x*. Sin embargo, dado que x* es un punto fijo de la función g, las curvas y g e se cortan en el punto ( . Si hay convergencia, la iteración puede ser de dos tipos: monótona y oscilante. ( ) x = y = x ) 1 < * * , x x • Si los iterados forman una sucesión monótona que converge a x*. ( ) * 0 ' g x < • Si , los iterados toman valores alternativamente mayores y menores que el punto fijo x*, aunque cada vez más próximos a éste. ( ) * 1 ' g x − < < 0 12.3.2 Método de Newton Los métodos iterativos para resolver la ecuación f(x) = 0 vistos en hasta el momento presentan convergencia lineal, salvo un caso especial del método de punto fijo, en el que la derivada de la función de iteración g(x) se anula en la solución. El método de Newton usa la derivada para aproximar la función por la tangente a su gráfica. Interpretando el método de Newton como caso especial de punto fijo, es fácil justificar que presenta convergencia cuadrática, pues la derivada de la función de iteración se anula en la raíz de f(x) = 0. La idea del método de Newton-Raphson para resolver la ecuación f(x) = 0 es aproximar localmente la función f por una función lineal l y resolver la ecuación l(x) = 0. Tomamos esta solución como nueva estimación de la raíz de f(x) y repetimos el proceso hasta obtener la precisión deseada. 1 x 2 x 3 x ( ) ( ) 1, 1 x f x ( ) ( ) 2, 2 x f x ( ) ( ) 3, 3 x f x Sea x 1 la estimación inicial de la solución. El método de Newton halla la tangente a la gráfica de f en el punto (x 1 ,f(x 1 )) y toma la intersección x 2 de la tangente con el eje OX como nueva estimación de la solución. La ecuación de la recta tangente es ( ) ( )( ) 1 1 ' y f x f x x x = + − 1 y la intersección con el eje OX se obtiene haciendo y = 0 ( ) ( ) 1 2 1 1 ' f x x x x f x ≡ = − siempre que la derivada f ' no se anule en x 1 . Tomamos x 2 como nueva estimación de la raíz y repetimos el proceso para obtener una nueva estimación: ( ) ( ) 2 3 2 2 ' f x x x f x = − Procediendo iterativamente, en el paso k + 1 determinamos ( ) ( ) 1 ' k k k k f x x x f x + = − La función definida por la relación ( ) g x ( ) ( ) ( ) ' f x g x x f x = − recibe el nombre de función de iteración de Newton-Raphson. Puesto que buscamos el punto x* tal que , observemos que la solución de nuestra ecuación verifica (si ) y, por tanto, es punto fijo de la función de iteración. Notemos que la derivada de la función de iteración se anula en x*, ( ) * 0 f x = ( ) * ' f x ≠ ( ) * g x x = * 0 ( ) ( ) ( ) ( ) ( ) * * * 2 * ' 0 ' f x f x g x f x ′′ = = En estas condiciones, el método de punto fijo converge cuadráticamente. En efecto, si estudiamos el error cometido en la iteración k: * * k 1 k 1 k e ( ) x x g x g x + + = − = − ( ) y desarrollando g(x k ) en torno a x* por la fórmula de Taylor, tenemos: * * k 1 k k 2 k 1 e ( )( ) ( )( ) 2 1 ( ) 2 k k g x x x g x x g e η η + ′ ′′ = − + − ′′ = * 2 ) ) Suponiendo que la derivada segunda de g es aproximadamente constante, deducimos que el error cometido en la iteración k es proporcional al cuadrado del error cometido en la iteración anterior. En la práctica, esto supone que el número de cifras decimales exactas se duplica cada cierto número de iteraciones. Ejemplo 9 Jugaremos de nuevo al billar en una mesa circular de radio unidad: hemos de golpear la bola Q de coordenadas con la bola , tras un impacto I en la banda. ( 0.6, 0 − (0.6, 0 P = Sabemos que los ceros de la función: ( ) ( ) ( ) 2 2 2 2 0.6sin 0.6sin cos 0.6 sin cos 0.6 sin f θ θ θ θ θ θ − = + − + + + θ nos proporcionan la posición del punto de impacto. Para resolver este problema mediante el método de Newton, hemos de calcular la derivada de la función f, que incluimos, junto con la función, en nw_billar.m: x=1; k=0; % Estimación inicial; paso xx=x; yy=0;% Datos para la gráfica k=k+1;% Paso k [y,dy]=nw_billar(x(k));% Valor de la función y de su derivada xx=[xx x(k)]; % Datos para la gráfica yy=[yy y]; delta = -y/dy %diferencia entre dos estimaciones consecutivas x(k+1) = x(k)+ delta% Iteración de Newton xx=[xx x(k+1)]; yy=[yy 0]; Repitiendo varias veces desde la línea del paso k y dibujando el resultado con xa=min(xx); xb=max(xx); xg=linspace(xa,xb); yg=xg.^3-a; plot(xg,yg,xx,yy,'o',xx,yy,,[xa xb],[0 0],'r') obtenemos la siguiente gráfica, en la que se muestra gráfica el proceso de convergencia del método de Newton. 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 -0.05 0 0.05 0.1 0.15 0.2 0.25 0.3 x f(x) Así, el algoritmo del método de Newton es muy similar al de punto fijo; la diferencia estriba fundamentalmente en la expresión iterativa inherente al método y en que ésta necesita evaluar, no sólo la función f, sino también su derivada, en cada iterado: Como criterio de parada consideraremos la diferencia, en valor absoluto, entre dos estimaciones sucesivas de la solución, aunque en determinadas circunstancias (tales como raíces múltiples) resulta más eficiente comprobar si ( ) k f x tol < . Notemos que no es necesario calcular la diferencia entre dos iterados consecutivos, ya que esa información es la almacenada en la variable delta. Partiendo de estas diferencias, resultará sencillo calcular posteriormente la tasa de convergencia, tanto lineal como cuadrática. Ejemplo 10 Si, una vez implementado en MATLAB el método de Newton, lo ejecutamos sobre la función nw_billar.m, obtenemos los siguientes resultados: [x, incr, iter] = newton1var('nw_billar',1,1e-6,50) x = 1.5708 incr = 2.6270 e-011 iter = 4 Observamos que bastan 4 iteraciones para encontrar la solución con una precisión estimada de diez cifras decimales exactas, frente a las 14 iteraciones que necesitaba el método de bisección partiendo de c = 1 como primer iterado. En cuanto a la velocidad de convergencia, dado que la tasa de convergencia cuadrática tiende a cero, concluimos que efectivamente, el método de Newton tiene convergencia cuadrática en este caso. Por otra parte, la convergencia del método de Newton se degrada al acercarse a una raíz múltiple de f(x). De hecho, se puede demostrar que, en general, la velocidad de convergencia del método de Newton pasa a ser lineal en el caso de raíces múltiples. Ejemplo 11 Si aplicamos el método de Newton al cálculo de la raíz cúbica de dos, la función a considerar es ( ) 3 2 0 f x x = − = y su derivada ( ) 2 ' 3 f x x = que almacenamos en la función nw_cubica.m, con lo que la iteración de Newton queda 3 1 2 2 1 2 3 3 k k k k k x a a x x x x x +   − = − = +     k Respecto a la velocidad de convergencia, para obtener la solución con una precisión de 10 -6 , ejecutamos la función: [x, incr, iter] = newton1var('nw_cubica',1,1e-6,50) x = 1.25992104989487 incr = 1.228965856871140e-010 iter = 5 obteniendo la solución en 5 iteraciones. Notemos que el número de iteraciones coincide con el empleado por el método de punto fijo con la función 2 1 2 ( ) 2 3 x x   = +     g x . De hecho, esta ecuación de punto fijo coincide plenamente con la expresión iterativa de Newton, razón por la cual obteníamos convergencia cuadrática con el método de punto fijo, mientras que con las otras funciones de punto fijo empleadas, la convergencia era lineal. Por otra parte, ¿qué ocurre si tomamos una estimación inicial compleja, por ejemplo, x 1 = 1+i ?. Las siguientes condiciones son suficientes para que el método de Newton converja a la solución de la ecuación , siendo : ( ) 0 f x = ( ) 2 , f C D D R ∈ ⊆ • La estimación inicial debe ser próxima a la raíz; • ; ( ) ' 0, f x x D ≠ ∈ Notemos que si la derivada de la función f se anula en un iterado, el siguiente paso de Newton no está definido. En estos casos, puede hacerse inestable, aunque haya una raíz próxima. Sin embargo, si la derivada se anula en la raíz, el método de Newton converge linealmente, en lugar de cuadráticamente. Cuando la derivada de la función f es difícil de calcular, recurrimos a una modificación consistente en evaluar la derivada una sola vez y utilizar el mismo valor en todas las iteraciones. ( ) ( ) 1 1 ' k k k f x x x f x + = − Este método modificado es mucho más lento, perdiendo la convergencia cuadrática. Una solución intermedia consiste en calcular la derivada cada cierto número de iteraciones. Como solución de compromiso, podemos evaluar la derivada cada cierto número de pasos, para no degradar tanto la convergencia. En el caso de raíces múltiples, la convergencia cuadrática del método de Newton puede perderse, como es el caso de la función , que necesita de 20 iteraciones para alcanzar la solución x = 2, partiendo de la estimación inicial x ( ) ( ) ( ) 2 2 4 f x x x = − − = 0 1 = 1.5 con una precisión estimada de 2.6 10 -9 . Una modificación del método de Newton que mejora la convergencia en estos casos es aplicar un factor m al cociente entre función y derivada, igual a la multiplicidad de la raíz que buscamos: ( ) ( ) 1 ' k k k k f x x x m f x + = − en el caso , considerando m = 2 obtenemos la solución en tan sólo 4 iteraciones. Sin embargo, no conocemos a priori la multiplicidad de la raíz que buscamos, aunque el tanteo o la comparación de f(x) con la función (x-r) ( ) ( ) ( ) 2 2 f x x x = − − 4 m (donde r es la raíz) pueden dar buenos resultados. 12.3.3 Método de la secante Si no disponemos de la derivada, la estimamos mediante un cociente incremental para h pequeño. Así se "simula" bastante bien el método de Newton. En cada paso evaluamos dos veces la función f, pero no necesitamos la expresión de la derivada (de hecho, en la práctica, sólo hay que evaluar la función f en el último iterado). El método que veremos a continuación utiliza como iterados los puntos que intervienen en el cálculo del cociente incremental, reduciendo a una las evaluaciones de la función por cada paso. Es el método de la secante. Geométricamente, el método de la secante aproxima la función f por la recta que pasa por los puntos (x 1 , f(x 1 )) y (x 2 , f(x 2 )) y toma su intersección, x 3 , con el eje OX como siguiente estimación. En el segundo paso, traza la secante por los puntos de abscisa x 2 y x 3 y la intersecta de nuevo con OX para hallar la tercera estimación x 4 . El proceso se repite, como siempre, hasta alcanzar la precisión deseada. Expresamos la iteración genérica de la secante en términos análogos a la de Newton como 1 1 1 ( ) ( ) ( ) k k k k k k k f x f x x x f x x x − + − − = − − Existe una diferencia fundamental entre los métodos de la secante y regula falsi: las dos estimaciones iniciales x 1 y x 2 en el método de regula falsi deben verificar x x (siendo x* la raíz buscada), mientras que en el método de la secante partimos de dos estimaciones cualesquiera. Precisamente debido a esta diferencia, el cociente * 1 2 x < < 1 1 ( ) ( ) k k k k f x f x x x − − − − es una buena aproximación de la derivada de la función f en el caso de la secante, ya que x k y x k-1 son valores próximos entre sí. Ejemplo 12 Para resolver la ecuación del billar circular sin necesidad de calcular la derivada de la función ( ) ( ) ( ) 2 2 2 2 0.6sin 0.6sin cos 0.6 sin cos 0.6 sin f θ θ θ θ θ θ − = + − + + + θ 0 emplearemos el método de la secante, partiendo de las estimaciones iniciales 1 y 2: x = [1,2]; % Abscisas iniciales y = billar(x);% Ordenadas delta = x(2)-x(1);k = 1;% Paso inicial y ejecutando varias veces las siguientes sentencias k = k+1% Paso k delta = -y(k)/((y(k)-y(k-1))/delta) x(k+1) = x(k)+delta y(k+1) = billar(x(k+1)) obtenemos la solución en 4 iteraciones, sin contar las estimaciones iniciales, con un estimación del error de 2.9 10 -9 . La velocidad de convergencia es, en este caso, superlineal, ya que la tasa de convergencia lineal tiende a cero. Viéndolo en positivo, con una evaluación por paso (y sin necesidad de utilizar ), se logra una convergencia mucho más rápida que con cualquier otro método. ( ) ' f x 12.4 Cálculo de raíces con MATLAB La resolución numérica de ecuaciones polinómicas ha suscitado gran interés históricamente, dada la limitación de los métodos analíticos en cuanto al grado del polinomio. La función roots de MATLAB obtiene todas las raíces de un polinomio construyendo la matriz asociada al polinomio (considerado característico) y obteniendo los valores propios de dicha matriz. Ejemplo 13 Consideramos la ecuación polinómica x x . Basta definir el polinomio, 5 4 3 2 3 10 10 44 48 x x x − − + + + = p=[1 -3 -10 10 44 48]; para a continuación obtener sus raíces, tanto reales como imaginarias, con el comando roots: roots(p) Por otra parte, para resolver ecuaciones no polinómicas, MATLAB dispone de la orden fzero. Su primer argumento es el nombre (del fichero) de la función cuyos ceros tratamos de hallar. Tal nombre es una cadena de caracteres y, por tanto, ha de ponerse entre comillas. Por ejemplo, fzero('f',x0,tol) siendo f.m el fichero que contiene la ecuación a resolver o el nombre de una función reconocida por MATLAB. fzero('atan',1,1e-6) fzero('x.^3-2',1,1e-7) 12.5 Problemas 1. La raíz de la ecuación tan es relativamente difícil de encontrar cuando c es una cantidad grande. Trata de averiguar la razón de éste comportamiento a través de los siguientes pasos: ( ) 0 = − c x a) Dibuja la función para y y estima un intervalo en que se encuentre la raíz buscada. ( ) ( ) c x tan x f − = 5 = c 10 = c b) Aproxima, para cada uno de los valores de c especificados en el apartado (a), la solución a la ecuación no lineal mediante los métodos de Bisección y Regula Falsi empleando el intervalo estimado en el apartado (a), con una tolerancia de 10 -4 . c) Analiza razonadamente la velocidad de convergencia de ambos métodos para el intervalo estimado en el apartado (a). 2. Las temperaturas en el interior de un material con fuentes de calor incrustadas pueden determinarse si se resuelve la siguiente ecuación: 1 1 1 2 2 1 cosh 2 t t e e − −   =     L Dado que L = 0.088, encuentra el valor de la temperatura t: a) Gráficamente, representando la ecuación a resolver. Estima además un intervalo en el que se encuentre la solución, que sirva de estimación inicial al resto de apartados. b) Empleando el método de Bisección con el intervalo inicial obtenido a partir de la representación. Calcula la velocidad de convergencia. c) Emplea el método de Punto Fijo con el punto medio del intervalo anterior como estimación inicial. Calcula la velocidad de convergencia. ¿Se verifican las condiciones de convergencia? Compruébalo. d) Compara los resultados obtenidos en los apartados anteriores. 3. Se construye una caja sin tapadera a partir de una hoja metálica rectangular que mide 10 por 16 centímetros. Queremos averiguar cuál debe ser el lado de los cuadrados que hay que recortar en cada esquina para que el volumen de la caja sea 100 centímetros cúbicos. a) Plantea la ecuación que nos proporcionará el volumen de la caja en función del lado l de los cuadrados a recortar. b) Representa gráficamente la ecuación a resolver y obtén un intervalo inicial en el que esté el valor de l que estamos buscando. c) Resuelve dicha ecuación mediante el método de la Bisección, empleando una tolerancia de 10 -9 y tomando como intervalo inicial el obtenido en el apartado (b). d) ¿Mejora el método de Regula Falsi el resultado obtenido por bisección? e) Obtén el lado de dichos cuadrados empleando el método de Punto Fijo, con estimación inicial el punto medio del intervalo utilizado en apartados anteriores. f) Compara los resultados obtenidos por ambos métodos (solución, número de iteraciones, velocidad de convergencia,…). 4. La curva que pasa por un cable colgante se llama catenaria. Supongamos que el punto más bajo de una catenaria es el origen (0,0), entonces la ecuación de la catenaria es cosh x C C   =     ) , a b ± y C . Si queremos determinar la catenaria que pasa por los puntos ( , debemos resolver la ecuación − cosh a C C   = −     b C de incógnita C. a) Prueba que la catenaria que pasa por los puntos ( ) es 10, 6 ± 9.1889cosh 9.1889 9.1889 x y   = −     . b) Halla la catenaria que pasa por los puntos ( empleando el método de Regula Falsi. Utiliza la representación gráfica para obtener el intervalo inicial. Estima la velocidad de convergencia del método en este caso. ) 12, 5 ± c) Repite el apartado (b) aplicando el método de Newton, utilizando la representación gráfica para obtener la estimación inicial. Analiza las condiciones de convergencia del método de Newton en este caso y su velocidad de convergencia d) Compara el resultado obtenido en los apartados (b) y (c). 5. Una esfera de densidad d y radio r pesa ( 2 3 3 3 rh h π − ) 4 . Encuentra la profundidad a que una esfera de densidad 0.6 se hunde en el agua, en términos de una fracción del radio de la esfera. Con una tolerancia de 10 -4 , utilizando los algoritmos de Regula Falsi, Punto Fijo y Newton. Establece una tabla que permita comparar resultados, número de iteraciones, velocidad de convergencia, etc... 6. Consideremos el siguiente sistema no lineal: ( ) 0 sen 1 2 2 2 = − = − + x y y x x a) Determina gráficamente todas las soluciones del sistema. b) Transforma el sistema de ecuaciones en una única ecuación no lineal y aproxima con precisión de 10 -6 sus soluciones mediante el método de Punto Fijo. Indica las aproximaciones iniciales utilizadas y las iteraciones necesarias para cada una de las raíces. c) Repite el apartado (b) empleando el método de Newton y comprueba la convergencia cuadrática del método. 7. Halla la menor raíz positiva de la ecuación ( ) 0 cos 2 = − − x e x Con una tolerancia de 10 -6 , utilizando los algoritmos de Bisección y Punto Fijo. Establece una tabla que permita comparar resultados, número de iteraciones, etc... 8. Consideremos el siguiente sistema no lineal: ( ) cos 0 1 0 x y e e x y x y + = + − = a) Analiza gráficamente las raíces del sistema para x ∈ [-6,6]. b) Transforma el sistema de ecuaciones en una única ecuación no lineal y aproxima las raíces encontradas en el apartado anterior mediante el método de Newton con una tolerancia de 10 -5 . ¿Cuántas iteraciones son necesarias en cada caso?. Estima la velocidad de convergencia en una de las raíces. c) Para acelerar la convergencia del método de Newton se introduce un factor de sobrerrelajación 0<w<2 que modifica el incremento en cada paso según la fórmula ( ) ( ) 1 ' k k k k f x x x w f x + = − Repite el apartado (b) con este método y representa en una tabla el número de iteraciones necesarias para w = 0.2, 0.4, 0.6,.....,1.6, 1.8. 9. El método de Halley es una forma de acelerar la convergencia del método de Newton-Raphson. La fórmula iterativa de Halley es: ( ) ( ) ( ) ( ) ( ) ( ) ( ) 1 2 1 ' 2 ' f x f x f x g x x f x f x −   ′′   = − −     A partir de , determina la función de iteración de Halley para hallar ( ) 2 f x x A = − A . Empieza con x 0 = -2.4. ¿Cuál es la velocidad de convergencia del método en este caso? Compara estos resultados con los obtenidos aplicando otros métodos: Bisección, Regula Falsi, Punto Fijo y Newton. 10. Para el estudio del movimiento de cuerpos celestes con órbitas elípticas es necesario resolver la llamada ecuación de Kepler: M E e E = − sen Donde la incógnita es la anomalía excéntrica E y son conocidas la excentricidad de la órbita e = 0.96727464 y la anomalía media M = 4.527594 10 -3 . a) Dibuja la función F(E) = E – e sen(E) –M, y obtén una aproximación de la solución. b) Resuelve la ecuación de Kepler mediante el método de Punto Fijo con valor inicial E 0 = 1 y tolerancia TOL = 0.00005. ¿Cuál es el valor de la anomalía excéntrica?. ¿Cuántas iteraciones han sido necesarias?. ¿Cuál es la estimación del error cometido? c) Analiza las condiciones de convergencia del método de Newton en este caso y su velocidad de convergencia. d) Resuelve la ecuación de Kepler mediante el método de la secante bajo las mismas condiciones que en el apartado (b) y con las estimaciones iniciales E = 0.5 y E = 1. ¿Cuál es el valor de la anomalía excéntrica?. ¿Cuántas iteraciones han sido necesarias? e) Compara los resultados obtenidos. 12.6 Soluciones Problema 1 En primer lugar, obtenemos la representación gráfica de ambas funciones: x=-1.5:.1:1.5;y1=tan(x)-5; subplot(2,1,1),plot(x,y1) y2=tan(x)-10; subplot(2,1,2),plot(x,y2) -1.5 -1 -0.5 0 0.5 1 1.5 -20 -10 0 10 y=tan(x)-5 x y -1.5 -1 -0.5 0 0.5 1 1.5 -30 -20 -10 0 10 y=tan(x)-10 x y Podemos concluir de las gráficas anteriores que las raíces se encuentran en el intervalo [1,1.5]. Almacenamos la función tan en un fichero de función: ( ) 0 = − c x function y=f1(x,c) y=tan(x)-c; Modificamos el algoritmo de bisección para introducir el valor del parámetro c como variable de entrada. Al aplicar este método sobre el intervalo [1,2] con una tolerancia de 10 -4 , obtenemos los siguientes resultados para c = 5: [sol,x,iter]=bisec1('f1',1,1.5,1e-4,100,5) sol = 1.3734 iter = 13 y para c = 10: [sol,x,iter]=bisec1('f1',1,1.5,1e-4,100,10) sol = 1.4711 iter = 13 y mediante regula falsi, con idéntica estimación del error: [sol,iter]=regula1('f1',1,1.5,1e-4,100,5) sol = 1.3734 iter = 26 [sol,iter]=regula1('f1',1,1.5,1e-4,100,10) sol = 1.4711 iter = 11 Observamos que, aunque el método de bisección necesita el mismo número de iteraciones para resolver la ecuación tan con c = 5 o c=10, el método de regula falsi muestra una convergencia más lenta en el primer caso (justo el doble que las ( ) 0 = − c x que necesita el método de bisección) y más rápida en el segundo. Al estudiar la velocidad de convergencia de ambos métodos, recordamos que en el caso del método de bisección ésta es siempre lineal de tasa 0.5, mientras que podemos observar en las siguientes gráficas cómo la convergencia de regula falsi es lineal en ambos casos, aunque con tasa 0.29 para c = 10 y una tasa mayor, aproximadamente 0.64 para c = 5. 1 2 3 4 5 6 7 8 9 0.2878 0.288 0.2882 0.2884 0.2886 0.2888 0.289 0.2892 0.2894 conv. lineal 0 5 10 15 20 25 0.632 0.633 0.634 0.635 0.636 0.637 0.638 0.639 0.64 conv. lineal Sin embargo, estos resultados parecen contradecir la afirmación del enunciado en cuanto a la dificultad de los métodos numéricos para aproximar las raíces de la función f para valores grandes de c. Problema 6 Representaremos en primer lugar las curvas que definen el sistema en el plano, para lo que obtenemos en primer lugar la forma explícita de ambas: ( ) 2 2 1 sin y x x y x = ± + − = Observemos que únicamente hay dos puntos de intersección entre ambas curvas, cuyas aproximaciones obtenidas mediante el comando "ginput" de MATLAB son: (-1.66,0.27) y (0.76,0.5). A continuación, transformamos el sistema en una ecuación no lineal: ( ) 2 2 2 sen 1 x x x + − = y la transformamos en la ecuación de punto fijo equivalente: ( ) 2 2 1 sen x x x = − + 2 2 Generamos el fichero de función: function y=g6(x) y=1-x.^2+sin(x.^2).^2; en el que almacenamos la función de punto fijo . ( ) ( ) 2 2 1 sen g x x x = − + Aplicamos el método de punto fijo con las aproximaciones iniciales -1.6 y 0.7 obtenidas gráficamente y la tolerancia exigida en el enunciado del problema: [sol, incr, iter] = pfijo('g6',-1.6,1e-6,100) sol = 0.72595082969515 incr = 6.497037460251320e-007 iter = 11 [sol, incr, iter] = pfijo('g6',0.7,1e-6,100) sol = 0.72595067846056 incr = 2.991704356469782e-007 iter = 8 Por tanto, la primera solución del sistema es: x=sol,y=sin(sol^2) x = 0.72595067846056 y = 0.50294644122539 Observamos cómo, partiendo de aproximaciones inicales próximas a cada una de las raíces, el método de punto fijo converge a una única raíz. La razón que explica este comportamiento es simple: la derivada de la función de punto fijo en la raíz (en valor absoluto) no está acotada por la unidad, por lo que no se cumplen las condiciones de convergencia, y ésta no está asegurada. Para encontrar la otra raíz emplearemos una ecuación de punto fijo equivalente: ( ) 2 2 1 sen x x = − − + x [sol, incr, iter] = pfijo('g6b',-1.6,1e-6,100) sol = -1.67009279255709 incr = 9.352586394228979e-007 iter = 12 Por tanto, la solución del sistema que buscábamos es: x=sol,y=sin(sol^2) x = -1.67009279255709 y = 0.34513509208359 Si resolvemos ahora la ecuación no lineal mediante el método de Newton, necesitaremos una función que nos permita evaluar en un punto, tanto la función f(x), como su derivada: function [y,dy]=f6(x) y=x.^2+x-sin(x.^2).^2; dy=-2*x+4*x.*sin(x.^2).*cos(x.^2) Ejecutamos nuestro algoritmo de Newton con las mismas estimaciones iniciales empleadas anteriormente. Analizamos en cada caso la velocidad de convergencia: [sol, incr, iter] = newton1var('f6',-1.6,1e-6,100) sol = -1.67009303424438 incr = 5.340967319075955e-010 iter = 4 En las siguientes gráficas podemos observar la convergencia superlineal del método de Newton en este caso (la tasa de convergencia cuadrática no está acotada por debajo de la unidad, mientras que la tasa lineal tiende a cero), junto con la evolución de los iterados en el proceso. Es fácil comprobar que f' se anula en las proximidades de la raíz, lo que ralentiza la convergencia del método. Al aplicar el método de Newton con la segunda estimación inicial obtenemos la solución en tan sólo 3 iteraciones y con una velocidad de convergencia cuadrática, ya que esta tasa de convergencia tiende a 0.765, como puede observarse en las gráficas, junto con la evolución de la tasa lineal y de los iterados. [sol, incr, iter] = newton1var('f6',0.7,1e-6,100) sol = 0.72595072614316 incr = 1.923265868745633e-007 iter = 3 Problema 10 Conocidas la excentricidad de la órbita e = 0.96727464 y la anomalía media M = 4.527594 10 -3 , obtenendremos la representación gráfica de la función: e=0.96727464 ; M = 4.527594e-3; E=-pi:.1:pi; FE=E-e*sin(E)-M; plot(E,FE) Observamos en la gráfica que el valor que buscamos de la anomalía excéntrica es aproximadamente nula. Si ampliamos la imagen observamos que . 0.1 E ≅ Para aplicar el método de punto fijo, obtenemos la ecuación equivalente: sen E M e E = + Empleando la función: function E2=g10(E) e = 0.96727464; M = 4.527594e-3; E2=M+e*sin(E); y bajo las condiciones del enunciado, la solución obtenida es: [E, incr, iter] = pfijo('g10',1,5e-5,500) E = 0.12915859636994 incr = 4.819453403098750e-005 iter = 131 Si aplicamos el método de Newton, necesitamos almacenar función y derivada en el fichero: function [y,dy]=f10(E) e = 0.96727464; M = 4.527594e-3; y=-M+E-e*sin(E); dy=1-e*cos(E); y la solución obtenida por Newton en este caso es: [E, incr, iter] = newton1var('f10',1,5e-5,100) E = 0.12802307540635 incr = 4.924433887513424e-008 iter = 7 Respecto a las condiciones de convergencia del método, notemos que no hay problemas en cuanto a la continuidad y derivabilidad de la función, su derivada toma valores próximos a cero para una anomalía excéntrica nula, como se observa en la siguiente gráfica: x=-pi:.01:pi;[y,dy]=f10(x);plot(x,dy) Por esta razón, la velocidad de convergencia no es cuadrática, sino superlineal, como se desprende de las siguientes gráficas: Aplicando el método de la secante, obtenemos la solución en tan sólo una iteración más que empleando el método de Newton y con velocidad de convergencia superlineal: [E, incr, iter] = secante('f10',0,1,5e-5,100) E =0.12802309212324 incr = 1.182783157985257e-005 iter = 6 En este problema el método de la secante se muestra más eficaz, ya que con una velocidad superlineal (al igual que Newton), consigue encontrar la solución en una iteración menos con un algoritmo más simple, que no implica el conocimiento de la derivada de la función. El comportamiento del método de punto fijo en este caso es muy poco efectivo, con un número de iteraciones comparativamente muy elevado y convergencia lineal. file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo...s/Practica%2012%20-%20La%20ecuacion%20fx%20=%200/practica%2012.txt --- aproximacion grafica >> x = linspace(1,2,1000); >> y=x.^3; >> plot(x,y,'.') >> grid >> [X,Y] = ginput(1) X = 1.2599 Y = 2.0000 --- metodo iterativo >> a = 1; fa = a^3-2 fa = -1 >> b = 2; fb = b^3-2 fb = 6 >> c = (a+b)/2; fc = c^3-2 fc = 1.3750 >> b = c;fb = fc; %movemos el extremo derecho >> c = (a+b)/2; fc = c^3-2 fc = -0.0469 >> a = c;fa = fc; %movemos el extremo izquierdo >> c = (a+b)/2; fc = c^3-2 fc = 0.5996 etc... -------- biseccion.m file:///E|/Documentos/Estudios/Documentacion%20Asign...2%20-%20La%20ecuacion%20fx%20=%200/practica%2012.txt (1 of 4) [09/03/2008 13:49:30] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo...s/Practica%2012%20-%20La%20ecuacion%20fx%20=%200/practica%2012.txt function c=biseccion(f,a,b,tol,maxiter) fa = feval(f,a); fb = feval(f,b); k = 0; if fa*fb>0 disp('Intervalo inadecuado. No hay garantia de existencia de raices.') else while b-a>tol & k<maxiter c = (a+b)/2; fc = feval(f,c); if fa*fc < 0 % Semiintervalo izquierdo b = c; fb=fc; elseif fc*fb<0 %Semiintervalo derecho a = c; fa = fc; elseif fc==0 %c es la solucion a=c;b=c; end k = k+1; end end if k == maxiter disp('Alcanzado maximo de iteraciones') end if b-a < tol disp('Alcanzado error menor que tol') end -------------------------------- Solucion al problema del billar >> x = linspace(0,2*pi,10000); >> y = billar(x); >> plot(x,y,'.') >> grid >> >> c=biseccion('billar',1,2,1e-6,40) file:///E|/Documentos/Estudios/Documentacion%20Asign...2%20-%20La%20ecuacion%20fx%20=%200/practica%2012.txt (2 of 4) [09/03/2008 13:49:30] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo...s/Practica%2012%20-%20La%20ecuacion%20fx%20=%200/practica%2012.txt Alcanzado error menor que tol c = 1.5708 >> c=biseccion('billar',3,4,1e-6,40) Alcanzado error menor que tol c = 3.1416 >> c=biseccion('billar',4,5,1e-6,40) Alcanzado error menor que tol c = 4.7124 >> c=biseccion('billar',-1,1,1e-6,40) Alcanzado error menor que tol c = 0 >> c=biseccion('billar',2*pi-1,2*pi+1,1e-6,40) Alcanzado error menor que tol c = 6.2832 ---------------- Ejemplo utilizando variables globales >> global P Q >> P = [0.7 -0.7]; Q=[0.5 0]; >> z = linspace(0,2*pi); >> plot (cos(z), sin(z), P(1), P(2), 'ro', Q(1), Q(2), 'go') >> [sol,c]=regulaf('billar',2,3,1e-6,40) Alcanzado error menor que tol sol = 2.6697 >> x=cos(sol); y = sin(sol); >> hold on >> plot(x,y,'*') ----------- ejercicio y = x.^10 - 1 file:///E|/Documentos/Estudios/Documentacion%20Asign...2%20-%20La%20ecuacion%20fx%20=%200/practica%2012.txt (3 of 4) [09/03/2008 13:49:30] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo...s/Practica%2012%20-%20La%20ecuacion%20fx%20=%200/practica%2012.txt solucion x=1 con tol = 1e-6 biseccion: 21 iteraciones regulaf: 160 iteraciones file:///E|/Documentos/Estudios/Documentacion%20Asign...2%20-%20La%20ecuacion%20fx%20=%200/practica%2012.txt (4 of 4) [09/03/2008 13:49:30] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo...0La%20ecuacion%20fx%20=%200%20-%202a%20parte/practica%2013.txt.txt >> %metodo del PUNTO FIJO -------------------------- >> format compact >> x = 1; >> x = sqrt(2/x); %hemos reorganizado la ecuacion x^3 - 2 = 0 >> x = sqrt(2/x) x = 1.1892 >> x = sqrt(2/x) x = 1.2968 >> x = sqrt(2/x) x = 1.2419 >> x = sqrt(2/x) ... >> x = sqrt(2/x) x = 1.2599 >> %mejora obvia ---------------- >> x = 1; >> k=1; >> x(k+1) = sqrt(2/x(k)), k = k + 1; x = 1.0000 1.4142 >> x(k+1) = sqrt(2/x(k)), k = k + 1; x = 1.0000 1.4142 1.1892 >> x(k+1) = sqrt(2/x(k)), k = k + 1; x = 1.0000 1.4142 1.1892 1.2968 >> x(k+1) = sqrt(2/x(k)), k = k + 1; x = 1.0000 1.4142 1.1892 1.2968 1.2419 >> x(k+1) = sqrt(2/x(k)), k = k + 1; file:///E|/Documentos/Estudios/Documentacion%20Asigna...n%20fx%20=%200%20-%202a%20parte/practica%2013.txt.txt (1 of 4) [09/03/2008 13:49:31] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo...0La%20ecuacion%20fx%20=%200%20-%202a%20parte/practica%2013.txt.txt x = 1.0000 1.4142 1.1892 1.2968 1.2419 1.2691 Permite un mejor analisis cuantitativo -------------------------------------- >> plot(x); >> e = diff(x); >> tasa_convergencia = e(2:end)./e(1:end-1) tasa_convergencia = Columns 1 through 7 -0.5432 -0.4784 -0.5108 -0.4946 -0.5027 -0.4986 -0.5007 Columns 8 through 14 -0.4997 -0.5002 -0.4999 -0.5000 -0.5000 -0.5000 -0.5000 Columns 15 through 16 -0.5000 -0.5000 >> %significa que g'(x*) = -1/2 Representacion grafica: ----------------------- (Hay que arreglarlo un poco) Lo que falla es construir la matriz para representar los puntos: Los puntos a representar son: (x1,x1) (x1,x2) (x2,x2) (x2,x3) (x3,x3) (x3,x4) (x4,x4) (x4,x5) (x5,x5) (x5,x6) .... seria facil haciendo coord = [coord x(k) x(k)] con k=1->n-1 file:///E|/Documentos/Estudios/Documentacion%20Asigna...n%20fx%20=%200%20-%202a%20parte/practica%2013.txt.txt (2 of 4) [09/03/2008 13:49:31] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo...0La%20ecuacion%20fx%20=%200%20-%202a%20parte/practica%2013.txt.txt absc = [absc x(k) x(k+1)] con k=1->n-1 xcos = linspace(0,pi/2); ycos = cos(xcos); [x, solucion, tasa_convergencia] = puntofijo('cos',1,1e-6,100); %construir coord y absc %pequeña modificacion, que el primer punto sea x1,0 para %que mole mas coord = [x(1) x(1)]; absc = [0 x(2)]; %absc = [x(1) x(2)]; k = 2; >> for k = 2:34 coord = [coord x(k) x(k)]; absc = [absc x(k) x(k+1)]; k = k+1; end >> plot(xcos,ycos,'g',coord,absc,'b') Solucion al billar -------------------- >> global P Q P = [0.6,0];Q = [-0.6,0]; [aprox, solucion, tasa_convergencia] = puntofijo('billarf',1,1e-6,100); >> solucion solucion = 1.5708 >> %la otra solucion no se obtiene porque la derivada es mayor que cero >> %se hace con billarf2, donde y = x - billar(x) file:///E|/Documentos/Estudios/Documentacion%20Asigna...n%20fx%20=%200%20-%202a%20parte/practica%2013.txt.txt (3 of 4) [09/03/2008 13:49:31] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo...0La%20ecuacion%20fx%20=%200%20-%202a%20parte/practica%2013.txt.txt >> [aprox, solucion, tasa_convergencia] = puntofijo('billarf2',1,1e-6,100); >> solucion solucion = -3.7824e-008 >> %Asi se han obtenido AMBAS soluciones file:///E|/Documentos/Estudios/Documentacion%20Asigna...n%20fx%20=%200%20-%202a%20parte/practica%2013.txt.txt (4 of 4) [09/03/2008 13:49:31] 14 Aproximación Mínimo-Cuadrática. Ajuste de datos discretos La aproximación mínimo-cuadrática trata de obtener una solución aproximada a un problema lineal, óptima en el sentido de que haga mínima una expresión cuadrática bajo ciertas condiciones. Uno de los problemas de este tipo más usuales consiste en ajustar funciones a un número finito de valores dados; concretamente, se trata de encontrar la función de cierta clase que "mejor" representa dichos valores. Como clase de referencia, podemos considerar los polinomios de grado no superior a n. En otras ocasiones, intentamos aproximar una función dada mediante otra función "más simple", por ejemplo un polinomio o una combinación de funciones trigonométricas. Un problema aparentemente distinto, pero que engloba a los anteriores, es resolver aproximadamente un sistema de ecuaciones lineales incompatible. Matemáticamente, los problemas mencionados se traducen en hallar el punto de un subespacio más próximo a un punto dado de un espacio euclídeo. La solución teórica es la proyección ortogonal del punto dado sobre el subespacio. La solución numérica requiere obtener de una base ortogonal de dicho subespacio, lo que se consigue mediante el algoritmo de factorización QR en el caso finito- dimensional. En los espacios de funciones (de dimensión infinita) se suele partir ya de una base ortogonal, para reducir el trabajo computacional y garantizar la estabilidad numérica de la solución. En este tema tratamos del ajuste de datos discretos, o caso de dimensión finita y en los dos siguientes, el ajuste funcional en espacios de dimensión infinita. 14.1 Aproximación Polinómica Mínimo-Cuadrática Dada una nube de puntos {( tratamos de hallar el polinomio de grado no superior a n, que mejor se ajusta a la nube, en el sentido de minimizar el error cuadrático }, , , 2 , 1 ), , m i y x i i K = ), x ( P n ( ) ∑ = − = m i i i n y x P E 1 2 2 ) ( . La expresión del error se ha escogido de modo que todos los sumandos sean positivos para evitar que los errores se compensen y para que la función resultante sea derivable, y así poder resolver el problema por métodos analíticos. 14.1.1 Regresión lineal Ejemplo 1 Consideremos los datos de implantación de telefonía fija en España que se muestran en la tabla adjunta. Año Líneas /100 hab 1.988 28.1 1.989 30.0 1.990 32.3 1.991 34.6 1.992 35.3 1.993 36.4 1.994 37.5 1.995 38.5 Suponiendo que el número de líneas instaladas por cada 100 habitantes crece linealmente en el periodo considerado, queremos obtener la recta o polinomio de primer grado, que mejor aproxime los valores de la tabla, concretamente, que minimice el error cuadrático dado por 2 1 1 ) ( a x a x P y + = = ∑ = − + = m i i i y a t a E 1 2 2 1 2 ) ( El problema puede resolverse analíticamente, considerando E como función de dos variables y y hallando los extremos relativos. En este caso existe un único extremo que es el mínimo buscado. Para ello hacemos cero las derivadas parciales de E respecto a y : 2 1 a 1 a , 2 a 2 a ¦ ¦ ) ¦ ¦ ` ¹ = − + = ∂ ∂ = − + = ∂ ∂ ∑ ∑ = = 0 ) ( 2 0 ) ( 2 1 2 1 2 2 1 2 1 1 2 m i i i m i i i i y a x a a E y a x a t a E Obtenemos así un sistema de dos ecuaciones lineales con dos incógnitas, llamadas ecuaciones normales, cuya solución nos da los coeficientes de la recta buscada, llamada recta de regresión de Y sobre X. ¦ ) ¦ ` ¹ Σ = + Σ Σ = Σ + Σ i i i i i i i i i i i y ma a x y x a x a x 2 1 2 1 2 ) ( ) ( ) ( Efectuamos los cálculos con MATLAB: x = (1988:1995)' y = [28.1 30 32.3 34.6 35.3 36.4 37.5 38.5]' m = length(x) Representamos los datos mediante un diagrama de barras con bar(x,y) Calculamos los coeficientes de las ecuaciones normales usando sum, aunque posteriormente se obtendrán de modo más rápido. N = [sum(x.^2), sum(x); sum(x), m] N = 31728620 15932 15932 8 Obtenemos a continuación los términos independientes y resolvemos el sistema c = [sum(x.*y); sum(y)] p = N\c c = 1.0e+005 * 5.4314 0.0027 p = 1.0e+003 * 0.0015 -2.8892 La solución proporciona los coeficientes de la recta de regresión que aproxima los datos tal como muestra la Figura 1. xg = linspace(1987,1996); yg = polyval(p,xg); plot(x,y,'*',xg,yg) Figura 1. Recta de regresión El error cuadrático se obtiene del modo siguiente: E2 = norm(polyval(p,x)-y)^2 E2 = 3.4554 Las ecuaciones normales pueden obtenerse por un procedimiento algebraico que simplifica las expresiones y es fácilmente generalizable. Consideremos la ecuación general de la recta y e intentemos determinar los coeficientes a y imponiendo que los datos satisfagan dicha ecuación. Obtenemos así un sistema de ecuaciones lineales probablemente incompatible. 2 1 1 ) ( a x a x P + = = 1 2 a | | | | | | | | | | | . | \ | = | | . | \ | | | | | | | | | | | | . | \ | 5 . 38 5 . 37 4 . 36 3 . 35 6 . 34 3 . 32 0 . 30 1 . 28 1 1995 1 1994 1 1993 1 1992 1 1991 1 1990 1 1989 1 1988 2 1 a a Expresamos matricialmente este sistema como ( ) y p u x = donde x e y son vectores columna que contienen los datos, u es una columna de unos y p la columna de los coeficientes a determinar. Premultiplicando por la matriz transpuesta (x u) T se obtiene ( ) y u x p u x u x | | . | \ | = | | . | \ | T T T T o sea | | . | \ | = | | . | \ | y u y x p u u x u u x x x T T T T T T que coincide precisamente con el sistema de ecuaciones normales. Mientras el sistema inicial era incompatible, éste tiene solución única que proporciona la recta buscada. Repetimos los cálculos en MATLAB: A = [x, x.^0] N = A'*A c = A'*y p = N\c A = 1988 1 1989 1 1990 1 1991 1 1992 1 1993 1 1994 1 1995 1 N = 31728620 15932 15932 8 c = 1.0e+005 * 5.4314 0.0027 p = 1.0e+003 * 0.0015 -2.8892 14.1.2 Desplazamiento del origen Las ecuaciones normales tienen, desde el punto de vista numérico, una ventaja y un inconveniente. La ventaja es que su matriz es simétrica definida positiva, lo que garantiza que puede resolverse de modo estable sin necesidad de pivotación. El inconveniente es que esta matriz puede tener un número de condición alto si no se elige con cuidado la matriz original A, como ocurre en el ejemplo. Una solución obvia es modificar convenientemente la variable x para que sus valores sean moderados. En el ejemplo anterior, si centramos las abscisas a su media, tomando , se observa una importante mejora en el número de condición de la matriz del sistema de ecuaciones normales A 5 . 1991 − = x xn T A. cond(N) % Condición del sistema inicial xn = x - mean(x) % Desplazo el origen a la media de x A = [xn xn.^0] % Condiciones de ajuste N = A'*A % El sistema nuevo cond(N) % tiene mejor condición ans = 2.9961e+012 xn = -3.5000 -2.5000 -1.5000 -0.5000 0.5000 1.5000 2.5000 3.5000 A = -3.5000 1.0000 -2.5000 1.0000 -1.5000 1.0000 -0.5000 1.0000 0.5000 1.0000 1.5000 1.0000 2.5000 1.0000 3.5000 1.0000 N = 42 0 0 8 ans = 5.2500 Las nuevas ecuaciones normales son más estables que las anteriores. Su solución da los coeficientes de la recta de regresión desplazada al valor medio 2 1 ) ( b x x b y + − = . c = A'*y p = N\c c = 61.6500 272.7000 p = 1.4679 34.0875 Para evaluar el polinomio hay que tener en cuenta que está referido a las nuevas abscisas. Sin embargo, en la representación gráfica utilizo las abscisas antiguas. yp = polyval(p,xn) plot(x,y,'*',x,yp) 14.1.3 Ajuste polinómico Con la versión algebraica, es fácil generalizar las ecuaciones normales para ajustar por polinomios de grado mayor, en lugar de por rectas. Obtendremos así mejores aproximaciones, con menor error cuadrático. Por ejemplo, para ajustar con un polinomio de grado 2, 3 2 2 1 2 ) ( a x a x a x P + + = basta añadir a la matriz A una columna con los cuadrados de las abscisas ( ) u x x A 2 = y efectuar las demás operaciones como en el caso de la recta de regresión. El sistema de ecuaciones normales es de tamaño 3×3, pero su condición es muy elevada, por lo que trabajaremos con las abscisas desplazadas. Realicemos las operaciones con MATLAB. A = [xn.^2, xn, xn.^0] N = A'*A % Ecuaciones normales c = A'*y % Términos independientes p = N\c % Coeficientes del polinomio yp = polyval(p,xn) % Valor del polinomio en xn E2 = norm(y-yp)^2 % Error cuadrático A = 12.2500 -3.5000 1.0000 6.2500 -2.5000 1.0000 2.2500 -1.5000 1.0000 0.2500 -0.5000 1.0000 0.2500 0.5000 1.0000 2.2500 1.5000 1.0000 6.2500 2.5000 1.0000 12.2500 3.5000 1.0000 N = 388.5000 0 42.0000 0 42.0000 0 42.0000 0 8.0000 c = 1.0e+003 * 1.4098 0.0616 0.2727 p = -0.1304 1.4679 34.7719 yp = 28.0375 30.2875 32.2768 34.0054 35.4732 36.6804 37.6268 38.3125 E2 = 0.6005 Notemos cómo el error se ha reducido considerablemente. Para representar gráficamente el polinomio obtenido, lo evaluamos en el rango xg, previo desplazamiento a la media de x. xgn = xg-mean(x); yg = polyval(p,xgn); plot(x, y, '*', xg, yg, x, yp, '+') Figura 2: Ajuste polinómico de segundo grado El ajuste por rectas y parábolas se generaliza de modo directo a polinomios de cualquier grado. En general suponemos que el grado del polinomio, n, es mucho menor que el número de puntos a interpolar, m; aunque, en teoría, el grado puede llegar a ser m–1, con lo que se obtiene la interpolación polinómica normal como caso particular de la mínimo cuadrática. Imponiendo que el polinomio 1 1 2 1 ) ( + − + + + + = n n n n n a x a x a x a x P L pase por los puntos {( queda un sistema lineal m×(n+1) incompatible: }, , , 2 , 1 ), , m i y x i i K = | | | | | | | | . | \ | = | | | | | | . | \ | ⋅ | | | | | | | | . | \ | + − − − − m n n m n m n m n n n n n n y y y y a a a a x x x x x x x x x x x x M M M L M M M M M M M M L L L 3 2 1 1 2 1 1 3 1 3 3 2 1 2 2 1 1 1 1 1 1 1 1 A partir de este sistema se forman las ecuaciones normales y se resuelven para obtener el polinomio mínimo-cuadrático 14.1.4 Índice de determinación Conforme aumenta el grado del polinomio, disminuye el error cuadrático del ajuste de un conjunto dado de puntos. Deseamos establecer un criterio para elegir un polinomio de grado no demasiado alto que aproxime los datos adecuadamente. El error mínimo cuadrático no es buen indicador de la aproximación, pues depende del número de puntos y de las unidades de medida empleadas. Como alternativa definimos el índice de determinación, ∑ ∑ = = − − = m i i m i i n y y y x P I 1 2 1 2 ) ( ) ) ( ( donde y es la media de las ordenadas. El índice de determinación es una cantidad adimensional entre 0 y 1. Cuanto más próximo a 1, mejor es el ajuste. Dado un valor umbral entre 0 y 1, tomaremos el polinomio mínimo-cuadrático de menor grado cuyo índice de determinación supere dicho umbral. La aproximación de grado 0 es el polinomio constante igual a la media de las ordenadas. Su índice de determinación es también 0. En el otro extremo, si exigimos que el índice sea muy próximo a 1, el grado llegara a ser el número de datos menos 1 con lo que obtendremos el polinomio de interpolación que pasa exactamente por todos los puntos. El índice valdrá 1 y el error cuadrático, 0. Si el ajuste se hace para predecir la evolución futura del fenómeno, los polinomios de grado elevado no son fiables pues oscilan mucho fuera del intervalo. Ejemplo 2 Calculemos el índice de determinación del ajuste de grado 2 de los datos anteriores. ym = mean(y) I = (norm(yp-ym)/norm(y-ym))^2 Obtenemos un valor de 0.9936. Si queremos una mejor aproximación, aumentamos el grado del polinomio a ajustar. A = [xn.^3 A] N = A'*A c = A'*y p = N\c yp = polyval(p,xn) I = (norm(yp-ym)/norm(y-ym))^2 Ahora el índice ha subido a 0.9944. 14.1.5 Ajuste polinómico con MATLAB MATLAB obtiene el polinomio de aproximación por mínimos cuadrados mediante la orden polyfit. La sintaxis p = polyfit(x,y,n) proporciona los coeficientes del polinomio mínimo cuadrático de grado n determinado por la nube de puntos ( . El polinomio puede evaluarse con polyval. ) , y x Por ejemplo, polyfit(xn,y,4) proporciona el polinomio de grado 4 que mejor ajusta los datos ( . El uso de polyfit no evita los problemas de mal condicionamiento, por lo que conviene utilizar las abscisas desplazadas. ) , y x Alternativamente, podemos utilizar polyfit con la sintaxis siguiente, que además de centrar automáticamente las abscisas, las normaliza para que su desviación típica sea la unidad, dividiéndolas por dicha desviación. [p,s,mu] = polyfit(x,y,4) p = 0.3989 0.1670 -1.6321 3.3380 34.9775 s = R: [5x5 double] df: 3 normr: 0.5492 mu = 1.0e+003 * 1.9915 0.0024 mu es un vector cuyas componentes mu(1) y mu(2) son, respectivamente, la media x y la desviación típica σ de x. El polinomio p obtenido está referido a la nueva variable , σ x x u − = lo que ha de tenerse en cuenta para evaluarlo respecto a los datos iniciales. ug = (xg-mu(1))/mu(2); yg = polyval(p,ug); plot(xg, yg, x, y, '*') La normalización mejora el comportamiento numérico, tanto del proceso de obtención del polinomio, como del propio polinomio resultante. 14.2 Sistemas Sobredeterminados Las condiciones de ajuste de un polinomio a una serie de datos originaban en el apartado anterior un sistema de ecuaciones lineales incompatible. Esto ocurre habitualmente cuando se trabaja con valores experimentales. Para reducir la influencia de los errores, se realizan medidas redundantes, dando lugar a ecuaciones incompatibles. Llamamos a estos sistemas sobredeterminados, en lugar de incompatibles, para enfatizar el hecho de que todas las ecuaciones contienen información igualmente válida (o con distinto grado de confianza) que utilizaremos en la determinación de la solución aproximada. Sea b Ax = un sistema lineal posiblemente incompatible de tamaño m×n y de rango total por columnas, es decir, de rango n. La solución óptima x es, por definición, la que minimiza el error cuadrático 2 2 b x A − = E x A b − ) Im(A b x A x A es una combinación lineal de las columnas de A, por tanto será un vector del espacio columna de A, Im(A), precisamente el más próximo a b. Como medimos la distancia mediante una norma euclídea, tal vector es la proyección ortogonal de b sobre el subespacio Im(A). Así pues, x A − b será ortogonal al espacio columna de A, y por tanto, a las columnas de A. Matricialmente esto se expresa como 0 b x A A = − ) ( T de donde se obtienen las ecuaciones normales b A x A A T T = . La solución óptima se expresa formalmente como b A A A x T T 1 ) ( − = , aunque en la práctica resolvemos el sistema en lugar de calcular la inversa. La proyección ortogonal de b sobre el espacio columna de A es b A A A A x A p T T 1 ) ( − = = . La matriz de la proyección ortogonal, P, transforma directamente b en su proyección p: T T A A A A P 1 ) ( − = Frecuantemente las ecuaciones normales resultan mal condicionadas, por lo que se requiere un tratamiento previo de la matriz A para poder efectuar los cálculos de modo estable. Ejemplo 3 La tarifa del taxi se compone de una parte fija (bajada de bandera), otra parte proporcional a la distancia recorrida y otra proporcional al tiempo de espera. La tabla siguiente recoge los datos de distintas carreras. Distancia 8.5 2.0 8.4 6.8 8.3 7.1 3.0 1.9 3.0 T. espera 10.5 13.4 0.4 7.6 10.1 8.6 3.8 13.6 10.8 Precio 10.5 6.6 7.7 8.5 10.2 9.0 4.7 6.6 6.6 El precio P de cada carrera viene dado por la expresión cT bD a P + + = donde D y T son la distancia y el tiempo de espera. Se trata de determinar los precios unitarios a,b y c, a partir de los datos de la tabla. Sustituyendo los datos de cada carrera en la expresión anterior se obtiene un sistema incompatible. Hallemos la solución mínimo-cuadrática con MATLAB. La matriz del sistema consta de una columna de unos, que corresponden a la bajada de bandera, la columna de las distancias y la de los tiempos de espera: U = ones(9,1); D = [ 8.5; 2.0; 8.4; 6.8; 8.3; 7.1; 3.0; 1.9; 3.0]; T = [10.5; 13.4; 0.4; 7.6; 10.1; 8.6; 3.8; 13.6; 10.8]; A = [U D T] % Matriz del sistema sobredeterminado A = 1.0000 8.5000 10.5000 1.0000 2.0000 13.4000 1.0000 8.4000 0.4000 1.0000 6.8000 7.6000 1.0000 8.3000 10.1000 1.0000 7.1000 8.6000 1.0000 3.0000 3.8000 1.0000 1.9000 13.6000 1.0000 3.0000 10.8000 El término independiente es la columna de los precios. b = [10.5; 6.6; 7.7; 8.5; 10.2; 9.0; 4.7; 6.6; 6.6]; Premultiplicando por A T se obtienen las ecuaciones normales. N = A'*A c = A'*b N = 9.0000 49.0000 78.8000 49.0000 333.9600 385.6200 78.8000 385.6200 839.7400 c = 70.4000 419.9300 625.6900 Resolviendo obtenemos la estimación mínimo cuadrática de los factores de la tarifa. x = N\c x = 1.5296 0.7203 0.2708 La bajada de bandera cuesta 1.53, el precio del Km es de 0.72 y el minuto de espera cuesta 0.271. Con estos datos podemos estimar el precio de un recorrido cualquiera. Por ejemplo, una carrera de 5 Km con 18 min de espera costará [1 5 18]*x = 10.01€. 14.3 Factorización QR El principal problema de las ecuaciones normales desde el punto de vista de la estabilidad numérica es la multiplicación de A por su transpuesta. Al hallar la recta de regresión, hemos visto que centrar las abscisas a su media mejora la condición de las ecuaciones normales. La matriz del sistema normal centrado es diagonal, lo que indica que las columnas de A son ortogonales. Apliquemos la idea de ortogonalizar las columnas a la matriz de un sistema sobredeterminado con columnas independientes. Esto nos evitará efectuar productos de matrices y obtendremos la solución óptima resolviendo un sistema triangular. Ortogonalizar las columnas de equivale a descomponerla en dos factores Q y R. El primero está formado por las columnas de A ortogonalizadas y el segundo es una matriz triangular superior invertible (si A es de rango n) que almacena las transformaciones efectuadas. n m× A n n× Al sustituir la factorización A = QR en el sistema de ecuaciones normales b A x A A T T = queda b Q R x QR Q R T T T T = ) )( ( Como Q es ortogonal, el término Q desaparece, y al ser R invertible, simplificamos R I Q = T T en los dos miembros, quedando el sistema triangular b Q x R T = cuya solución es la solución óptima en sentido de mínimos cuadrados del sistema inicial. Obtendremos la factorización QR mediante el algoritmo de Gram-Schmidt modificado. El coste de la factorización se compensa por la mejora de la estabilidad numérica en la resolución del sistema resultante. 14.3.1 Método de Gram-Schmidt modificado Sea A una matriz con columnas linealmente independientes. El método de Gram- Schmidt modificado obtiene una matriz Q de columnas ortonormales ( y una matriz R triangular superior invertible tales que A = QR. n m× ) 2 1 n ..., , , q q q En cada paso del método se obtiene una columna más de la matriz Q y una fila de R. En el paso k-ésimo, se obtiene la k-ésima columna de Q normalizando la correspondiente columna de A y se hacen ortogonales a q k las siguientes columnas de A, sustrayéndoles su proyección en la dirección de q k . Los coeficientes de la proyección son los elementos de la fila k de la matriz R. Como resultado, las n últimas columnas de A son ortogonales a las k columnas ya obtenidas de Q, puesto que en pasos anteriores se han eliminado las correspondientes proyecciones. k − Podemos establecer formalmente el algoritmo como Para k = 1, 2, ..., n Normalizar a k : k kk a = r kk k k r q a = Para j = k+1, ..., n Restar de a j su proyección sobre q k : k j kj r q a , = k kj j j r q a a − ← Fin j Fin k Ejercicio 1 Traduce este algoritmo a una función de MATLAB que operando columna a columna proporcione una factorización QR de la matriz A. 14.3.2 Factorización QR en MATLAB El algoritmo presentado en punto anterior, aunque es más estable numéricamente que la ortogonalización ordinaria de Gram-Schmidt, tiene el inconveniente de que los errores de redondeo se transmiten de un paso a otro, con lo que se puede perder la ortogonalidad. MATLAB obtiene la factorización QR mediante un proceso iterativo que trata de evitar este problema. La función correspondiente se denomina qr. Veamos cómo se utiliza en el ejemplo del taxi. [Q,R] = qr(A,0) Q = -0.3333 0.3728 0.3370 -0.3333 -0.4202 0.2192 -0.3333 0.3606 -0.5842 -0.3333 0.1654 -0.0254 -0.3333 0.3484 0.2890 -0.3333 0.2020 0.0828 -0.3333 -0.2982 -0.5922 -0.3333 -0.4324 0.2315 -0.3333 -0.2982 0.0422 R = -3.0000 -16.3333 -26.2667 0 8.1965 -5.2952 0 0 11.0346 Comprobamos que Q tiene las columnas ortonormales ya que Q'*Q = I, que R es triangular y que Q*R es A. La solución óptima del sistema Ax = b utilizando la descomposición QR se obtiene con x = R\(Q'*b) x = 1.5296 0.7203 0.2708 14.3.3 Resolución de sistemas incompatibles con MATLAB La contrabarra produce la solución mínimo cuadrática en el caso de sistemas lineales sobredeterminados. x = A\b x = 1.5296 0.7203 0.2708 14.4 Modelos Lineales Si los polinomios no proporcionan un ajuste adecuado de los datos, podemos recurrir a funciones cualesquiera, φ , con tal que sus valores en los puntos dados sean independientes. ) ( , ), ( ), ( 2 1 t φ t φ t n L Exigiendo que una combinación lineal genérica de estas funciones ) ( ) ( ) ( ) ( 2 2 1 1 x φ a x φ a x φ a x g n n + + + = L ajuste los puntos {( obtenemos un sistema de m ecuaciones y n incógnitas. }, , , 2 , 1 ), , m i y x i i K = | | | | | | . | \ | = | | | | | . | \ | | | | | | | . | \ | m n m n m m n n n y y y y a a a x φ x φ x φ x φ x φ x φ x φ x φ x φ x φ x φ x φ M M L M M M L L L 3 2 1 2 1 1 0 3 3 2 3 1 2 2 2 2 1 1 1 2 1 1 ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( Si el sistema resulta incompatible, planteamos las ecuaciones normales y procedemos como en el caso del ajuste polinómico. Ejemplo 4 Tenemos una mezcla de dos sustancias radiactivas con constantes de desintegración conocidas y queremos determinar las cantidades C y D de dichas sustancias. El número de desintegraciones y obedece teóricamente a la expresión t t D C y 2 e e + = donde t es el tiempo medido en unidades adecuadas. Las lecturas de un contador Geiger se resumen en la tabla siguiente: 5 . 0 6 . 0 65 . 0 7 . 0 85 . 0 1 1 . 1 3 . 1 5 . 1 7 . 1 2 1 9 . 0 8 . 0 7 . 0 6 . 0 5 . 0 4 . 0 3 . 0 2 . 0 1 . 0 0 y t Estimemos C y D por mínimos cuadrados. Introducimos los datos en MATLAB: t = (0:.1:1)'; y = [2; 1.7; 1.5; 1.3; 1.1; 1; 0.85; 0.7; 0.65; 0.6; 0.5]; 2 1.8 1.6 Formamos las ecuaciones normales 1.4 A = [exp(-t), exp(-2*t)] 1.2 N = A'*A 1 0.8 0.6 0.4 0.2 0 0 0.2 0.4 0.6 0.8 1 c = A'*y A = 1.0000 1.0000 0.9048 0.8187 0.8187 0.6703 0.7408 0.5488 0.6703 0.4493 0.6065 0.3679 0.5488 0.3012 0.4966 0.2466 0.4493 0.2019 0.4066 0.1653 0.3679 0.1353 N = 4.9054 3.7160 3.7160 2.9960 c = 8.6073 6.6996 La solución mínimo cuadrática es x = N\c x = 1.0043 0.9906 Por tanto, la mezcla consta de partes iguales de ambas sustancias. El error cuadrático indica la precisión del ajuste E2 = norm(y-A*x)^2 E2 = 0.0044 Evaluamos el modelo en los datos y representamos gráficamente ambos. yp = A*x; plot(t,y,'*',t,yp,'o',t,yp,':') 0 0.2 0.4 0.6 0.8 1 0.5 1 1.5 2 Figura 3: Modelo lineal exponencial 14.4.1 Linealización por cambio de variables En ocasiones, el modelo propuesto para explicar un fenómeno no tiene inicialmente expresión lineal, pero no es difícil hallar una transformación que linealice el problema y aplicar el método de mínimos cuadrados lineales. Ejemplo 5 La tabla muestra la evolución del número de abonados a teléfono móvil en España en determinado periodo. Año Abonados Teléfono Móvil 1.988 11.689 1.989 29.783 1.990 54.712 1.991 108.451 1.992 180.296 1.993 257.250 1.994 411.930 1.995 928.955 Suponiendo que el número de abonados crece exponencialmente, tratamos de ajustar una función del tipo at Ke y = donde K y a son parámetros a determinar. Como la expresión no es lineal en estos parámetros, efectuamos la transformación at K y + = log log Cambiando a la variable y llamando b al log K, queda un modelo lineal y z log = b at z + = cuyos parámetros a y b estimamos por el método de mínimos cuadrados. Efectuamos los cálculos con MATLAB. Introducimos las abscisas en columna y las centramos t = (1988:1995)'; tm = mean(t); tn = t-tm; En y introducimos los miles de abonados y = [ 11.689 29.783 54.712 108.451 ... 180.296 257.250 411.930 928.955]'; Efectuamos el cambio de variable z = log(y); La matriz del sistema lineal sobredeterminado es A = [tn, tn.^0]; Planteamos las ecuaciones normales N = A'*A c = A'*z N = 42 0 0 8 c = 24.4573 38.1405 La solución mínimo-cuadrática es p = N\c p = 0.5823 4.7676 que proporciona los valores de a y b. Representamos gráficamente el ajuste, deshaciendo los cambios de variable tg = linspace(1988,1995); yg = exp(polyval(p,tg-tm)); plot(t,y,'*',tg,yg) 1988 1989 1990 1991 1992 1993 1994 1995 0 200 400 600 800 1000 Figura 4. Ajuste exponencial 14.5 Problemas Problema 1 El paro registrado en febrero de los últimos años, según datos del INEM se resume en la siguiente tabla Año Nº de parados 1991 2.362.373 1992 2.337.472 1993 2.471.228 1994 2.774.579 1995 2.575.873 1996 2.427.015 1997 2.262.721 1998 2.067.830 1999 1.783.940 2000 1.659.820 2001 1.598.920 a) Halla la recta de regresión, previa formación de las ecuaciones normales. b) Ajusta un polinomio mínimo-cuadrático de grado 3. Compara el número de condición de las ecuaciones normales según se efectúe o no el centrado de las abscisas. c) Halla el error cuadrático y el índice de determinación del polinomio de grado 3. d) Estima el número de parados en febrero de 2002, de seguir esa tendencia. e) Obtén el mismo polinomio con polyfit, de tres maneras: a partir de los datos iniciales, centrando las abscisas y centrando y escalando. Compara la magnitud relativa de los coeficientes. Genera gráficos con los polinomios obtenidos de cada manera. Problema 2 La densidad del aire ρ (en g/m 3 ) varía con la altura h según la tabla siguiente h 7 10 15 21 27 34 39 43 47 51 55 59 61 ρ 556 369 191 75 26.2 9.9 4.4 2.3 1.4 0.8 0.5 0.33 0.25 a) Halla el ajuste polinómico de menor grado con índice de determinación mayor que 0.99. ¿Cuál es el error cuadrático? b) Dibuja los datos y el polinomio ajustado. Explica por qué este ajuste no resulta adecuado para alturas grandes. c) Ajusta los datos a un modelo exponencial. Compara el error y el comportamiento del ajuste con el caso anterior. Problema 3 La tabla siguiente muestra los valores de la temperatura ambiente medida a distintas horas del día. Hora 6 8 10 12 14 16 18 20 Grados 7 9 12 18 21 19 15 10 Normaliza las abscisas y ajusta un polinomio mínimo-cuadrático de cuarto grado por los siguientes procedimientos: a) Planteando un sistema lineal sobredeterminado y resolviendo directamente las ecuaciones normales. b) Aplicando previamente la factorización QR según el algoritmo de Gram-Scmidt a la matriz del sistema. c) Aplicando el algoritmo qr de MATLAB para obtener la factorización. d) Resolviendo el sistema sobredeterminado mediante la contrabarra, \. e) Calculando directamente el polinomio mediante polyfit. Problema 4 La tabla adjunta muestra valores de una señal sinusoidal ) sin( ϕ ω + = t K y de la que se conoce la frecuencia ω = 1 y se quiere estimar la amplitud K y la fase ϕ. El cambio ) sin( ), cos( ϕ ϕ K Q K P = = convierte el problema en uno lineal: ). cos( ) sin( t Q t P y ω ω + = t 0 1.5 3 4.5 6 y -0.0713 -2.1641 0.8403 2.2658 -0.5283 Estima los valores desconocidos, halla el error cuadrático y representa los datos y el ajuste. Problema 5 La tabla adjunta muestra la distribución de los errores en la medida de 100 piezas salidas de una máquina. Error −1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1 Frec. 4 4 11 10 15 18 16 8 9 2 3 a) Suponiendo que la distribución es de la forma b ax y + = 2 1 , donde x es el error e y la frecuencia, se trata de determinar los parámetros desconocidos a y b. b) Ajusta una distribución del tipo 2 e ax K y − = c) ¿Cuál de los dos modelos explica mejor los datos? Problema 6 Considera los datos de matrícula en estudios universitarios de los últimos años, según datos del INE que se muestran en la siguiente tabla Centros Cursos 1993-94 1994-95 1995-96 1996-97 1997-98 1998-99 1999-00 1 2000-01 1 TOTAL 1.365.737 1.415.612 1.471.441 1.536.409 1.570.588 1.580.158 1.582.698 1.540.596 Licenciaturas 799.750 808.944 832.977 862.436 872.856 861.651 844.822 807.865 Arq. e Ingenierías 115.359 124.958 133.556 141.731 148.272 153.203 158.905 158.600 Diplomaturas 281.945 302.184 315.282 330.209 338.967 349.239 354.984 347.131 Arq. e Ingen. Técn. 168.683 179.526 189.626 202.033 210.493 216.065 223.987 227.000 a) Construye una tabla que estime los valores correspondientes al periodo 2001-2006 mediante aproximación mínimo cuadrática. b) Justifica la elección del polinomio aproximante. c) Representa gráficamente los resultados. Problema 7 Genera una nube de puntos (x i , y i ) dividiendo el intervalo [0, a] en n partes iguales, siendo a>0 y n>5 dos números fijados por ti, y tomando y i = erf(x i ). a) Ajusta los puntos por polinomios de grado 0, 1, 2,... , n−1 y represéntalos junto a la función erf(x) en el intervalo [0, a]. Compara cada polinomio ajustado con la función erf(x) para bastantes puntos y observa la relación entre el error máximo y el grado del polinomio. b) Como la función erf(x) es impar (erf(−x) = −erf(x)), parece razonable aproximarla mediante un polinomio impar 1 2 3 2 1 ) erf( − + + + ≈ k k x c x c x c x L Analiza de nuevo cómo varía el error máximo en función del grado del polinomio. c) Los polinomios no son muy adecuados para aproximar erf(x) porque no están acotados cuando x se hace grande, mientras que erf(x) tiende a 1 al tender x a infinito. Por ello, utilizando los mismos datos, ajusta un modelo de la forma ) ( ) ( 3 5 2 4 3 2 1 2 x c z c z c c e c x erf x + + + + ≈ − donde x z + = 1 1 . Compara el error máximo con el de los ajustes polinómicos. Problema 8 (Nota: en estas tablas, el punto indica millares) Año 14.5.1 Abonados Teléfono Móvil 1.988 11.689 1.989 29.783 1.990 54.712 1.991 108.451 1.992 180.296 1.993 257.250 1.994 411.930 1.995 928.955 a) Ajusta un polinomio de grado 7 a los datos de la tabla anterior. Modifica previamente el origen de tiempos para mejorar el comportamiento numérico del problema. Representa gráficamente el polinomio obtenido. b) Elige el menor grado del polinomio mínimo cuadrático que aproxime estos datos con la condición de que el índice de determinación sea mayor que 99%. c) Compara las predicciones efectuadas mediante los polinomios anteriores con los datos de la tabla siguiente. Año 14.5.2 Miles de Abonados Teléfono Móvil 1996 2.988 1997 4.330 1998 7.051 1999 14.884 2000 24.266 2001 29.656 d) Con toda la información de que dispones, elabora un informe para una operadora de telefonía móvil estimando la evolución del mercado en 2002 y 2003. Recuerda comprobar tus predicciones cuando se publiquen los datos reales. 14.6 Soluciones Problema 1 a) Introducimos los datos en vectores columna: x = (1991:2001)'; y = [2.362373; 2.337472; 2.471228; 2.774579; ... 2.575873; 2.427015; 2.262721; 2.067830; ... 1.783940; 1.659820; 1.598920]; Generamos las ecuaciones normales de la recta de regresión: m = length(x); N = [sum(x.^2), sum(x); sum(x), m] c = [sum(x.*y); sum(y)] N = 43824286 21956 21956 11 c = 1.0e+004 * 4.8536 0.0024 La solución proporciona los coeficientes de la recta La evaluamos en t y la representamos junto con los datos. . ) ( 2 1 1 a x a x P + = p = N\c yp = polyval(p,x); plot(x,y,'*',x,yp) title('Recta de regresión') p = -0.0938 189.4066 1990 1992 1994 1996 1998 2000 2002 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 b) Para determinar el ajuste mínimo-cuadrático de grado 3, construimos primero la matriz de van der Monde, obtenemos las ecuaciones normales, multiplicando por la transpuesta y las resolvemos. A = [x.^3, x.^2, x, x.^0]; N = A'*A c = A'*y p = N\c N = 1.0e+020 * 6.9562 0.0035 0.0000 0.0000 0.0035 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 c = 1.0e+011 * 1.9329 0.0010 0.0000 0.0000 Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 3.205179e-035. (Type "warning off MATLAB:nearlySingularMatrix" to suppress this warning.) p = 1.0e+005 * 0.0000 -0.0000 0.0023 -1.7791 El número de condición el sistema es muy elevado. El sistema es casi singular. cond(N) ans = 1.1361e+035 Repretimos el cálculo centrando los datos xm = mean(x); xn = x-xm; A = [xn.^3, xn.^2, xn, xn.^0]; N = A'*A c = A'*y; pn = N\c cond(N) N = 41030 0 1958 0 0 1958 0 110 1958 0 110 0 0 110 0 11 pn = 0.0033 -0.0207 -0.1523 2.4176 ans = 8.5584e+003 Comparando gráficamente los resultados se aprecia que al ajustar con las abscisas iniciales se pierde el término de grado 3, debido a la diferencia relativa de los valores de los coeficientes del polinomio. xg = linspace(1991,2001); yg = polyval(p,xg); xgn = xg-xm; ygn = polyval(pn,xgn); plot(x,y,'*',xg,yg,':',xg,ygn), 1990 1992 1994 1996 1998 2000 2002 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 c) Error cuadrático: evaluamos el polinomio en las abscisas y lo comparamos con las ordenadas: yp = polyval(pn,xn); E2 = norm(y-yp)^2 E2 = 0.0876 Índice de determinación: comparamos las desviaciones de las ordenadas calculadas y de las ordenadas de los datos respecto a su media: ym = mean(y); I = (norm(yp-ym)/norm(y-ym))^2 I = 0.9411 d) El valor del polinomio en 2002 (previo desplazamiento) estima el número de parados de ese año. polyval(pn,2002-xm) ans = 1.4702 e) Repetimos los cálculos con polyfit. Primero con las abscisas originales: MATLAB avisa de la necesidad de centrar los datos, aunque el resultado es más preciso que el obtenido a partir de las ecuaciones normales. Evaluamos el polinomio para comparar con los otros ajustes. p = polyfit(x,y,3) yg = polyval(p,xg); Warning: Polynomial is badly conditioned. Remove repeated data points or try centering and scaling as described in HELP POLYFIT. (Type "warning off MATLAB:polyfit:RepeatedPointsOrRescale" to suppress this warning.) > In C:\Matlab\toolbox\matlab\polyfun\polyfit.m at line 75 p = 1.0e+007 * 0.0000 -0.0000 0.0039 -2.6221 Los coeficientes del polinomio ajustado tienen escalas muy diferentes: de 10 a 10 Centrando las abscisas a la media evitamos el aviso de inestabilidad y obtenemos un polinomio cuyos coeficentes están mejor escalados: 4 − . 4 p = polyfit(xn,y,3) ygn = polyval(p,xgn); p = 0.0033 -0.0207 -0.1523 2.4176 La sintaxis más compleja de polyfit centra y normaliza las abscisas, proporcionando el polinomio con coeficientes más equilibrados. [p,s,mu] = polyfit(x,y,3) xgu = (xg-mu(1))/mu(2); ygu = polyval(p,xgu); p = 0.1199 -0.2272 -0.5051 2.4176 s = R: [4x4 double] df: 7 normr: 0.2960 mu = 1.0e+003 * 1.9960 0.0033 Los valores de los tres ajustes son suficientemente aproximados para no ser gráficamente distinguibles. La diferencia entre los dos últimos es del orden de 10 y la de éstos con el primero, del orden de 10 15 − . 8 − plot(x,y,'*',xg,yg,xg,ygn,'+',xg,ygu,'o') max(abs(ygn-yg)) max(abs(ygn-ygu)) ans = 6.8915e-008 ans = 2.8866e-015 1990 1992 1994 1996 1998 2000 2002 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 Figura 5 Ajustes de polyfit con distintas abscisas Problema 2 a) Ajuste polinómico Almacenamos los datos en sendos vectores h = [7 10 15 21 27 34 39 43 47 51 55 59 61]; r = [556 369 191 75 26.2 9.9 4.4 2.3 1.4 0.8 0.5 0.33 0.25]; y probamos con un polinomio de tercer grado p = polyfit(h,r,3) p = -0.0131 1.7017 -70.8466 941.9188 Para hallar el índice de determinación evaluamos el polinomio y comparamos con los datos: rp =polyval(p,h); rm = mean(r); indice=(norm(rp-rm)/norm(r-rm))^2 indice = 0.9886 Aumentamos el grado y comprobamos que el polinomio pedido es el de grado 4. p = polyfit(h,r,4) rp =polyval(p,h); rm = mean(r); indice=(norm(rp-rm)/norm(r-rm))^2 p = 1.0e+003 * 0.0000 -0.0001 0.0039 -0.1097 1.1436 indice = 0.9990 El error cuadrático será norm(rp-r)^2 ans = 359.1253 b) Evaluamos el polinomio para varias alturas y lo representamos junto a los datos hg = 5:5:65; rg = polyval(p,hg); plot(h,r,'*',h,rp,'o',hg,rg) 0 10 20 30 40 50 60 70 -100 0 100 200 300 400 500 600 700 Figura 6: Ajuste polinómico El ajuste no representa adecuadamente los datos porque para altura grande toma valores negativos y finalmente se hace creciente. c) Proponemos un modelo del tipo B Ah+ = e ρ que se linealiza tomando logaritmos: B Ah + = ρ log Realizamos los cálculos con MATLAB ajustando un polinomio de grado 1 al logaritmo de la presión: lr=log(r); p=polyfit(h,lr,1) p = -0.1459 7.3088 Evaluamos el polinomio en h para obtener el error cuadrático ly=polyval(p,h); y=exp(ly); norm(r-y)^2 ans = 1.3918e+003 El error cuadrático es mayor que el del ajuste polinómico, pero ahora se obtiene una función positiva decreciente, con menor error para valores grandes de h, como se aprecia en el gráfico siguiente. lyg=polyval(p,hg); yg=exp(lyg); plot(h,r,'*',hg,yg) 0 10 20 30 40 50 60 70 0 100 200 300 400 500 600 700 800 Figura 7: Ajuste exponencial Problema 3 Introducimos los datos en columna: t = [6; 8; 10; 12; 14; 16; 18; 20]; y = [7; 9; 12; 18; 21; 19; 15; 10]; Normalizamos las abscisas: m = mean(t); s = std(t); x = (t-m)/s; a) La matriz del sistema sobredeterminado es A = [x.^4 x.^3 x.^2 x x.^0] A = 4.1684 -2.9173 2.0417 -1.4289 1.0000 1.0851 -1.0631 1.0417 -1.0206 1.0000 0.1406 -0.2296 0.3750 -0.6124 1.0000 0.0017 -0.0085 0.0417 -0.2041 1.0000 0.0017 0.0085 0.0417 0.2041 1.0000 0.1406 0.2296 0.3750 0.6124 1.0000 1.0851 1.0631 1.0417 1.0206 1.0000 4.1684 2.9173 2.0417 1.4289 1.0000 La columna de términos independientes es el vector de temperaturas. Formamos las ecuaciones normales: N = A'*A; c = A'*y; Resolviéndolas obtenemos los coeficientes del polinomio buscado: p = N\c p = 2.2159 -2.4866 -9.9006 6.0206 19.5488 Representémoslo gráficamente: xg = (tg-m)/s; yg = polyval(p,xg); plot(t,y,'*',tg,yg) 6 8 10 12 14 16 18 20 6 8 10 12 14 16 18 20 22 b) El algoritmo de Gram-Schmidt modificado se traduce en la siguiente función de MATLAB function [Q,R]=miqr(A) % % Factorización de la matriz a en q ortogonal % y r triangular superior invertible % Las columnas de a deben ser independientes Q = [];R = []; [m,n] = size(A); for j = 1:n R(j,j) = norm(A(:,j)); Q(:,j) = A(:,j)/R(j,j); for k = j+1:n R(j,k) = dot(A(:,k),Q(:,j)); A(:,k) = A(:,k)-R(j,k)*Q(:,j); end end Esta función descompone A en los factores Q R Q = 0.6839 -0.6626 -0.1632 0.1957 0.0423 0.1780 -0.2415 0.5794 -0.4304 -0.1946 0.0231 -0.0522 0.3676 -0.4863 0.2398 0.0003 -0.0019 0.0497 -0.2001 0.6347 0.0003 0.0019 0.0497 0.2001 0.6347 0.0231 0.0522 0.3676 0.4863 0.2398 0.1780 0.2415 0.5794 0.4304 -0.1946 0.6839 0.6626 -0.1632 -0.1957 0.0423 R = 6.0947 0 3.1810 0.0000 1.7707 0 4.4031 0 2.4509 0 0 0 0.8204 0 1.6670 0 0 0 0.9965 -0.0000 0 0 0 0 1.4443 La solución mínimo cuadrática del sistema sobredeterminado Ax se obtiene resolviendo el sistema triangular b = b Q x R T = . pb = R\(Q'*y) pb = 2.2159 -2.4866 -9.9006 6.0206 19.5488 c) En lugar de Gram-Schmidt, factorizamos A por el algoritmo qr de MATLAB A = [x.^4 x.^3 x.^2 x x.^0]; [Q,R] = qr(A,0) Q = -0.6839 -0.6626 0.1632 0.1957 -0.0423 -0.1780 -0.2415 -0.5794 -0.4304 0.1946 -0.0231 -0.0522 -0.3676 -0.4863 -0.2398 -0.0003 -0.0019 -0.0497 -0.2001 -0.6347 -0.0003 0.0019 -0.0497 0.2001 -0.6347 -0.0231 0.0522 -0.3676 0.4863 -0.2398 -0.1780 0.2415 -0.5794 0.4304 0.1946 -0.6839 0.6626 0.1632 -0.1957 -0.0423 R = -6.0947 0 -3.1810 0 -1.7707 0 4.4031 -0.0000 2.4509 0.0000 0 0 -0.8204 0 -1.6670 0 0 0 0.9965 0.0000 0 0 0 0 -1.4443 y la solución se obtiene igual pc = R\(Q'*y) pc = 2.2159 -2.4866 -9.9006 6.0206 19.5488 d) El polinomio que resulta resolviendo el sistema sobredeterminado es pd = A\y pd = 2.2159 -2.4866 -9.9006 6.0206 19.5488 e) Obtenemos ahora el polinomio directamente con polyfit pe = polyfit(x,y,4) pe = 2.2159 -2.4866 -9.9006 6.0206 19.5488 Comprobamos que, con la precisión mostrada, el resultado es siempre el mismo. Los apartados c) y e) dan exactamente el mismo resultado, pues polyfit aplica qr a la matriz del sistema. Las diferencias en valores del polinomio entre los distintos apartados son del orden de 10 −14 . Problema 4 Determinamos M y N resolviendo por mínimos cuadrados el sistema obtenido al sustituir cada par de datos en la ecuación ). cos( ) sin( t N t M y ω ω + = Efectuamos los cálculos con MATLAB. Almacenamos los datos en columna: t=(0:1.5:6)'; y=[-0.0713 -2.1641 0.8403 2.2658 -0.5283]'; Construimos la matriz del sistema y resolvemos las ecuaciones normales: A=[sin(t) cos(t)]; N=A'*A; c=A'*y; x=N\c x = -2.0552 -0.7831 Deshacemos el cambio de variables para obtener el módulo y la fase de la señal: P Q Q P F = + = ) tan( ; 2 2 ϕ F = norm(x) fi = atan2(x(2),x(1)) F = 2.1994 fi = -2.7776 0 1 2 3 4 5 6 7 -3 -2 -1 0 1 2 3 Evaluamos el resultado en los datos y calculamos el error: yp = A*x; E2 = norm(y-yp)^2 E2 = 0.7675 Para hacer el gráfico, evaluamos el ajuste en un rango más detallado: tg = linspace(0,2*pi)'; yg = F*sin(tg+fi); plot(t,y,'*',t,yp,'+',tg,yg) 0 1 2 3 4 5 6 7 -3 -2 -1 0 1 2 3 Problema 5 a) Editamos unos vectores columna con los datos: x = (-1:0.2:1)'; y = [4 4 11 10 15 18 16 8 9 2 3]'; Invirtiendo ambos términos se obtiene un modelo lineal: y b ax / 1 2 = + El sistema sobredeterminado tiene matriz A y términos independientes 1/y. A=[x.^2 x.^0]; c=1./y; Lo resolvemos directamente con MATLAB: p = A\c p = 0.2908 0.0605 Hallamos el error cuadrático en términos de los datos originales zp = A*p; E2= norm(y-1./zp)^2 E2 = 49.0025 Representamos gráficamente el ajuste: xg = linspace(-1,1); zg = 1./(p(1)*xg.^2+p(2)); plot(x,y,'*',xg,zg) b) Linealizamos el modelo tomando logaritmos 2 log log ax K y − = Resolvemos las ecuaciones normales: A=[x.^0 -x.^2]; c=log(y); p = A\c p = 2.6840 1.7298 Hallamos el error cuadrático en términos de los datos originales, observando que es ligenrmente superior al del modelo anterior. zp = A*p; E2= norm(y-exp(zp))^2 E2 = 51.4532 Representamos gráficamente el ajuste: xg = linspace(-1,1); zg = exp(p(1)-p(2)*xg.^2); plot(x,y,'*',xg,zg) file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labora...20Matematicas/Practica%2014%20-%20MinimoCuadratica/practica%2014.txt Recta de Regresión ------------------ >> x = (1988:1995)'; >> y = [28.1 30 32.3 34.6 35.3 36.4 37.5 38.5]'; >> bar(x,y) >> N = [sum(x.^2) sum(x); sum(x) length(x)]; >> c = [sum(x.*y); sum(y)]; >> p = N\c p = 1.0e+003 * 0.0015 --> la pendiente -2.8892 --> corte con eje y -- Representacion Gráfica: -- >> x_graf = linspace(1988, 1995); >> y_graf = polyval(p,x_graf); >> plot(x,y,'.',x_graf,y_graf) -- Error Cuadrático: -- >> yp = polyval(p,x); >> E2 = norm(y-yp)^2 E2 = 3.4554 (NOTA: %norm hace la raiz de la suma de los cuadrados NORM(V,P) = sum(abs(V).^P)^(1/P). NORM(V) = norm(V,2). ) -- Jiustificacion utilizando la premultiplicacion por la traspuesta: -- >> A = [x x.^0] A = 1988 1 1989 1 1990 1 file:///E|/Documentos/Estudios/Documentacion%20Asignat...Practica%2014%20-%20MinimoCuadratica/practica%2014.txt (1 of 5) [09/03/2008 13:49:33] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labora...20Matematicas/Practica%2014%20-%20MinimoCuadratica/practica%2014.txt 1991 1 1992 1 1993 1 1994 1 1995 1 >> N = A'*A N = 31728620 15932 15932 8 >> c=A'*y c = 1.0e+005 * 5.4314 0.0027 >> p = N\c Ajuste con polinomio de mayor grado: ------------------------------------ >> A = [x.^2 x x.^0]; >> N = A'*A; >> c = A'*y; >> hold on >> p = N\c; >> y_graf = polyval(p,x_graf); >> plot(x,y,'.',x_graf,y_graf) -- Error cuadrático: -- >> yp = polyval(p,x); E2 = norm(y-yp)^2 E2 = 0.6005 Es un error cuadrático bastante menor -- Reduccion del condicionamiento -- file:///E|/Documentos/Estudios/Documentacion%20Asignat...Practica%2014%20-%20MinimoCuadratica/practica%2014.txt (2 of 5) [09/03/2008 13:49:33] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labora...20Matematicas/Practica%2014%20-%20MinimoCuadratica/practica%2014.txt >> xn = x - mean(x) xn = -3.5000 -2.5000 -1.5000 -0.5000 0.5000 1.5000 2.5000 3.5000 >> A = [xn.^2 xn xn.^0]; >> N = A'*A; >> c = A'*y; >> p = N\c; >> y_graf = polyval(p,x_graf-mean(x)); >> plot(x,y,'.',x_graf,y_graf,'g') -- Mayor grado -- >> A = [xn.^3 xn.^2 xn xn.^0]; >> c = A'*y; >> N = A'*A; >> p = N\c; >> y_graf = polyval(p,x_graf-mean(x)); >> plot(x,y,'.',x_graf,y_graf,'g') >> yp = polyval(p,x); -- Error cuadratico -- >> yp = polyval(p,xn); >> E2 = norm(y-yp)^2 E2 = 0.5238 -- Indice de determinacion -- >> I=norm((yp-mean(y))/norm(y-mean(y))).^2 I = 0.9944 file:///E|/Documentos/Estudios/Documentacion%20Asignat...Practica%2014%20-%20MinimoCuadratica/practica%2014.txt (3 of 5) [09/03/2008 13:49:33] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labora...20Matematicas/Practica%2014%20-%20MinimoCuadratica/practica%2014.txt --- Factorizacion QR -- [Q,R] = qr(A) >> p = R\(Q'*y) p = 0.0114 -0.1304 1.3627 34.7719 % Utilizando la 'magnificiencia' de Matlab xD >> A\y ans = 0.0114 -0.1304 1.3627 34.7719 y = [11.689 29.783 54.712 108.451 180.296 257.250 411.930 928.955]' -------------------------------- Linealizacion de una exponencial -------------------------------- >> y_exp = [11.689 29.783 54.712 108.451 180.296 257.250 411.930 928.955]'; >> x_exp = [1988:1995]'; %Linealizacion y = Ke^(a*t) --> log y = log K + a*t >> y = log(y_exp); >> t = x_exp; >> A = [t t.^0]; >> N = A'*A; >> c=A'*y; >> p = N\c; % Comprobacion de que lo lineal esta bien file:///E|/Documentos/Estudios/Documentacion%20Asignat...Practica%2014%20-%20MinimoCuadratica/practica%2014.txt (4 of 5) [09/03/2008 13:49:33] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labora...20Matematicas/Practica%2014%20-%20MinimoCuadratica/practica%2014.txt >> x_graf = linspace(1988,1995); >> plot(t,y,'.',x_graf,polyval(p,x_graf)) % 'Deshacer el cambio' >> x_graf = linspace(1988,1995); >> y_graf = exp(polyval(p,x_graf)); >> plot(x_exp,y_exp,'.',x_graf,y_graf) ------ Estudiando... ------- ---- Ejemplo ---- >> x = (1988:1995)'; >> y = [28.1 30 32.3 34.6 35.3 36.4 37.5 38.5]'; bar(x,y) >> bar(x,y) >> A = [x.^2 x x.^0]; >> N = A'*A; >> c = A'*y; >> sol = N\c >> xg = linspace(1988,1995); >> yg = polyval(sol, linspace(1988,1995)); >> plot(linspace(1988,1995), yg) file:///E|/Documentos/Estudios/Documentacion%20Asignat...Practica%2014%20-%20MinimoCuadratica/practica%2014.txt (5 of 5) [09/03/2008 13:49:34] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labora...actica%2015%20-%20Funcional%20minimocuadratica/practica%2015.txt.txt Aproximacion funcional mínimo cuadrática ---------------------------------------- -- Los puntos serviran tanto para plot como para integrar con trapz >> h = 0.001; >> x = 0:h:1; >> y = sin(pi*x.^2); -- Dibujamos la funcion >> plot(x,y) -- Creamos el sistema >> N = hilb(3); %matriz coeficientes >> b(1) = trapz(x,y); >> b(2) = trapz(x,y.*x); >> b(3) = trapz(x,y.*x.^2); >> b = b(:); %vector terminos independientes -- Resolvemos el sistema >> c = N\b c = -0.3552 3.5790 -2.7884 el polinomio se ha obtenido de menor a mayor grado, pero matlab funciona al reves. Hay que darle la vuelta. >> p = flipud(c); -- Dibujamos la aproximacion >> z = polyval(p,x); >> plot(x,y,':',x,z) -- Convendria aumentar el grado del polinomio El problema de este método es que los calculos hechos no tienen file:///E|/Documentos/Estudios/Documentacion%20Asignatu...0-%20Funcional%20minimocuadratica/practica%2015.txt.txt (1 of 2) [09/03/2008 13:49:34] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labora...actica%2015%20-%20Funcional%20minimocuadratica/practica%2015.txt.txt ninguna utilidad. Hay que recalcularlo todo. >> N = hilb(4); >> b(4,1) = trapz(x,y.*x.^3); >> c = N\b c = 0.0811 -1.6560 10.2993 -8.7251 >> p = flipud(c); >> z = polyval(p,x); >> plot(x,y,':',x,z) -- Condicionamiento >> cond(N) ans = 1.5514e+004 --------------------------------- Funcion desarrollo en serie de Legendre -------------------------------------- file:///E|/Documentos/Estudios/Documentacion%20Asignatu...0-%20Funcional%20minimocuadratica/practica%2015.txt.txt (2 of 2) [09/03/2008 13:49:34] ______________________________________________________________________ 1 15. Aproximación funcional mínimo- cuadrática. Polinomios ortogonales En el tema anterior obteníamos el polinomio p(x) de cierto grado que mejor aproximaba un número finito de puntos en el sentido de hacer mínimo el error cuadrático. En este tema, el objetivo es aproximar, no un número finito de puntos, sino toda una función en un intervalo mediante una combinación lineal de funciones base. Para ello usaremos también un producto escalar, pero ahora definido en un espacio infinito dimensional, que contiene en particular a las funciones continuas en el intervalo de trabajo. Tal producto se define mediante una integral y su cálculo práctico es más costoso que el de un producto escalar en dimensión finita. Conviene, por lo tanto, trabajar con bases ortonormales para efectuar el mínimo número posible de productos escalares. Analizaremos varias de estas bases ortonormales, adecuadas cada una de ellas para aproximar distintos tipos de funciones y que tienen importantes aplicaciones, además de la aproximación propiamente dicha, como son la integración numérica y la resolución de ecuaciones en derivadas parciales. Planteamos en primer lugar el problema de la aproximación funcional mínimo cuadrática y lo interpretamos como la minimización de una norma procedente de un producto escalar. La solución viene dada por una proyección ortogonal respecto a dicho producto escalar. El cálculo de la proyección ortogonal desemboca en la formulación de las ecuaciones normales. En la práctica, la obtención de estas ecuaciones resulta muy costosa, y lo que es peor, el sistema lineal resultante suele ser mal condicionado. Estos inconvenientes aconsejan la utilización de bases ortonormales en los subespacios de las funciones aproximantes. La aproximación polinómica se puede realizar considerando distintos sistemas de polinomios ortogonales, obtenidos al aplicar el método de ortogonalización de Gram- Schmidt a los polinomios básicos 1, x, x 2 , ... , con respecto a distintos productos escalares. Los polinomios ortogonales más utilizados en intervalos acotados son los de Legendre y los de Chebyshef. 15.1. Aproximación Funcional Mínimo-Cuadrática Dada una función f real o compleja, definida en un intervalo [a, b], se trata de aproximarla mediante una función g combinación lineal de funciones sencillas, llamadas funciones base: ) ( ) ( ) ( ) ( 2 2 1 1 x g c x g c x g c x g n n + + + = L Aproximación funcional mínimo-cuadrática 2 Las funciones base g i son dadas y los coeficientes c i se determinan de modo que se minimice la distancia entre f y g. En este tema consideramos distancias que provienen de un producto escalar. Veamos pues, en primer lugar, cómo se define el producto escalar en un espacio de funciones. Supongamos que las funciones toman valores reales. Se define el producto escalar mediante la integral ∫ = > < b a dx x g x f x w g f ) ( ) ( ) ( , donde w(x) es una función no negativa en el mismo intervalo, denominada peso. Si las funciones toman valores complejos, para que el producto escalar té bien definido, hemos de conjugar uno de los factores ∫ = > < b a dx x g x f x w g f ) ( ) ( ) ( , Distintas elecciones del peso dan lugar a diferentes productos escalares. Una elección sencilla consiste en considerar un peso constante. A partir del producto escalar se define la norma ∫ ∫ = = > =< b a b a dx x f x w dx x f x f x w f f f 2 2 ) ( ) ( ) ( ) ( ) ( , y a partir de la norma, la distancia entre f y g: . ) , d( g f g f − = Volviendo a nuestro problema, tratamos de hallar la función g, combinación lineal de las funciones base, a menor distancia de f. Por las propiedades del espacio euclídeo, g es la proyección ortogonal de f sobre el subespacio engendrado por las funciones base. Para obtener dicha proyección, descomponemos f en dos sumandos: uno, combinación lineal de las funciones base, y el otro, ortogonal a las mismas: h g c g c g c h g f n n + + + + = + = L 2 2 1 1 Al imponer la ortogonalidad de h a las funciones base, se obtiene el sistema de ecuaciones normales, cuya solución proporciona los coeficientes de la proyección buscada. > < + + > < + > < = > < i n n i i i g g c g g c g g c g f , , , , 2 2 1 1 L donde hemos omitido el término que se anula . , > < i g h Ejemplo 1 Aproximemos la función ) sin( ) ( 2 x x f π = en el intervalo [0, 1] mediante un polinomio p(x) de grado 2 que minimice el error cuadrático ∫ − = − = 1 0 2 2 2 ) ( ) ( dx x p x f p f E Descomponemos f(x) en suma de un polinomio de grado 2, p(x) y una función, q(x). ) ( ) ( 2 2 1 0 x q x c x c c x f + + + = Exigimos que q sea ortogonal a 1, x y x 2 : Aproximación Funcional Mínimo-Cuadrática 3 ¦ ¦ ) ¦ ¦ ` ¹ > < + > < + > < = > < > < + > < + > < = > < > < + > < + > < = > < 2 2 2 2 1 2 0 2 2 2 1 0 2 2 1 0 , , , 1 ), ( , , , 1 ), ( 1 , 1 , 1 , 1 1 ), ( x x c x x c x c x x f x x c x x c x c x x f x c x c c x f Los elementos de la matriz del sistema se pueden calcular analíticamente 1 1 , 1 0 1 1 1 1 − + = >= =< ∫ − − − − j i dx x x x x n j i j i j i resultando así la llamada matriz de Hilbert | | | | . | \ | = 5 1 4 1 3 1 4 1 3 1 2 1 3 1 2 1 1 N Los términos independientes se obtienen analíticamente en este ejemplo con un poco más de esfuerzo, pero en general hay que aplicar una fórmula de cuadratura numérica. Para no tener que editar un fichero de función por cada integrando, utilizamos un método de integración que acepte como parámetro de entrada los valores del integrando en los nodos, en lugar de la función que evalúa el integrando. Por ejemplo, podemos aplicar la función trapz de MATLAB o editar un programa como el siguiente que aplica el método de Simpson. function s = simpson(x,y) n = length(x); h = x(2)-x(1); % Nodos equiespaciados s = h/3*(y(1) + y(n) + 4*sum(y(2:2:n-1)) + 2*sum(y(3:2:n-2))); Determinemos el polinomio mínimo-cuadrático operando con MATLAB. Tomamos bastantes nodos para que la estimación de la integral por trapecios sea suficientemente 0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1 Aproximación funcional mínimo-cuadrática 4 precisa (en caso de duda, deberíamos usar trapecios iterativo u otro método de mayor orden). Representamos la función a aproximar. h = 0.001; x = 0:h:1; y = sin(pi*x.^2); plot(x,y) Construimos y resolvemos el sistema de ecuaciones normales. La matriz, directamente y los términos independientes evaluando las integrales. N = hilb(3); b(1) = trapz(x,y); b(2) = trapz(x,y.*x); b(3) = trapz(x,y.*x.^2); b = b(:) c = N\b b = 0.5049 0.3183 0.2187 c = -0.3552 3.5790 -2.7884 Ordenamos los coeficientes del polinomio de mayor a menor grado y lo representamos gráficamente. p = flipud(c); z = polyval(p,x); plot(x,y,x,z) 0 0.2 0.4 0.6 0.8 1 -0.5 0 0.5 1 Estimamos el error cuadrático integrando el cuadrado de la diferencia entre la función y la aproximación. E2 = trapz(x,(y-z).^2) Aproximación Funcional Mínimo-Cuadrática 5 E2 = 0.0278 Ejercicio 1 Dibuja el polinomio mínimo cuadrático de tercer grado que aproxima la función dada. Ejemplo 2 Aproxima la función x x f / 1 ) ( = por un polinomio de cuarto grado, mínimo- cuadrático con respecto a la norma integral en el intervalo [1,10]. Procedemos como en el ejemplo anterior, pero realizando las integrales en el intervalo [1,10]. La matriz del sistema tiene elementos 1 1 10 , 1 10 1 1 1 1 1 + + − = >= =< − + − − − − ∫ j i dx x x x x n j i j i j i j i y los términos independientes son 1 1 10 1 ), ( 1 10 1 1 1 + + − = >= =< − − − ∫ j i dx x x x x f b i i i i para y los términos independientes son Efectuamos los cálculos con MATLAB. Podemos obtener la matriz del sistema mediante dos bucles anidados: for i=1:5 for j=1:5 k=i+j-1; N(i,j)=(10^k-1)/k; end end Una alternativa más eficiente por no usar bucles, sugerida por el código de la función hilb es la siguiente: J = 1:5; J = ones(5,1)*J; I = J'; K = I+J-1; N = (10.^K-1)./K; Aplicando trapz a una matriz cuyas columnas son los sucesivos integrandos, obtenemos de una vez los términos independientes: h = 0.01; x = (1:h:10)'; y = 1./x; Y = [y, y.*x, y.*x.^2, y.*x.^3, y.*x.^4]; b = trapz(x,Y)' b = Aproximación funcional mínimo-cuadrática 6 1.0e+003 * 0.0023 0.0090 0.0495 0.3330 2.4998 Resolvemos el sistema para obtener el polinomio mínimo-cuadrático y lo representamos junto a la función a aproximar. c = N\b p = flipud(c); z = polyval(p,x); plot(x,y,x,z) c = 1.5641 -0.8302 0.1920 -0.0199 0.0008 1 2 3 4 5 6 7 8 9 10 0 0.2 0.4 0.6 0.8 1 El error cuadrático es: E2 = trapz(x,(y-z).^2) E2 = 0.0019 La condición del sistema de ecuaciones normales es elevada, lo que limita en la práctica el grado del polinomio de aproximación. cond(N) ans = 6.8266e+009 Aproximación Funcional Mínimo-Cuadrática 7 15.2. Bases ortogonales En los ejemplos anteriores, el sistema de ecuaciones normales del que se obtiene el polinomio mínimo-cuadrático es mal condicionado. Esto se debe a que las funciones 1, x, x 2 , ..., son "poco" independientes en el intervalo [0, 1], como sugiere la semejanza de sus gráficas. Aproximando en otros intervalos o respecto a otras funciones, la matriz no tiene una expresión analítica tan sencilla, obteniéndose mediante el cálculo aproximado de n(n+1)/2 integrales (es simétrica), lo que supone un coste considerable. Para evitar estos problemas, recurrimos a una base ortogonal { } n g g g , , , 2 1 K del subespacio sobre el que proyectamos. De este modo, se asegura, por una parte, la "máxima" independencia posible entre las funciones base y, por otra, se reduce el número de integrales a calcular (la matriz es diagonal, pues 0 , = j k g g , para j i ≠ ) y se mejora la estabilidad numérica. Multiplicando escalarmente la descomposición h g c g c g c h g f n n + + + + = + = L 2 2 1 1 por g j se obtienen unas ecuaciones normales de solución inmediata , , , > < = > < k k k k g g c g f para k = 1, 2, …, n. Cada sumando k k g c es la proyección ortogonal de f sobre la dirección g k y al ser estas direcciones ortogonales, la proyección ortogonal g sobre el subespacio generado es la suma de estas proyecciones. Debido también a la ortogonalidad, el error cuadrático se expresa sencillamente como suma de los cuadrados de las normas de las proyecciones en la dirección de los vectores básicos. 2 2 2 2 2 1 1 2 2 2 n n g c g c g c g f g f + + + = − = − L El añadir un elemento más a la base ortogonal supone el mínimo trabajo, pues las operaciones previas se aprovechan completamente. Así, por ejemplo, si tenemos un sistema ortogonal de polinomios de grado creciente, podemos obtener sucesivamente la mejor aproximación de cada grado. En el caso de base no ortogonal, al cambiar de grado, cambia completamente la solución de las ecuaciones normales. Por estas razones, a partir de ahora, trabajaremos siempre con bases ortogonales para obtener aproximaciones funcionales mínimo cuadráticas. 15.3. Polinomios de Legendre Consideremos el espacio de las funciones continuas en el intervalo [−1, 1] con el producto escalar definido por la integral ∫ = > < b a dx x g x f g f ) ( ) ( , Tratamos de obtener una base ortogonal del subespacio de los polinomios de grado menor o igual que n. Para ello, podemos ortogonalizar sucesivamente los polinomios 1, x, x 2 , ... x n , con respecto a dicho producto escalar. Los polinomios ortogonales resultantes, salvo un factor constante, se denominan polinomios de Legendre. Los primeros polinomios son: Aproximación funcional mínimo-cuadrática 8 8 3 30 35 ) ( 2 3 5 ) ( 2 1 3 ) ( ) ( 1 ) ( 2 4 4 3 3 2 2 1 0 + − = − = − = = = x x x P x x x P x x P x x P x P Los polinomios de Legendre verifican la siguiente relación recursiva, que se utiliza para generarlos. ( ) ) 1 ( ) ( ) ( ) 1 2 ( ) ( ) ( 1 ) ( 1 1 1 0 + − + = = = − + k x kP x xP k x P x x P x P k k k para k = 1, 2, … Figura 1: Polinomios de Legendre en [−1,1] Aplicando formalmente la recursión, obtenemos los coeficientes del polinomio de Legendre de cualquier grado. Si ejecutas el programa siguiente con format rat, puedes comprobar el resultado tal como aparece en las tablas. function p = polegend(n) r = 1 % p0(x) = 1 q = [1 0] % p1(x) = x for k = 1 : n-1 % Polinomio de grado k+1 p=((2*k+1)*[q 0]- k*[0 0 r])/(k+1) r = q; q = p; end -1 -0.5 0 0.5 1 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 P 4 P 3 P 5 P 0 P 1 P 2 Polinomios de Legendre 9 Ejemplo 3 Aproximemos la función de Runge 2 25 1 1 ) ( x x f + = en [−1, 1] por un polinomio mínimo-cuadrático de grado 6, utilizando los polinomios de Legendre P 0 , P 1 , P 2 , …, P 6 . La aproximación pedida es 6 6 2 2 1 1 0 0 P c P c P c P c g + + + + + = L donde los coeficientes c k se obtienen de las expresiones 1 2 2 25 1 ) ( )) ( ( ) ( ) ( , , 1 1 5 1 1 2 1 1 + + = = > < > < = ∫ ∫ ∫ − − − k dx x x P dx x P dx x P x f P P P f c k k k k k k k El denominador 1 2 2 + k es el cuadrado de la norma del polinomio P k . Para efectuar los cálculos editamos un programa de MATLAB que trabaja con los valores de los polinomios de Legendre, en lugar de su expresión analítica. El programa obtiene un polinomio ortogonal en cada paso utilizando la relación de recurrencia, proyecta al mismo tiempo la función a aproximar sobre dicho polinomio y acumula las proyecciones obteniendo la mejor aproximación para cada grado. -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 -0.2 0 0.2 0.4 0.6 0.8 1 1.2 function c = serielegnorm(f,n) % Aproximación de f por polinomios de Legendre de grado n en [-1,1] m = 100*(n+1); grado 6 grado 4 grado 2 grado 0 Aproximación funcional mínimo-cuadrática 10 x = linspace(-1,1,m)'; y = feval(f,x); plot(x,y,':'), pause r = ones(size(x)); % P0 c(1) = trapz(x,y.*r)/2; % Coeficiente de P0 z = c(1)*r; % Aproximación de grado 0 Z = z; plot(x,y,':',x,Z), pause q = x; % P1 c(2) = trapz(x,y.*q)*3/2; % Coeficiente de P1 z = z+c(2)*q; % Aproximación de grado 1 Z = [Z, z]; plot(x,y,':',x,Z), pause for k = 1:n-1 p = ((2*k+1)*x.*q-k*r)/(k+1); % Pk+1 c(k+2) = trapz(x,y.*p)*(2*k+3)/2; % Coeficiente de Pk+1 z = z+c(k+2)*p; % Aproximación de grado k+1 Z = [Z, z]; plot(x,y,':',x,Z), pause r = q; q = p; % Términos de la recursión end 15.4. Polinomios de Chebyshev Las funciones 1, cos t, cos 2t, ..., cos nt forman un sistema ortogonal con respecto al producto escalar definido en el intervalo [0, π]. ¦ ¦ ¹ ¦ ¦ ´ ¦ > = = = ≠ = − + + = ∫ ∫ 0 2 0 0 2 ) cos( ) cos( ) cos( ) cos( 0 0 k j si k j si k j si dt t k j t k j dt kt jt π π π π Si hacemos el cambio de variable x = cos(t), mediante relaciones trigonométricas podemos expresar estas funciones como polinomios en x: M x x t t t t t t t x T x t t t t t t x T x t x T x T − = − = − = = − = − = − − = − = = = = = 3 3 3 2 2 2 2 2 2 2 1 0 4 ) cos( 3 ) ( cos 4 ) sin( ) 2 sin( ) cos( ) 2 cos( ) 3 cos( ) ( 1 2 1 ) ( cos 2 )) ( cos 1 ( ) ( cos ) ( sin ) ( cos ) 2 cos( ) ( ) cos( ) ( 1 ) ( En general podemos poner ( ) ) arccos( cos ) ( x n x T n = teniendo el cuenta que en realidad es un polinomio, llamado polinomio de Chebyshef de grado n. Tras el cambio de variable, la ortogonalidad de los cosenos se convierte en ortogonalidad entre polinomios Polinomios de Chebyshev 11 ¦ ¦ ¹ ¦ ¦ ´ ¦ > = = = ≠ = − = − − = = = ∫ ∫ − 0 2 0 0 1 ) ( ) ( 1 1 cos ) cos( ) cos( 1 1 2 0 2 k j si k j si k j si dx x x T x T x dt x t dt kt jt k j π π π es decir, que los polinomios de Chebyshef son ortogonales respecto a un producto escalar integral con peso 2 1 1 x − en [−1,1] ∫ − − >= < 1 1 2 1 ) ( ) ( , dx x x g x f g f Alternativamente, estos polinomios se obtienen ortogonalizando las funciones 1, x, x 2 , ..., con respecto a este producto escalar. Como en el caso de Legendre, los polinomios de Chebyshef cumplen una relación de recurrencia que es la vía más eficaz para su obtención. ) ( ) ( 2 ) ( ) ( 1 ) ( 1 1 1 0 x T x xT x T x x T x T k k k − + − = = = para k = 1, 2, … -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 En el gráfico apreciamos la propiedad fundamental de los polinomios de Chebyshef: que toman alternativamente valores máximos y mínimos iguales a +1 y –1 entre cada par de raíces consecutivas. Dichos valores se alcanzan en el intervalo [−1, 1], en concreto, el polinomio de grado n tiene extremos en los puntos T 0 T 3 T 4 T 5 T 1 T 2 Aproximación funcional mínimo-cuadrática 12 . , , 1 , 0 , cos n k n k x k K = = π Otra propiedad interesante, que comparten con otros polinomios ortogonales como los de Legendre, es que el polinomio de grado n tiene n raíces distintas en el intervalo [−1, 1]. Las raíces se obtienen fácilmente de su definición trigonométrica: el polinomio de grado n se anula en . , , 2 , 1 , 2 ) 1 2 ( cos n k n k r k K = − = π Aproximando una función con respecto a la norma que genera los polinomios de Chebyshef, obtenemos el polinomio de determinado grado que menos se desvía en valor absoluto de la función dada en el intervalo [−1, 1]. Los coeficientes de la aproximación n n T c T c T c T c g + + + + + = L 2 2 1 1 0 0 se obtienen de las expresiones > < > < = k k k k T T T f c , , donde el producto escalar viene dado por la integral ∫ − − >= < 1 1 2 1 ) ( ) ( , dx x x g x f g f Aunque el integrando tiende a infinito en los extremos del intervalo, la integral existe si f es acotada. Como la evaluación numérica de integrales impropias es poco precisa, haremos el cambio de variable ) cos(t x = que evita la anulación del denominador. ∫ ∫ = − − = = = − >= < − π 0 2 1 1 2 )) (cos( )) (cos( 1 1 ) cos( 1 ) ( ) ( , dt t g t f x dt x t dx x x g x f g f Ejemplo 4 Aproximemos la función de Runge 2 25 1 1 ) ( x x f + = en [−1, 1] por un polinomio de grado 6, mínimo-cuadrático respecto a la norma asociada a los polinomios de Chebyshef. Utilizamos un programa análogo al caso de Legendre, modificando adecuadamente la recurrencia para generar los polinomios de Chebyshef y efectuando las integrales con el cambio de variable ) cos(t x = para evitar las singularidades del integrando. function c = seriechebnorm(f,n) % Aproximación de f por polinomios de Chebyshef de grado n en [-1,1] m = 100*(n+1); h = pi/m; t = (0:h:pi)'; % Nodos de integracion x = cos(t); % Cambio de variable y = feval(f,x); Polinomios de Chebyshev 13 plot(x,y,':'), pause r = ones(size(x)); % P0 c(1) = trapz(t,y)/pi; % Coeficiente de P0 z = c(1)*r; % Aproximación de grado 0 Z = z; plot(x,y,':',x,Z), pause q = x; % P1 c(2) = trapz(t,y.*q)*2/pi; % Coeficiente de P1 z = z+c(2)*q; % Aproximación de grado 1 Z = [Z, z]; plot(x,y,':',x,Z), pause for k = 1:n-1 p = 2*x.*q - r; % Pk+1 c(k+2) = trapz(t,y.*p)*2/pi; % Coeficiente de Pk+1 z = z+c(k+2)*p; % Aproximación de grado k+1 Z = [Z, z]; plot(x,y,':',x,Z), pause r = q; q = p; % Términos de la recursión end -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 -0.2 0 0.2 0.4 0.6 0.8 1 1.2 15.5. Problemas 15.5.1. Enunciados 1.- Aproxima la función x e x f = ) ( en el intervalo [0, 3] mediante un polinomio quinto grado. Halla el error cuadrático. Aproxímala ahora por el polinomio de Taylor del mismo grado. Halla el error cuadrático. Compara gráficamente los errores de ambas aproximaciones. grado 6 grado 4 grado 2 grado 0 Aproximación funcional mínimo-cuadrática 14 θ O Q P r R 2.- Halla a, b, c y d para que la integral dx dx cx bx a e x ∫ − + + + − 1 1 2 3 2 ) ( sea mínima. 3.- Aproxima x x f = ) ( en [−1, 1] por un polinomio de grado 4, utilizando polinomios de Legendre. 4.- Verifica la fórmula de Rodrigues para los primeros polinomios de Legendre: n n n n n x dx d n x P ) 1 ( ! 2 1 ) ( 2 − = 5.- El potencial en un punto P creado por una carga situada en el punto Q es inversamente proporcional a la distancia R entre ambos. Sitúa el punto P en (0,1) y el punto Q en una posición arbitraria de coordenadas polares (θ, r) a) Prueba que θ cos 2 1 2 2 r r R − + = Por tanto, el potencial en el punto P está determinado por la función rx r r f 2 1 1 ) ( 2 − + = donde x = cosθ. b) Comprueba que f es una función generatriz de los polinomios de Legendre, es decir, que éstos son los coeficientes de r n en el desarrollo de f en serie de potencias de r. 6.- Utilizando la relación n in i n i n e ) sin (cos sin cos θ θ θ θ θ + = + = y la definición de los polinomios de Chebyshef n n i n x T ) sin Re(cos cos ) ( θ θ θ + = = donde , cosθ = x demuestra la fórmula explícita de los mismos: k k n n k n x x k n x T ) 1 ( 2 ) ( 2 2 2 / 0 − | | . | \ | = − = ∑ 7.- Desarrollando cos(n±1)θ, demuestra la ley de recurrencia que verifican los polinomios de Chebyshef. 8.-Expresa el polinomio de Tchebyshev de grado n como producto de polinomios de grado 1. 9.- Expresa las funciones 1, x, x 2 , …, x 5 como combinación lineal de los polinomios de Chebyshef de grado no superior a 5. Dado un polinomio cualquiera de grado no superior a 5, explica cómo calcularías los coeficientes de su expresión como combinación lineal de los polinomios de Chebyshef. Problemas 15 10.- Aproxima x x f = ) ( en [−1, 1] por un polinomio de grado 4, respecto de la norma de Chebyshev. Compara el resultado con el del problema 3. 15.5.2. Soluciones 1.-Procediendo como en el Ejemplo 2, se obtiene el polinomio mínimo-cuadrático que es 5 4 3 2 0474 0 1455 0 5342 0 1796 0 1083 1 9915 0 x . x . x . x . x . . P(x) + − + + + = Gráficamente, este polinomio es indistinguible de la función exponencial. El error cuadrático es . 10 5360 2 5 − ⋅ . El polinomio de Taylor del mismo grado es 120 24 6 2 1 5 4 3 2 x x x x x P(x) + + + + + = El polinomio de Taylor se ajusta mucho mejor cerca del origen, pero tiene un error muy grande en la parte derecha del intervalo. Su error cuadrático es 0.6044, obviamente mayor que el del polinomio mínimo-cuadrático. Los errores puntuales de ambos ajustes se comparan en la gráfica adjunta. 0 0.5 1 1.5 2 2.5 3 -0.01 -0.005 0 0.005 0.01 Error min-cuad 0 0.5 1 1.5 2 2.5 3 -2 -1.5 -1 -0.5 0 Error Taylor 0 0.5 1 1.5 2 2.5 3 -0.2 -0.1 0 0.1 0.2 Min-cua vs. Taylor Aproximación funcional mínimo-cuadrática 16 2.- Los valores pedidos son los coeficientes del polinomio mínimo-cuadrático de tercer grado que ajusta la función exponencial en el intervalo [−1, 1]. Efectuando las integrales por trapecios con paso 0.001 se obtienen los valores a = 0.9963, b = 0.9979, c = 0.5367, d = 0.1762 y el valor mínimo de la integral, 2.2289e−005. 3.- El desarrollo de Legendre de la función x x f = ) ( en [−1, 1] es ). ( 1874 0 ) ( 6250 0 ) ( 5 0 4 2 0 x P . x P . x P . − + Como la función es par, sólo aparecen en el desarrollo polinomios pares. La figura muestra los sucesivos polinomios de aproximación. 4.- La fórmula de Rodrigues es n n n n n x dx d n x P ) 1 ( ! 2 1 ) ( 2 − = . Para n = 0, se obtiene trivialmente . 1 ) ( 0 = x P x x dx d x P = − = ) 1 ( 2 1 ) ( 2 1 2 1 2 3 ) 4 12 ( 8 1 ) 1 2 ( ! 2 2 1 ) ( 2 2 2 4 2 2 2 2 − = − = + − = x x x x dx d x P -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1 1.2 1.4 Soluciones 17 x x x x x x x dx d x P 2 3 2 5 ) 72 120 ( 48 1 ) 1 3 3 ( ! 3 2 1 ) ( 3 3 2 4 6 3 3 3 3 − = − = − + − = 8 3 8 30 8 35 ) 144 1440 1680 ( 24 16 1 ) 1 4 6 4 ( ! 4 2 1 ) ( 2 4 2 4 2 4 6 8 4 4 4 4 + − = + − ⋅ = = + − + − = x x x x x x x x dx d x P 5.- a) El cuadrado de la distancia de ) 0 , 1 ( P a ) sin , cos ( θ θ r r Q es 2 2 2 2 2 2 2 cos 2 1 ) sin (cos cos 2 1 ) sin ( ) cos 1 ( r r r r r r R + − = + + − = + − = θ θ θ θ θ θ b) Calculemos los coeficientes del desarrollo de Taylor de rx r r f 2 1 1 ) ( 2 − + = . ) ( 1 ) 0 ( 0 x P f = = ( ) ) ( ) 0 ( ; 2 1 2 2 2 ) ( 1 2 / 3 2 x P x f rx r x r r f = = ′ − + − − = ′ ( ) | | ( ) ( ) − − + | . | \ | − − + − + − = = ′ − + − − = ′ ′ − − − ) 2 2 ( 2 1 2 3 ) ( 2 1 2 1 ) ( ) ( 2 / 5 2 2 / 3 2 2 / 3 2 x r rx r x r rx r rx r x r r f ) ( ) 3 1 ( 2 1 ! 2 ) 0 ( 2 2 x P x f = − − = ′ ′ . 7.- Aplicando las fórmulas del ángulo suma, tenemos θ θ θ θ θ θ θ θ θ θ sin sin cos cos ) 1 cos( sin sin cos cos ) 1 cos( n n n n n n + = − − = + de donde podemos despejar θ θ θ θ ) 1 cos( cos cos 2 ) 1 cos( − − = + n n n Haciendo θ cos = x y teniendo en cuenta la definición de los polinomios de Chebyshev obtenemos la relación pedida. ) ( ) ( 2 ) ( 1 1 x T x xT x T n n n − + − = 9.- Los polinomios de Chebishev hasta el grado 5 son Aproximación funcional mínimo-cuadrática 18 x x x x T x x x T x x x T x x T x x T x T 5 20 16 ) ( 1 8 8 ) ( 3 4 ) ( 1 2 ) ( ) ( 1 ) ( 3 5 5 2 4 4 3 3 2 2 1 0 + − = + − = − = − = = = Construimos una matriz cuyas columnas sean los coeficientes de los polinomios de Chebyshev. La inversa de esta matriz proporcionará las expresiones pedidas. Efectuamos los cálculos con MATLAB. A = [ 1 0 0 0 0 0 0 1 0 0 0 0 -1 0 2 0 0 0 0 -3 0 4 0 0 1 0 -8 0 8 0 0 5 0 -20 0 16]'; La matriz inversa es B = inv(A) B = 1.0000 0 0.5000 0 0.3750 0 0 1.0000 0 0.7500 0 0.6250 0 0 0.5000 0 0.5000 0 0 0 0 0.2500 0 0.3125 0 0 0 0 0.1250 0 0 0 0 0 0 0.0625 Para expresar un polinomio cualquiera en función de polinomios de Chebyshev, basta multiplicar esta última matriz por los coeficientes del polinomio. Por ejemplo, la última columna expresa x 5 como 16 ) ( ) ( 5 ) ( 10 5 3 1 5 x T x T x T x + + = 10.- El desarrollo de Chebyshev de la función x x f = ) ( en [−1, 1] es ). ( 0849 0 ) ( 4244 0 ) ( 6366 0 4 2 0 x T . x T . x T . − + Soluciones 19 Como la función es par, sólo aparecen en el desarrollo polinomios pares. La figura muestra los sucesivos polinomios de aproximación. En esta figura superponemos las aproximaciones de Legendre y de Chebyshef. -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1 Legendre Chebyshev -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1 1.2 1.4 file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Practica%2016%20-%20Aproximacion%20Trigonometrica/practica16.txt Aproximacion Teorica -------------------- Funcion Onda cuadrada: ---------------------- >> m = 2000; >> h = 2*pi/m; >> t = (0:h:2*pi)'; %abscisas, nodos de integracion >> >> y = sign(pi-t); %funcion a evaluar >> plot(t,y,'.') Creamos los coeficientes >> b(1) = trapz(t,y.*sin(t))/pi; %se evalua la integral >> b*pi %comprobacion ans = 4.0000 >> b(2) = trapz(t,y.*sin(2*t))/pi; >> b(3) = trapz(t,y.*sin(3*t))/pi; >> b(4) = trapz(t,y.*sin(4*t))/pi; >> b(5) = trapz(t,y.*sin(5*t))/pi; >> b(6) = trapz(t,y.*sin(6*t))/pi; >> b(7) = trapz(t,y.*sin(7*t))/pi; b = 1.2732 -0.0000 0.4244 -0.0000 0.2546 -0.0000 0.1819 %Se comprueba que para k par, en la onda cuadrada, el coeficiente da cero, porque la onda es impar, y sólo tiene componentes en el seno, que tambien es impar. >> %Vamos a representar >> s = b(1)*sin(t); >> plot(t,y,'.',t,s,'r') >> hold on >> %Vamos acumulando en s la funcion con cada vez mas términos s = s + b(3)*sin(3*t) %recordemos que en este caso, sólo hay terminos del seno y sólo k impar >> plot(t,y,'.',t,s,'g') >> s = s + b(5)*sin(5*t); file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Practica%2016%20-%20Aproximacion%20Trigonometrica/practica16.txt (1 of 3) [09/03/2008 13:49:38] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Practica%2016%20-%20Aproximacion%20Trigonometrica/practica16.txt >> plot(t,y,'.',t,s,'m') >> %Comparamos coeficientes teoricos y numericos >> c = 4/pi*[1 1/3 1/5 1/7 1/9]; c = 1.2732 0.4244 0.2546 0.1819 0.1415 >> b b = 1.2732 -0.0000 0.4244 -0.0000 0.2546 -0.0000 0.1819 Aproximacion con la fórmula discreta ------------------------------------ >> N = 12 N = 12 >> h = 2*pi/N; >> t = (0:h:2*pi-h)'; >> y = sign(pi-t); %funcion a evaluar >> y(1) = 0; % arreglamos el principio para obtener simetria >> >> stem(t,y) %obtener representacion %para evaluar d eun golpe todos los productos escalares implicados: >> M = [t.^0 cos(t) sin(t) cos(2*t) sin(2*t) cos(3*t) sin(3*t) cos(4*t) sin(4*t) cos(5*t) sin(5*t) cos(6*t) sin(6*t)]; %Me he equivocado pues he puesto 13 vectores independientes, sólo puedo 12 >> M = [t.^0 cos(t) sin(t) cos(2*t) sin(2*t) cos(3*t) sin(3*t) cos(4*t) sin(4*t) cos(5*t) sin(5*t) cos(6*t)] >> T = M'*y*2/N T = 0 0.0000 1.2440 0 -0.0000 0.0000 0.3333 -0.0000 -0.0000 -0.0000 0.0893 file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Practica%2016%20-%20Aproximacion%20Trigonometrica/practica16.txt (2 of 3) [09/03/2008 13:49:38] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Practica%2016%20-%20Aproximacion%20Trigonometrica/practica16.txt 0 >> T(12) = T(12)/2 %en general >> b %comparandolos con B b = 1.2732 -0.0000 0.4244 -0.0000 0.2546 -0.0000 0.1819 >> T' ans = Columns 1 through 8 0 0.0000 1.2440 0 -0.0000 0.0000 0.3333 -0.0000 Columns 9 through 12 -0.0000 -0.0000 0.0893 0 Hay bastante diferencia utilizando 12 puntos en comparacion con 2000. Aunque hay uqe pensar que la aproximacion obtenida asi es de la funciom discreta de sólo 12 puntos, y NO de la onda cuadrada. Representemosla >> tg = linspace(0,2*pi); %a efectos graficos utilizamos una variable continua >> Z = T(3)*sin(tg); >> hold on >> plot(tg,Z,'r') >> Z = Z + T(7)*sin(3*tg) %como se que se me anulan todos menos el 3, el 7 y el 11, me ahorro trabajo. En general habria uqe evaluar todos los términos: mirar transparencias >> plot(tg,Z,'g') >> Z = Z + T(11)*sin(5*tg) >> plot(tg,Z,'k') Vemos que la aproximacion ya es perfecta en el mundo discreto file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Practica%2016%20-%20Aproximacion%20Trigonometrica/practica16.txt (3 of 3) [09/03/2008 13:49:38] ______________________________________________________________________ 1 16. Aproximación trigonométrica Los fenómenos ondulatorios son muy frecuentes en la naturaleza y en las aplicaciones técnicas. Quizás la luz y el sonido sean los ejemplos más cotidianos, pero ni mucho menos los únicos. La luz, como sabemos, ocupa una estrecha banda en el amplio espectro de las radiaciones electromagnéticas y el sonido es un caso de vibración mecánica. Desde el punto de vista teórico, la característica fundamental de las ondas es la periodicidad. El origen del sonido, por citar un ejemplo, está en las variaciones rítmicas de la presión del aire o medio en el que se produce. La velocidad con la que se suceden los incrementos y disminuciones de la presión determinan el tono del sonido. Estas variaciones se producen con gran rapidez en relación con la duración de un sonido y son muy uniformes en un sonido puro, salvo que se atenúa su intensidad. El ciclo elemental consta de un incremento de la presión que llega a un máximo y disminuye de nuevo provocando ahora una depresión. Esta a su vez se corrige para volver a la presión normal y comienza de nuevo el ciclo, repitiéndose periódicamente. Las oscilaciones se estudian matemáticamente descomponiéndolas en suma de funciones periódicas sencillas como son las funciones trigonométricas seno y coseno. La afirmación del matemático francés J.B. Fourier de que cualquier función periódica podía representarse como suma de senos y cosenos causo una notable controversia de la que surgieron importantes avances en el conocimiento matemático, como la noción de convergencia uniforme o la aclaración de la propia idea de función. Desde el punto de vista práctico, las componentes elementales de una onda reflejan muchas de sus propiedades físicas, por lo que su determinación reviste gran importancia en las aplicaciones técnicas. Generalmente basta un reducido número de estas componentes, también llamadas armónicos, para reproducir la información significativa del fenómeno ondulatorio estudiado. La amplitud y frecuencia de los armónicos se obtiene técnicamente con los osciloscopios y analíticamente mediante la teoría de Fourier que desarrollaremos en este tema. En las aplicaciones no se suele disponer de una expresión analítica de la función a analizar, sino de valores de la misma medidos a intervalos regulares de tiempo. Es necesario por tanto, elaborar versiones discretas de la aproximación de Fourier, que proporcionen información a partir de un número finito de datos. Además, estos métodos se adaptan mejor al cálculo con ordenador, que trabaja con una cantidad finita de información. 16.1. El Sistema Trigonométrico Una función de variable real f es periódica de periodo L, si ) ( ) ( t f L t f = + para todo valor de t. Consecuentemente, ) ( ) ( t f kL t f = + para cualquier k entero. Por comodidad, Aproximación trigonométrica 2 consideraremos funciones de periodo 2π, pero los resultados se aplican fácilmente a funciones de periodo L arbitrario. Una función periódica queda determinada por sus valores en cualquier intervalo de longitud igual al periodo. El sistema trigonométrico está constituido por las funciones 1/2, sin(x), cos(x), sin(2x), cos(2x), ..., sin(nx), cos(nx), ... . Estas funciones son ortogonales respecto al producto escalar dado por la integral ∫ = > < π π 2 0 ) ( ) ( , 1 dt t g t f g f Además, son unitarias, salvo 1/2, cuya norma es . 2 / 1 La integral puede efectuarse en cualquier intervalo de longitud 2π, por ejemplo en [−π, π]. La ortogonalidad del sistema trigonométrico puede comprobarse aplicando conocidas fórmulas de trigonometría que transforman sumas en productos (ver problema 1). Dada una función f de periodo 2π. la combinación lineal de las funciones anteriores ( ) ∑ = + + = n k k k n kt b kt a a t s 1 0 ) sin( ) cos( 2 ) ( que mejor se aproxima a f, se denomina polinomio de Fourier de orden n asociado a f. La mejor aproximación es la que minimiza el error cuadrático ∫ − − = − = π π π dt t s t f s f E n n 2 2 2 ) ( ) ( 1 y es precisamente la proyección ortogonal de f sobre el subespacio generado por las 2n+1 primeras funciones del sistema trigonométrico. Debido a la ortogonalidad del mismo, los llamados coeficientes de Fourier, se calculan mediante las expresiones siguientes, conocidas como fórmulas de Euler: ∫ = > < > < = π π 2 0 2 1 2 1 2 1 0 ) ( , , 1 dt t f f a ∫ = > < > < = π π 2 0 ) cos( ) ( ) cos( ), cos( ) cos( , 1 dt kt t f kt kt kt f a k (16.1) ∫ = > < > < = π π 2 0 ) sin( ) ( ) sin( ), sin( ) sin( , 1 dt kt t f kt kt kt f b k También gracias a la ortogonalidad, podemos expresar el error cuadrático como una suma de cuadrados ) 2 / ( 2 2 2 2 2 2 2 1 2 1 2 0 2 2 2 2 2 n n n n b a b a b a a f s f s f E + + + + + + + − = − = − = L Ejemplo 1 Los sistemas de alimentación ininterrumpida (SAI) almacenan energía en baterías para suministrarla a determinados aparatos en caso de cortes del fluido eléctrico. Dichos aparatos suelen funcionar con corriente alterna, por lo que el SAI debe convertir la El Sistema Trigonométrico 3 corriente continua que genera en corriente alterna. Los dispositivos que realizan esta conversión se denominan inversores. La figura muestra el esquema de un sencillo circuito inversor, llamado de puente. La carga P está conectada a la batería a través de cuatro interruptores. Los interruptores T 1 y T 3 se cierran simultáneamente, lo mismo que T 2 y T 4 , pero alternando su estado con los anteriores. Es decir, cuando los interruptores impares están cerrados, los pares están abiertos y viceversa. La figura siguiente muestra el paso de la corriente cuando los interruptores impares están cerrados. Al invertir el estado de los interruptores, se invierte el sentido de la tensión y la corriente en la carga. Si durante un tiempo τ mantenemos la corriente en un sentido, la invertimos entonces durante un periodo igual, τ, y así sucesivamente, la intensidad en la carga presentará el aspecto de la figura. Intensidad τ T 1 y T 3 cerrados T 2 y T 4 cerrados 2τ Aproximación trigonométrica 4 La eficiencia de un circuito de este tipo puede analizarse teóricamente mediante la aproximación de Fourier. En efecto, si el aparato conectado al inversor está diseñado para trabajar con una corriente alterna de forma sinusoidal, aprovechará la parte de la intensidad recibida correspondiente al primer armónico del desarrollo de Fourier de dicha intensidad. Es importante obtener este armónico y calcular la potencia del resto de los armónicos, pues sus efectos son indeseables en todas las aplicaciones del inversor (perturbaciones, calentamientos, etc...); por lo que se impone su minimización o anulación mediante los blindajes y filtros adecuados. Supongamos que el inversor produce una corriente unidad durante el intervalo de 0 a π τ = y una corriente opuesta en el intervalo siguiente de la misma duración, repitiéndose este ciclo indefinidamente. Dicha corriente se representa mediante la función 2π-periódica cuyos valores entre 0 y 2π son π π π π π 2 0 si 1 si 0 si 1 ) ( sign ) ( < < = < < ¦ ¦ ¹ ¦ ¦ ´ ¦ − = − = t t t t t f Aplicando las fórmulas de Euler (1), obtenemos una expresión general para el polinomio de Fourier de orden 2n de esta función. Observa que sólo contiene términos en seno por tratarse de una función impar )). ( ) ( ( t f t f − = − | . | \ | − − + + + + = 1 2 ) ) 1 2 sin(( 5 ) 5 sin( 3 ) 3 sin( ) sin( 4 ) ( 2 n t n t t t t s n L π Para el cálculo práctico de los coeficientes de Fourier, evaluaremos las integrales por el método de los trapecios, tomando suficientes nodos para obtener la precisión adecuada. Cuantos más términos del desarrollo de Fourier queramos obtener, más nodos utilizaremos en su cálculo. Trabajamos, por ejemplo, con 200 nodos para obtener el polinomio trigonométrico de orden 10. m = 200; h = 2*pi/m; t = (0:h:2*pi)'; Evaluamos la función en los nodos y la representamos gráficamente. y = sign(pi-t); plot(t,y) Calculamos el coeficiente del término constante del desarrollo y representamos éste gráficamente. Acumularemos en s los sucesivos términos del desarrollo. a0 = trapz(t,y)/pi; s = a0/2*ones(size(t)); plot(t,y,t,s) En este caso, el término constante es nulo. Calculemos los siguientes coeficientes. a(1) = trapz(t,y.*cos(t))/pi; b(1) = trapz(t,y.*sin(t))/pi; s = s+a(1)*cos(t)+b(1)*sin(t); El Sistema Trigonométrico 5 plot(t,y,t,s) 0 1 2 3 4 5 6 7 -4 -3 -2 -1 0 1 2 3 4 Observamos que el término en cos(t) es nulo, debido a que la función es impar y, por tanto, ortogonal al coseno. Los términos de orden 2 se anulan ambos, debido al distinto tipo de simetría con respecto a π/2 de la función y de sin(2t) y cos (2t): a(2) = trapz(t,y.*cos(2*t))/pi; b(2) = trapz(t,y.*sin(2*t))/pi; s = s+a(2)*cos(2*t)+b(2)*sin(2*t); Evaluamos los términos restantes y representamos la aproximación. for k=3:10 a(k) = trapz(t,y.*cos(k*t))/pi; b(k) = trapz(t,y.*sin(k*t))/pi; s = s+a(k)*cos(k*t)+b(k)*sin(k*t); end plot(t,y,t,s) 0 1 2 3 4 5 6 7 -1.5 -1 -0.5 0 0.5 1 1.5 Podemos hallar el error cuadrático directamente o a partir de los coeficientes. E2 = trapz(t,(y-s).^2)/pi E2 = trapz(t,y.^2)/pi-a0^2/2-norm(a)^2-norm(b)^2 Aproximación trigonométrica 6 E2 = 0.0721 E2 = 0.0721 Los resultados numéricos se aproximan bastante a los teóricos, aunque la precisión disminuye conforme aumenta el orden. En este ejemplo, la función a desarrollar es discontinua, por lo que el error es mayor. b(1:2:9) - 4/pi./(1:2:9) ans = 1.0e-003 * -0.1047 -0.3142 -0.5238 -0.7336 -0.9437 16.2. Transformada de Fourier Discreta Al estimar los coeficientes de Fourier por el método de trapecios siempre con el mismo número de nodos, observamos que en las operaciones solamente intervienen los valores de la función a desarrollar y los de las funciones trigonométricas en un número finito de nodos equiespaciados. En realidad, estamos resolviendo un problema de aproximación discreta, en lugar de continua. En otras palabras, trabajamos en un espacio euclídeo de dimensión finita en el que el producto escalar se define mediante sumas y productos, en lugar de trabajar en un espacio de dimensión infinita, cuyo producto escalar es una integral. Vamos a considerar el problema de aproximación trigonométrica desde este punto de vista, que se adapta mejor al cálculo con ordenador, así como a situaciones experimentales en las que no conocemos la función a aproximar, sino únicamente valores de la misma medidos a intervalos regulares. Supongamos que f es una función de periodo 2π y que estimamos sus coeficientes de Fourier de modo aproximado mediante la fórmula de los trapecios con N intervalos. En el apartado anterior hemos tomado N suficientemente grande para que la precisión de los coeficientes hasta el orden n fuera buena. Conociendo analíticamente la función, podíamos evaluarla en tantos puntos como quisiéramos. En la práctica, sin embargo, sucede que disponemos de un número limitado N de valores de f en el intervalo del periodo, [0, 2π], y nos preguntamos cuántos coeficientes del desarrollo de Fourier podemos estimar a partir de dichos valores. Sea N h / 2π = y , jh t j = para j = 0, 1, 2, …, N. Denotamos por y j el valor de f en t j . Estimamos el coeficiente de Fourier a k , k = 0, 1, 2, …, de la función f mediante la fórmula de los trapecios con N subintervalos ( ) ) cos( ) cos( 2 ) cos( 2 ) cos( 1 ) cos( ) ( 1 1 1 1 0 0 2 0 1 N N N N k kt y kt y kt y kt y N dt kt t f a + + + + ≅ ≅ = − − ∫ L π π Al ser las funciones del integrando 2π-periódicas, el primer sumando y el último son iguales ( ) ) cos( ) cos( ) cos( 2 : 1 1 1 1 0 0 − − + + + = ≅ N N k k kt y kt y kt y N A a L Transformada de Fourier Discreta 7 La expresión entre paréntesis es el producto escalar en el espacio euclídeo N- dimensional de los vectores cuyas componentes son los valores de f (t) y de cos(kt) en los puntos t j , j = 0, 1, 2, …, N−1. Llamaremos funciones discretas a estos vectores y las denotaremos igual que las correspondientes funciones reales. Análogamente se aproximan los coeficientes en seno. ( ) ) sin( ) sin( ) sin( 2 : ) sin( ) ( 1 1 1 1 0 0 2 0 1 − − + + + = ≅ ≅ = ∫ N N k k kt y kt y kt y N B dt kt t f b L π π Vamos a comprobar que los n primeros sumandos de la expresión L + + + + + = ) 2 sin( ) 2 cos( ) sin( ) cos( 2 ) ( 2 2 1 1 0 t B t A t B t A A t T n (16.2) donde , N n ≤ proporcionan la proyección ortogonal de la función discreta f(t) sobre el subespacio generado por n primeros vectores que aparecen en ella. La clave está en la ortogonalidad de estos vectores. Como el espacio es N-dimensional, a lo sumo hay N generadores independientes. En primer lugar, comprobemos la ortogonalidad de las funciones trigonométricas discretas en los casos particulares de N = 3 y N = 4. N = 3; h = 2*pi/N; t = (0:h:2*pi-h)'; M = [t.^0 cos(t) sin(t)]; G = M'*M G = 3.0000 0.0000 -0.0000 0.0000 1.5000 -0.0000 -0.0000 -0.0000 1.5000 La matriz de Gram G es diagonal, por lo que los vectores son ortogonales. El cuadrado de la norma de la función discreta constante 1 es obviamente 3 = N, mientras que para los vectores restantes es 1.5 = N/2. En el caso N = 4 tenemos N = 4; h = 2*pi/N; t = (0:h:2*pi-h)'; M = [t.^0 cos(t) sin(t) cos(2*t)]; G = M'*M G = 4.0000 -0.0000 0.0000 0 -0.0000 2.0000 0.0000 0.0000 0.0000 0.0000 2.0000 0.0000 0 0.0000 0.0000 4.0000 En este caso notamos que el cuadrado de la norma del último vector, que es ) 1 , 1 , 1 , 1 ( − − , es 4 = N, al igual que la del primero, ). 1 , 1 , 1 , 1 ( La norma al cuadrado de los otros vectores es 2 = N/2. Aproximación trigonométrica 8 En general, si N es impar, el último vector es | . | \ | − t N 2 1 sin y el cuadrado de su norma, N/2. Si N es par, el último vector es | . | \ | t N 2 cos y el cuadrado de su norma, N. La fórmula (16.2) proporciona las proyecciones ortogonales buscadas, ya que los coeficientes que aparecen en ella son: ( ) ( ) ( ) 1 , 1 1 ), ( 1 2 par es si , ) 1 , 1 , , 1 , 1 ( ), 1 , 1 , , 1 , 1 ( ) 1 , 1 , , 1 , 1 ( ), ( ) cos( ) cos( ) cos( 1 2 / ) 1 ( , 2 , 1 , ) cos( ), cos( ) cos( ), ( ) cos( ) cos( ) cos( 2 1 1 0 0 1 2 1 1 2 1 0 2 0 2 1 1 1 1 0 0 t f y y y N A N t f t y t y t y N A N k kt kt kt t f kt y kt y kt y N A N N N N N N N N N k = + + + = − − − − − − = = + + + = − = = = + + + = − − − − − L K K K L K L ( ) 2 / ) 1 ( , 2 , 1 , ) sin( ), sin( ) sin( ), ( ) sin( ) sin( ) sin( 2 1 1 1 1 0 0 − = = = + + + = − − N k kt kt kt t f kt y kt y kt y N B N N k K L La aproximación discreta T N (t) de mayor orden coincide con el vector f(t). Si f es una función de variable real t, la aproximación T N (t) es un polinomio trigonométrico que la interpola en los N nodos del muestreo. Los términos de la aproximación tienen frecuencias que son múltiplo de la frecuencia fundamental. La frecuencia más alta que aparece es N/2 veces la frecuencia fundamental y se denomina frecuencia de Nyquist. Para que la transformada detecte frecuencias más altas, hay que tomar más valores de la función. En otros términos, hay que muestrear la señal a frecuencias mayores, concretamente al doble de la frecuencia máxima deseada. Ejemplo 2 Para aproximar los tres primeros términos no triviales del desarrollo de Fourier de la función ) ( sign ) ( t t f − = π del Ejemplo 1, | . | \ | + + ≈ 5 ) 5 sin( 3 ) 3 sin( ) sin( 4 ) ( t t t t f π hemos de tomar al menos N = 11, pues el último término es un seno y (N−1)/2=5. Tomaremos sin embargo N = 12, para preservar la simetría de la función. Ajustamos el valor de la función en 0 para que resulte periódica. Como el valor de f en 2π no interviene en el cálculo y la función tiene una discontinuidad, le asignamos en 0 el valor medio entre los valores por la izquierda y por la derecha. N = 12; h = 2*pi/N; Transformada de Fourier Discreta 9 t = (0:h:2*pi-h)'; y = sign(pi-t); y(1) = 0; plot(t,y,'*') Evaluamos las funciones base en los nodos t k y hallamos los productos escalares. M = [t.^0 cos(t) sin(t) cos(2*t) sin(2*t) ... cos(3*t) sin(3*t) cos(4*t) sin(4*t) ... cos(5*t) sin(5*t) cos(6*t)]; T = M'*y*2/N; T(12) = T(12)/2; Los coeficientes del término independiente A 0 , de los cosenos A k y de los senos B k son, respectivamente, A0 = T(1) Ak = T(2:2:12) Bk = T(3:2:11) A0 = 0 Ak = 1.0e-015 * 0.3701 0 0.5934 -0.2405 -0.3331 0 Bk = 1.2440 -0.0000 0.3333 -0.0000 0.0893 Los coeficientes en seno, A k son prácticamente nulos. Los B k no nulos corresponden a los coeficientes de los senos impares del desarrollo de Fourier ordinario S = 4/pi*[ 1 1/3 1/5] S = 1.2732 0.4244 0.2546 Salvo el primero, la aproximación es bastante pobre. Se puede alcanzar más precisión tomando N más elevado, como hemos visto en el Ejemplo 1, pero ahora lo que pretendemos es observar las propiedades de la aproximación discreta. Representamos primero la función y los nodos usados para hallar la transformada. tg = linspace(0,2*pi,300); yg = sign(pi-tg); plot(t,y,'*',tg,yg) Evaluamos la transformada discreta. Aproximación trigonométrica 10 z = T(1)/2*ones(size(tg)); for k=1:5 z=z+T(2*k)*cos(k*tg); z=z+T(2*k+1)*sin(k*tg); end z=z+T(12)*cos(12*tg); plot(t,y,'*',tg,yg,tg,z) 0 1 2 3 4 5 6 7 -1.5 -1 -0.5 0 0.5 1 1.5 Comparamos ahora con el desarrollo de Fourier ordinario. s = S(1)/2*ones(size(tg)); for k=1:5 s=s+S(2*k)*cos(k*tg); s=s+S(2*k+1)*sin(k*tg); end plot(t,y,'*',tg,yg,tg,s) 0 1 2 3 4 5 6 7 -1.5 -1 -0.5 0 0.5 1 1.5 Observamos que esta aproximación oscila más que la discreta, aunque tal vez ajuste mejor la función entorno a las discontinuidades. 16.3. Transformada rápida de Fourier (FFT) La transformada de Fourier tiene innumerables aplicaciones y en la mayoría se necesitan valores de N elevados. El coste de la obtención de la transformada es del Transformada rápida de Fourier (FFT) 11 orden de 2 N , lo que no parece mucho en comparación con otros algoritmos como el de eliminación gaussiana o la factorización QR que son de orden . 3 N Sin embargo, la popularidad de la transformada discreta se debe en gran parte al descubrimiento de algoritmos de menos coste, llamados rápidos, que permiten su aplicación a problemas de gran tamaño. El algoritmo de la transformada rápida de Fourier (FFT) tiene un coste del orden ), log(N N ⋅ que para N grande, es mucho menor que . 2 N Para introducir la FFT, es conveniente utilizar la versión compleja del desarrollo y de la transformada de Fourier discreta. 16.3.1. Desarrollo de Fourier complejo Las funciones complejas { } n k ikt ± ± ± = , , 1 , 1 , 0 , e K forman un sistema ortonormal para el producto escalar definido por ∫ >= < π π 2 0 ) ( ) ( , 2 1 dt t g t f g f Dada una función f(t) compleja, de variable real y periódica de periodo 2π, se define su desarrollo de Fourier complejo de orden n como ∑ − = = n n k ikt k n c t s e ) ( donde ∫ − = > =< π π 2 0 e ) ( e , 2 1 dt t f f c ikt ikt k En otros términos, s n es la proyección ortogonal de f sobre el subespacio generado por las funciones { } n k ikt ± ± ± = , , 1 , 1 , 0 , e K . Si f toma valores reales, los coeficientes de su desarrollo de Fourier en senos y cosenos están relacionados con las del desarrollo complejo mediante las expresiones 2 k k k k ib a c c − = = − que permiten pasar fácilmente del desarrollo real al complejo y viceversa. 16.3.2. Transformada de Fourier discreta Los coeficientes de la transformada discreta de N valores de una función 2π-periódica ) 2 ( ) ( ) ( N j f jh f t f y j j π = = = se definen como ∑ ∑ − = − = | . | \ | − = − = 1 0 1 0 2 exp 1 ) exp( 1 N j j N j j j k N ikj y N ikt y N C π , para . 1 , , 1 , 0 − = N k K Estos coeficientes permiten expresar el vector y como combinación lineal de exponenciales complejas ortogonales ∑ − = | . | \ | = 1 0 2 exp 1 N j k j N ikj C N y π Aproximación trigonométrica 12 Si f es real, los coeficientes C k están relacionados con los de su transformada de Fourier discreta en senos y cosenos mediante las expresiones 2 / 1 , 2 , 2 0 0 N k iB A C A C k k k < ≤ − = = Si N es par, . 2 / 2 / 2 / N N N iB A C − = Los restantes coeficientes son los conjugados de los anteriores por lo que pueden ignorarse, concretamente . 2 / 1 , 2 N k iB A C k k k N ≤ ≤ + = − Recíprocamente, 2 / 1 ), ( imag 2 par es si ) real( 2 / 0 ) real( 2 2 / 2 / N k C B N C A N k C A k k N N k k < ≤ − = = < ≤ = 16.3.3. Transformada rápida de Fourier El cálculo de la transformada de Fourier discreta se optimiza mediante el algoritmo FFT, programado en una función de MATLAB del mismo nombre. Aplicando esta función a un vector y, se obtiene un vector de elementos NC k , donde N es el número de componentes de y y C k son los coeficientes de la transformada de Fourier discreta compleja. A partir de ellos obtenemos los coeficientes de la transformada real, que a su vez estiman los coeficientes del desarrollo de Fourier ordinario. Ejemplo 3 Calculemos la transformada rápida de 12 muestras de la función ) ( sign ) ( t t f − = π en el intervalo ] 2 , 0 [ π y comparemos los resultados con los del ejemplo anterior. N = 12; h = 2*pi/N; t = 0:h:2*pi-h; y = sign(pi-t); y(1) = 0; C = fft(y)/N C = Columns 1 through 3 0 0 - 0.6220i 0 Columns 4 through 6 0 - 0.1667i 0 0 - 0.0447i Columns 7 through 9 0 0 + 0.0447i 0 Columns 10 through 12 0 + 0.1667i 0 0 + 0.6220i Todas las componentes tienen parte real nula, correspondiendo a la anulación de los coeficientes en coseno de la transformada discreta. En general, podemos obtener estos coeficientes a partir de los 6 primeros coeficientes complejos. En el caso real, los restantes coeficientes contienen información redundante. Transformada rápida de Fourier (FFT) 13 A0 = 2*C(1); Ak = 2*real(C(2:6)); Los coeficientes en seno son Bk = -imag(C(2:6)) Bk = 0.6220 0 0.1667 0 0.0447 La inversión de la transformada discreta compleja es fácil con MATLAB, obteniéndose el vector inicial. z = zeros(size(t)); for k=1:12 z=z+C(k)*exp(i*(k-1)*t); end z z = Columns 1 through 3 0 1.0000 - 0.0000i 1.0000 - 0.0000i Columns 4 through 6 1.0000 - 0.0000i 1.0000 - 0.0000i 1.0000 - 0.0000i Columns 7 through 9 -0.0000 -1.0000 + 0.0000i -1.0000 + 0.0000i Columns 10 through 12 -1.0000 - 0.0000i -1.0000 + 0.0000i -1.0000 + 0.0000i 16.4. Problemas 16.4.1. Enunciados 1.- Comprueba la ortogonalidad del sistema trigonométrico 1/2, sin(x), cos(x), sin(2x), cos(2x), ..., sin(nx), cos(nx), ... con respecto al producto escalar integral ∫ = > < π π 2 0 ) ( ) ( , 1 dt t g t f g f . 2.- Los dispositivos que transforman la corriente alterna en continua se denominan rectificadores. El circuito rectificador más elemental contiene de un diodo que deja pasar la corriente en un sentido mientras que impide que circule en sentido opuesto. Sometido el diodo a una tensión sinusoidal, la corriente por el circuito es una sinusoide en la que se ha anulado la parte negativa. Estudia la aproximación de Fourier continua y discreta de la función ¦ ¹ ¦ ´ ¦ < < < < = π π π 2 0 0 ) sin( ) ( t t t t f que da la corriente por el circuito. 3.- El barrido del haz de electrones por la pantalla de un tubo de rayos catódicos se consigue mediante un campo magnético variable en forma de diente de sierra, . , 2 / ) ( π π < < − = t t t f Representa gráficamente diversas aproximaciones periódicas de esta función. Aproximación trigonométrica 14 4.- Aproxima la función de Runge π π < < − + = t t t f , 1 1 ) ( 2 mediante polinomios trigonométricos. 16.4.2. Soluciones 1.- Comprobemos en primer lugar la ortogonalidad de la función constante con respecto a los senos y cosenos. K , 2 , 1 , 0 2 ) sin( 2 ) cos( ) cos( , 2 0 2 0 2 1 1 = = = = > < ∫ k k kt dt kt kt π π π π K , 2 , 1 , 0 2 ) cos( 2 ) sin( ) sin( , 2 0 2 0 2 1 1 = = − = = > < ∫ k k kt dt kt kt π π π π Las integrales se anulan por ser el sen(kt) y cos(kt) 2π-periódicas. Comprobemos la ortogonalidad de los cosenos. Aplicamos la fórmula de transformación de productos de funciones trigonométricas en suma. ¦ ¹ ¦ ´ ¦ = = ≠ = − + + = = = > < ∫ ∫ ∫ k j dt k j dt t k j t k j dt kt jt kt jt si , 1 2 1 si , 0 2 ) ) cos(( ) ) cos(( ) cos( ) cos( ) cos( ), cos( 2 0 2 0 2 0 1 1 1 π π π π π π Análogamente se prueba para los senos. ¦ ¹ ¦ ´ ¦ = = ≠ = + − − = = = > < ∫ ∫ ∫ k j dt k j dt t k j t k j dt kt jt kt jt si , 1 2 1 si , 0 2 ) ) cos(( ) ) cos(( ) sin( ) sin( ) sin( ), sin( 2 0 2 0 2 0 1 1 1 π π π π π π La ortogonalidad entre senos y cosenos se comprueba igualmente, o de forma directa teniendo en cuenta que los senos son impares y los coseno pares. 0 2 ) ) sin(( ) ) sin(( ) cos( ) sin( ) cos( ), sin( 2 0 2 0 1 1 = − − + = = = > < ∫ ∫ π π π π dt t k j t k j dt kt jt kt jt 2.- Calculemos los coeficientes del desarrollo de Fourier π π π π π π π 2 )) 0 cos( ) (cos( 1 ) sin( ) ( 0 2 0 0 1 1 = − − = = = ∫ ∫ dt t dt t f a Soluciones 15 ¦ ¹ ¦ ´ ¦ − − = | . | \ | − − + = = − − + + + − = − − + = = = = ∫ ∫ ∫ par si 1 1 2 1 2 1 2 2 1 impar si 0 1 ) ) 1 cos(( 1 ) ) 1 cos(( 2 1 2 ) ) 1 sin(( ) ) 1 sin(( 1 ) cos( ) sin( ) cos( ) ( 2 0 0 2 0 0 0 1 1 k k k k k k t k k t k dt t k t k dt kt t dt kt t f a k π π π π π π π π π π π 2 1 2 1 2 ) 2 cos( 1 1 ) ( sin 1 ) sin( ) ( 1 0 0 2 2 0 1 = = − = = = ∫ ∫ ∫ π π π π π π π π dt t dt t dt t t f b 0 1 ) ) 1 sin(( 1 ) ) 1 sin(( 2 1 2 ) ) 1 cos(( ) ) 1 cos(( 1 ) sin( ) sin( ) sin( ) ( 0 0 1 1 0 0 2 0 = + + − − − = + − − = = = = ∫ ∫ ∫ π π π π π π π π π k t k k t k dt t k t k dt kt t dt kt t f b k El polinomio de Fourier de orden 2n es | | . | \ | − − − − − − + = 1 ) 2 ( ) 2 cos( 35 ) 6 cos( 15 ) 4 cos( 3 ) 2 cos( 2 1 2 2 ) sin( ) ( 2 n nt t t t t t s n L π 0 1 2 3 4 5 6 7 -0.2 0 0.2 0.4 0.6 0.8 1 1.2 La figura muestra el seno rectificado y su aproximación de Fourier de orden 4. Estimamos ahora los coeficientes de esta aproximación mediante la transformada rápida de Fourier. Como el coeficiente en sen(4t) es nulo, basta tomar 8 puntos. N = 8; h=2*pi/8; t = 0:h:2*pi-h; y = (t<pi).*sin(t); C = fft(y)/N C = Aproximación trigonométrica 16 Columns 1 through 3 0.3018 -0.0000 - 0.2500i -0.1250 + 0.0000i Columns 4 through 6 0.0000 -0.0518 0.0000 Columns 7 through 8 -0.1250 - 0.0000i -0.0000 + 0.2500i Obtengamos de aquí los coeficientes de la transformada discreta. A0 = 2*C(1) Ak(1:3) = 2*real(C(2:4)); Ak(4) = real(C(5)) Bk = -2*imag(C(2:5)) A0 = 0.6036 Ak = -0.0000 -0.2500 0.0000 -0.0518 Bk = 0.5000 -0.0000 0 0 Los valores correspondientes del desarrollo analítico antes calculado son bastante aproximados a los de la transformada discreta. a0 = 2/pi a = 2/pi*[0 -1/3 0 -1/15] b = [1/2 0 0 0] a0 = 0.6366 a = 0 -0.2122 0 -0.0424 b = 0.5000 0 0 0 0 1 2 3 4 5 6 7 -0.2 0 0.2 0.4 0.6 0.8 1 1.2 En el gráfico de la aproximación discreta se aprecia la diferencia respecto a la aproximación analítica. 4.- a) Coeficientes del desarrollo de Fourier. En primer lugar, notemos que al tratarse de una función par, o sea, que ), ( ) ( t f t f = − el desarrollo sólo tendrá términos en coseno. Estimamos los coeficientes del desarrollo Soluciones 17 de Fourier mediante la fórmula de trapecios con un número relativamente alto de intervalos, pongamos 500. m = 500; h = 2*pi/m; t = (-pi:h:pi)'; y = 1./(1+t.^2); Calculamos el coeficiente del término constante del desarrollo y Acumularemos en s los sucesivos términos del desarrollo. a0 = trapz(t,y)/pi s = a0/2*ones(size(t)); a0 = 0.8038 Calculamos los siguientes coeficientes, recordando que los b k son nulos. for k=1:5 a(k) = trapz(t,y.*cos(k*t))/pi; s = s+a(k)*cos(k*t); end Los coeficientes en coseno son a a = 0.3889 0.1282 0.0532 0.0163 0.0080 El polinomio de Fourier resultante se confunde casi con la función. b) Transformada de Fourier discreta Obtendremos los mismos coeficientes con distintos valores de N para observar cómo se aproximan a los del desarrollo analítico. Calculamos únicamente los coeficientes es las funciones pares. N = 12; h = 2*pi/N; t = (-pi:h:pi-h)'; y = 1./(1+t.^2); M = [t.^0 cos(t) cos(2*t) cos(3*t) ... cos(4*t) cos(5*t) cos(6*t)]; T = M'*y*2/N; T(7) = T(7)/2 T = 0.8031 0.3897 0.1275 0.0542 0.0157 0.0101 0.0013 Aproximación trigonométrica 18 La tabla adjunta muestra cómo se estabilizan los valores calculados al aumentar N. Coef N = 12 N = 60 N = 120 A 0 0.80305543116051 0.80378254202805 0.80381223853720 A 1 0.38969093028561 0.38892207380461 0.38889236036422 A 2 0.12745841540200 0.12819495390619 0.12822471822888 A 3 0.05423075163348 0.05326441580220 0.05323456637931 A 4 0.01567242107834 0.01627556617975 0.01630553536884 A 5 0.01007848390572 0.00807805792346 0.00804793366750 A 6 0.00134128211459 0.00076457501605 0.00077973274210 c) Transformada rápida Para obtener la transformada mediante el algoritmo rápido, hay que evaluar la función en el intervalo [0, 2π]. Por la periodicidad, los valores de π a 2π son los mismos que los de −π a 0. Basta cortar el vector y en dos trozos y pegarlos cambiando el orden. n=floor((N+1)/2); yb = y([n+1:N,1:n]); fft(yb)*2/N ans = 0.8031 0.3897 + 0.0000i 0.1275 0.0542 0.0157 0.0101 + 0.0000i 0.0027 0.0101 - 0.0000i 0.0157 0.0542 0.1275 0.3897 - 0.0000i De las 7 primeras componentes se obtienen los coeficientes de la transformada discreta. 17 Ecuaciones Diferenciales Ordinarias Los problemas de valor inicial de ecuaciones y sistemas de ecuaciones diferenciales suelen resolverse por métodos directos, a diferencia de los problemas de frontera, que suelen reducirse a la resolución de sistemas algebraicos, lineales o no. Esta Práctica aborda los métodos numéricos para el problema de valor inicial de ecuaciones diferenciales ordinarias de primer orden. En la siguiente, aplicamos estos métodos a las ecuaciones diferenciales de orden superior al primero y a los sistemas de ecuaciones diferenciales de primer orden. Formulamos el llamado Problema de Valor Inicial para la ecuación diferencial de primer orden e indicamos su aplicación a los Modelos de Población, que usaremos como ejemplos ilustrativos de los métodos numéricos. La interpretación geométrica de una ecuación diferencial con un campo de direcciones que siguen las curvas solución, nos proporciona una idea intuitiva del método de las poligonales de Euler, pero otros métodos más sofisticados se obtienen más fácilmente por vía analítica, a partir de la formulación de la ecuación diferencial como una ecuación integral. La evaluación numérica de esta integral por distintas fórmulas de cuadratura da lugar a los métodos básicos de resolución de ecuaciones diferenciales. Programaremos los métodos de Euler, Heun, Euler modificado y Runge-Kutta y los aplicaremos a algunos ejemplos, comprobando el orden de error de cada uno de ellos. 17.1 Problemas de valor inicial El Problema de Valor Inicial (PVI) consiste en hallar la solución y(t) de la ecuación diferencial ordinaria de primer orden '( ) ( , ( )), a t b, y t f t y t = ≤ ≤ que en t = a toma un valor determinado y 0 . Bajo ciertas condiciones, se demuestra que el PVI tiene solución única. Sin embargo, la solución casi nunca puede obtenerse analíticamente mediante una fórmula cerrada. Afortunadamente, disponemos de diversos métodos numéricos que proporcionan aproximaciones de la solución con la precisión requerida en las aplicaciones. Los ejemplos que analizamos sí tienen solución cerrada, lo que nos permite estudiar el error de los métodos numéricos desarrollados. Ejemplo 1: Modelos de población de Malthus y Verhulst. Malthus supone que la velocidad de crecimiento de una población es proporcional al tamaño de la misma en cada momento. Si llamamos a al coeficiente de proporcionalidad, p a la población y p' a su derivada respecto al tiempo, la ecuación resultante es p' = a·p Si p 0 es la población en es tiempo t = 0, la solución del PVI es 0 · at p p e = El modelo de Malthus se aplica con bastante precisión a poblaciones pequeñas con recursos prácticamente ilimitados o a otros fenómenos como la desintegración radiactiva (con a < 0). Sin embargo, cuando los recursos de que dispone la población son limitados, su crecimiento se ve afectado por la competencia por conseguirlos entre los miembros de la población. Verhulst introduce en la ley de Malthus una corrección proporcional al número de encuentros que pueden producirse entre los miembros de la población en la búsqueda de los recursos, quedando la ecuación diferencial como 2 ' · p a p bp = − Notemos que el modelo de Malthus es un caso particular del de Verhulst con b = 0. La solución del PVI correspondiente al modelo de Verhulst es 0 0 0 ( ) ( ) at a p p t b p a b p e − = + − 17.2 Campo de direcciones Si representamos en el plano cartesiano las soluciones de una ecuación diferencial para distintos valores iniciales, obtenemos curvas cuya pendiente en cada punto (t, y) es el valor de f en dicho punto. Si no conocemos las soluciones, la ecuación diferencial proporciona sus pendientes en cada punto del plano. Representándolas obtendremos la forma aproximada de dichas soluciones. MATLAB dispone de una función, quiver, apropiada para visualizar el campo de direcciones de una ecuación diferencial. En primer lugar, editamos un fichero f.m que devuelva los valores de la ecuación diferencial del ejemplo 4 function z = verhulst (t,p) a = 4; b = 1; z = a*p - b*p.^2; Para representar su campo de direcciones hacen falta dos matrices con las coordenadas de los nodos en los que trazar las direcciones y otras dos con las coordenadas de vectores que en cada punto tienen la pendiente deseada. Los vectores son escalados convenientemente por la función quiver. t = 0:.2:3; y = 0:.2:5; [tt,yy] = meshgrid(t,y); uno = ones(size(tt)); dy = f(tt,yy); quiver(tt,yy,uno,dy) Siguiendo las flechas visualizamos la forma de las soluciones. 17.3 Métodos Numéricos para el Problema de Valor Inicial Los métodos numéricos no dan una expresión analítica de la función que permitiría evaluarla en cualquier t, sino valores aproximados de la misma en un número finito de instantes 0 1 ... n a t t t b = < < < = Los t k se consideran como nodos de integración y suelen tomarse equiespaciados para simplificar la aplicación del método. La distancia entre nodos consecutivos es el paso de integración h. Denotamos por y 0 , y 1 , ..., y n las aproximaciones calculadas de los valores de la solución en los nodos correspondientes, y(t 0 ), y(t 1 ), ..., y(t n ). Para obtenerlas, expresamos el problema de valor inicial en la forma 0 0 ( ) ( ) ( , ( )) t t y t y t f s y s ds = + ∫ y evaluamos numéricamente la integral del segundo miembro. Curiosamente, esta ecuación integral es la base tanto para la demostración teórica de la existencia y unicidad de la solución del problema de valor inicial, como para la aproximación numérica de las mismas. Por el contrario, los métodos analíticos obtienen la solución mediante transformaciones efectuadas sobre la forma diferencial del problema de valor inicial. En el caso teórico, se considera la ecuación integral como una ecuación de punto fijo de incógnita y(t) y se itera sustituyendo a la derecha la estimación inicial y 0 (t) = y 0 . El resultado se asigna a y 1 (t), que es el siguiente iterado, y así hasta obtener la convergencia. El límite es la solución buscada. En el caso numérico, la evaluación de la integral mediante fórmulas de cuadratura ha de enfrentar la dificultad de que en el integrando aparece la función y(t) que se trata de obtener. Para resolverla, algunos métodos hacen en cada paso una predicción del valor buscado y luego integran de nuevo para corregir esta predicción. Para analizar la precisión de un método numérico, comparamos la solución obtenida con la exacta para problemas en que ésta puede determinarse analíticamente. Cuando no se dispone de la solución exacta, se comparan dos soluciones aproximadas, obtenidas con paso distinto. Tomamos como medida del error el máximo de los errores locales, definidos éstos como la distancia en cada nodo entre la solución exacta y la aproximada. Se dice que un método es convergente si el error máximo tiende a 0 cuando el paso se hace pequeño. Además de ser convergente, interesa que un método se aproxime lo más rápidamente posible al límite. Comparamos esta rapidez con la tendencia a cero de las potencias de h. Decimos que un método es de orden p, si el error máximo tiende a cero a la misma velocidad que h p , cuando h tiende a 0. Ejemplo 2: (Continuación de ejemplo 1) Codifiquemos la solución exacta del modelo de población de Verhulst: 0 0 0 ( ) ( ) at a p p t b p a b p e − = + − function p = logistic(t,p0) a = 4; b = 1; p = a*p0./(b*p0+(a-b*p0)*exp(-a*t)); Guardamos la función en un fichero logistic.m que utilizaremos para hallar los errores de los distintos métodos. 17.4 Método de Euler El método de Euler aproxima la integral de forma bastante rudimentaria. Para estimar y(t 1 ), hemos de evaluar la integral 1 0 ( , ( )) t f t y t dt t ∫ en el intervalo [t 0 , t 1 ], pero sólo conocemos el integrando en el punto t 0 . Supondremos pues que el integrando toma en todo el intervalo el valor f(t 0 , y 0 ), con lo que la integral buscada se aproxima por 0 0 ( , ). h f t y ⋅ Llevando este valor al segundo miembro de la ecuación integral, obtenemos la estimación de la solución en el nodo t 1 : 1 0 0 0 · ( , ). y y h f t y = + Repitiendo este proceso sucesivamente para cada nodo, obtenemos las aproximaciones de la solución en los nodos del intervalo, por el llamado método de Euler. Para k = 0, 1, 2, ...,n-1 hacemos 1 · ( , ) k k k k y y h f t y + = + El siguiente algoritmo calcula estos valores y los almacena en un vector y. Algoritmo de Euler Entrada: a, b, y 0 , n Proceso: Paso de integración h = (b–a)/n Nodos de integración t = (a : h : b)' valor inicial y(1) = y 0 for k = 1 : n y(k+1) = y(k) + h* f(t(k), y(k)) end Salida: t, y Codificamos el algoritmo de Euler en MATLAB y lo guardamos en mieuler.m (no se puede usar euler.m porque es una función del sistema). Es conveniente inicializar y como un vector columna de n+1 ceros. Así ahorraremos tiempo en las asignaciones de cada iteración. y = zeros(n+1,1) Almacenamos los nodos y las iteraciones en columna para facilitar la representación gráfica de la solución de sistemas de ecuaciones diferenciales que veremos en la Práctica siguiente. Para resolver el modelo de población, ejecutamos [t,y] = mieuler(0,3,0.1,20) y representamos la salida sobre el campo de direcciones anterior: quiver(tt,yy,uno,dy) 0 0.5 1 1.5 2 2.5 3 3.5 -1 0 1 2 3 4 5 hold plot(t,y) Si hemos puesto la solución exacta en el fichero logistic.m, calculamos el error mediante max(abs(y-logistic(t,0.1))) ans = 0.6616 Comprobamos que duplicando el número de subintervalos, el error se divide aproximadamente por 2. El método de Euler es de orden h. Ejemplo 3 [t,y] = mieuler(0,3,0.1,40) Tomado menos intervalos, 10 por ejemplo, se advierte que el método se hace inestable, produciéndose oscilaciones en el resultado. [t,y] = mieuler(0,3,0.1,10) plot(t,y) 0 0.5 1 1.5 2 2.5 3 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 Repetimos el proceso con distintos valores iniciales para comprobar que la solución tiende al valor límite a/b, partiendo de un valor positivo, y a 0 si la población inicial es nula. 17. 3 Método de Heun Para mejorar la precisión del método de Euler, basta aproximar la integral en cada paso mediante un método más preciso, como puede ser el de los trapecios. Sin embargo, tenemos el inconveniente de que, por ejemplo en el primer paso, no conocemos f(t 1 , y 1 ), dado que y 1 es justamente el resultado de este paso. A falta del valor de y 1 , lo estimamos por Euler: 1 0 0 0 ( , ) p y y h f t y = + ⋅ Ahora ya podemos aplicar la fórmula de trapecios y corregir el valor de y 1 . ( ) 1 0 0 0 0 1 2 ( , ) ( , ) p y y h f t y f t y = + ⋅ + Análogamente obtenemos y 2 a partir de y 1 , prediciendo primero un valor por Euler y ajustándolo después por trapecios. En general, el paso k consiste en: a) Predecir un valor de y k+1 mediante 1 ( , ) p k k k k y y h f t y + = + ⋅ b) Corregir la predicción mediante trapecios ( ) 1 1 2 ( , ) ( , ) p k k k k k k y y h f t y f t h y + + = + ⋅ + + Obtenemos así el llamado método de Heun. La estructura del algoritmo correspondiente es igual a la del algoritmo de Euler, variando sólo la forma de obtener el paso siguiente. Algoritmo del método de Heun Para k = 1 : n k1 = f(t(k), y(k)) Predicción yp = y(k) + h*k1 k2 = f(t(k)+h, yp) Corrección y(k+1) = y(k) + h/2*(k1+k2) fin para k Codificamos el algoritmo de Heun en MATLAB, modificando el fichero de Euler, del que sólo se diferencia en la forma de obtener la y en cada paso, y lo guardamos en heun.m. Ejemplo 4: Caída en un medio resistente Un proyectil de masa m = 0.11 kg se lanza verticalmente hacia arriba en el aire con una velocidad inicial de 8 m/s. Si la resistencia del aire es proporcional al cuadrado de la velocidad, se satisface la ecuación diferencial ' · ·| | / v g k v v m = − − donde g = 9.8 m/s 2 y k = 0.02 kg·m –1 es el coeficiente de resistencia del aire. a) Resuelve el PVI en el intervalo [0,1] con h = 0.1, por el método de Heun. b) Representa la solución v gráficamente e interpreta físicamente el resultado obtenido. ¿Hacia qué tiende v? Solución Codificamos la ecuación diferencial en f.m function z = proyectil(t,y) k = 0.002; m = 0.11; g = 9.8; z = -g - k/m*y.*abs(y); En el intervalo [0,1] la velocidad parece decrecer linealmente como si fuese un movimiento de caída uniformemente acelerado. La velocidad tendería a –∞. Al tomar un intervalo mayor observamos que la velocidad tiende a cierto límite y el proyectil cae finalmente con movimiento uniforme, a velocidad constante. a) [t,y]=heun(0,1,8,10) t = 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000 y = 8.0000 6.9185 5.8638 4.8315 3.8170 2.8166 1.8264 0.8427 -0.1379 -1.1168 -2.0916 17.5 Método de Euler Modificado Utilizando como método de integración el del punto medio, obtenemos el llamado método de Euler modificado para ecuaciones diferenciales. Para evaluar la integral en un intervalo, pongamos por ejemplo en [t 0 , t 1 ], necesitamos el valor de y en el punto medio del mismo, t 0 + h/2. Como aún no disponemos de él, lo aproximamos por Euler 1/ 2 0 0 0 / 2· ( , ) y y h f t y = + Con esta aproximación, evaluamos la integral en [t 0 , t 1 ] por la fórmula de punto medio que da 0 1/ 2 · ( / 2, ) h f t h y + El primer paso del método modificado de Euler queda pues como 1 0 0 1/ 2 · ( / 2, ) y y h f t h y = + + En la etapa k , para k = 0, 1, 2, ...n-1, obtenemos y k+1 a partir de y k mediante las operaciones 1/ 2 / 2· ( , ) k k k k y y h f t y + = + 1 1/ 2 · ( / 2, ) k k k k y y h f t h y + + = + + El método de Euler modificado tiene error de orden 2, como el de Heun. Algoritmodel método de Euler modificado Para k = 1 : n %Estimación de y k + h/2 y12 = y(k) + h/2* f(t(k), y(k)) % Estimación de y k+1 y(k+1) = y(k) + h* f(t(k) + h/2, y12) fin para k Ejemplo 5 [t,y]=mieulerm(0,1,8,10) t = 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000 y = 8.0000 6.9190 5.8649 4.8330 3.8190 2.8190 1.8292 0.8460 -0.1342 -1.1135 -2.0889 17.6 Método de Runge-Kutta El método elemental que más se utiliza para resolver numéricamente ecuaciones diferenciales es, sin duda, el de Runge-Kutta. Basado en la regla de Simpson de integración numérica, resulta como éste de orden 4. Observando los términos de la fórmula de integración aproximada vemos que, en el primer paso, hay que estimar f(t 1/2 , y 1/2 ) y f(t 1 , y 1 ), que dependen de valores de y aún no disponibles. Denotamos por t 1/2 a t 0 +h/2. Llamando 1 0 0 ( , ) k f t y = estimamos y 1/2 por Euler y evaluamos f en (t 1/2 , y 1/2 ) 2 1/ 2 0 1 ( , / 2· ) k f t y h k = + Estimamos ahora y 1/2 por Euler con pendiente k 2 , en lugar de k 1 y volvemos a evaluar f 3 1/ 2 0 2 ( , / 2· ) k f t y h k = + Finalmente, estimamos y 1 por Euler con pendiente k 3 y evaluamos f en (t 1 ,y 1 ) 4 1 0 3 ( , · ) k f t y h k = + Combinando adecuadamente estas estimaciones de f en la regla de Simpson, obtenemos el primer paso del método de Runge-Kutta. 1 0 1 2 3 4 / 6·( 2 2 ) y y h k k k k = + + + + En general, obtenemos y k+1 de y k mediante las expresiones siguientes k 1 = f(t k , y k ) k 2 = f(t k +h/2, y k + h/2·k 1 ) k 3 = f(t k +h/2, y k + h/2·k 2 ) k 4 = f(t k+1 , y k + h·k 3 ) y k+1 = y k +h/6·(k 1 + 2k 2 + 2k 3 + k 4 ) Ejemplo 6 [t,y]=rk4('proyectil',0,1,8,10) t = 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000 y = 8.0000 6.9187 5.8643 4.8322 3.8180 2.8179 1.8279 0.8445 -0.1358 -1.1150 -2.0901 17.7 Problemas 17.7.1 Enunciados 1. Un proyectil de masa m = 0.11 Kg. se lanza verticalmente hacia arriba con una velocidad inicial de 8 m/s siendo frenado por la acción de la gravedad y por la resistencia del aire. Se satisface la ecuación diferencial m·v’ = − m·g − k·v|v| donde g = 9.8 m/s2 y k = 0.002 Kg/m. Halla la velocidad al cabo de 2 segundos usando el a) Método de Euler con h = 20 g) Método de Euler modificado con n = 20 b) Método de Euler con h = 10 h) Método de Euler modificado con n = 10 c) Método de Euler con h = 5 i) Método de Euler modificado con n = 5 d) Método de Heun con h = 20 j) Método de Runge-Kutta con n = 20 e) Método de Heun con h = 10 k) Método de Runge-Kutta con n = 10 f) Método de Heun con h = 5 l) Método de Runge-Kutta con n = 5 Halla la solución analíticamente. Justificar el orden de error de cada método. Representa gráficamente la solución. Tomando un intervalo de tiempo mayor, comprobar que la velocidad “crece” hasta llegar a cierto límite. Obtén éste analítica y numéricamente. 2. Un líquido de baja viscosidad fluye de un tanque cónico invertido por un orificio circular a razón de ) x ( A x g 2 r 6 . 0 dt dx 2 π − = donde r = 3 mm es el radio del orificio, x es la altura de la superficie del líquido desde el vértice del cono y A(x) es el área transversal del depósito a una altura x. Supongamos que la altura inicial del líquido es de 3 m y el volumen inicial de 180p/3 m3. Halla el nivel del agua al cabo de una hora, mediante a) Método de Euler con h = 360 g) Método de Euler modificado con h = 360 b) Método de Euler con h = 180 h) Método de Euler modificado con h = 180 c) Método de Euler con h = 90 i) Método de Euler modificado con h = 90 d) Método de Heun con h = 360 j) Método de Runge-Kutta con h = 360 e) Método de Heun con h = 180 k) Método de Runge-Kutta con h = 180 f) Método de Heun con h = 90 l) Método de Runge-Kutta con h = 90 Halla la solución analíticamente. Justificar el orden de error de cada método. Representa gráficamente la solución. 17.7.2 Soluciones 2.- Entonces la ecuación diferencial quedara de la siguiente manera : Dx/dt= -0.6πr 2 sqrt(2g)*sqrt(x)/(π*20/3*x 2 ) b.) Método de Euler con h = 180 El algoritmo del método de euler lo modificaremos porque en este ejercicio nos dan como dato el paso de integración luego tendremos que sacar n. Si h=180 n sera lo siguiente : n=(b-a)/h. Donde b=t=3600s y a=t0=0. Luego : N=(3600-0)/180=20 ; x A(x) A(x)= 3*Volumen/altura=pi*20*x 2 /3 Supongamos: x0=3m. V0=60*pi m 3 Nos piden calcular el nivel del agua, x, al cabo de una hora t=3600s La nomenclatura : y0=x0=3 m. y=x Antes de aplicar los algoritmos de cada método tendremos que crear un archivo de ombre f11.m en el que pondremos la ecuación diferencial. El algoritmo es el siguiente : function z=f11(t,y) %ejercicio 2 de propuestos. r= 0.003; g=9.8; z=-0.6*pi*r^2*sqrt(2*g)*sqrt(y)./(pi*20/3*y.^2); Ahora pasamos a aplicar los métodos. El algoritmo del método de euler es el siguiente : function [t,y]=mieuler(a,b,y0,n) % % [t,y]=mieuler(a,b,y0,n) % % Obtenemos las aproximaciones dela solución en los nodos del intervalo, % por el llamado método de euler. % El siguiente algoritmo calcula estos valores y los almacena en un % vector y. % % ¡¡ NOTA !!: Es conveniente inicializar 'y' como un vector columna % de n+1 ceros: y=zeros(n+1,1) % Así ahorraremos tiempo en las asignaciones de cada % iteración. % % >>>>>>>>>> CONCLUSIONES: duplicando el numero de subintervalos, el error % obtenido por la formula [max(abs(y-logistic(t,y0)))] se divide % aproximadamente por 2. El método de euler es de orden h. % h=(b-a)/n; %paso de integración t=(a:h:b)'; % Nodos de integración y=zeros(n+1,1); % Valor inicial y(1,1)=y0; for k=1:n y(k+1,1)=y(k,1)+h*f11(t(k),y(k,1)); end Si lo ejecutamos con los valores dados en el enunciado : [t,y]=mieuler(0,3600,3,20) t = 0 180 360 540 720 900 1080 1260 1440 1620 1800 1980 2160 2340 2520 2700 2880 3060 3240 3420 3600 y = 3.0000 2.9999 2.9998 2.9996 2.9995 2.9994 2.9993 2.9991 2.9990 2.9989 2.9988 2.9986 2.9985 2.9984 2.9983 2.9981 2.9980 2.9979 2.9978 2.9976 2.9975 El nivel del agua al cabo de una hora serà : x=2.9975m. e.) Método de Heun con h = 180 Al igual que en el apartado anterior el paso de integración es un dato del problema entonces tendremos que hallar la n para poder introducirla como datos de entrada en la cabecera del algoritmo. Entonces : n=(b-a)/h siendo b=t=3600s y a=t0=0s. Luego : n=3600/180=20. y0=x0=3m. y=x Es el resultado que buscamos. El algoritmo del método de Heun es el siguiente : function [t,y]=Heun(a,b,y0,n) % % % [t,y]=Heun(a,b,y0,n) % % Para mejorar la precision del metodo euler basta aproximar la integral en cada paso mediante un metodo mas preciso (como puede ser el de trapecios). % Pero tenemos el inconveniente de que en el primer paso no conocemos f(t1,y1) dado que y1 es el resultado de este paso, entonces estimaremos el valor de y1 por euler. % Entonces ya podremos utilizar trapecios y corregir el valor de y1. % Obtenemos el llamado metodo Heun. h=(b-a)/n; % Paso de integración t=(a:h:b)'; % Nodos de integración y=zeros(n+1,1); % Valor inicial y(1,1)=y0; for k=1:n k1=f11(t(k),y(k,1)); yp=y(k,1)+h*k1; % Predicción k2=f11(t(k)+h,yp); y(k+1,1)=y(k,1)+h/2*(k1+k2); % Corrección end Introducimos los datos y ejecutamos el algoritmo y los resultados son : [t,y]=Heun('deposito',0,3600,3,20) t = 0 180 360 540 720 900 1080 1260 1440 1620 1800 1980 2160 2340 2520 2700 2880 3060 3240 3420 3600 y = 3.0000 2.9998 2.9997 2.9996 2.9995 2.9993 2.9992 2.9991 2.9990 2.9988 2.9987 2.9986 2.9985 2.9983 2.9982 2.9981 2.9980 2.9978 2.9977 2.9976 2.9975 El nivel del agua al cabo de una hora serà : x=2.9975m. El error se calcula utilizando la función sdeposito, en la cual tenemos que poner la solución exacta de la ecuación para luego poder hallar el error máximo poniendo max(y-sdeposito(t,y0)); La solución exacta de la ecuanción diferencial : La ecuación diferencial se puede resolver por partes ya que tiene la forma siguiente : Dx/dt=A*(sqrt(x)/x 3/2 ) entonces la solución exacta es : Utilizando la función logistic : function y=sdeposito(t,y0) r= 0.003; g=9.8; y=(y0^(5/2)-t*0.6*pi*r^2*sqrt(2*g)./(pi*20/3)*5/2).^(2/5); Con esta función obtenemos que el herror para el método de Euler es 7.73 10 -8 y para el método de Heun 2.68 10 -13 . 0 500 1000 1500 2000 2500 3000 3500 4000 2.9991 2.9992 2.9993 2.9994 2.9995 2.9996 2.9997 2.9998 2.9999 3 3.0001 Método de Heun file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo...%20(Sistemas)%20-%2019%20(Cualitativa)/practica%2017%20-%20EDO.txt CAMPO DE DIRECCIONES -------------------- >> campo('verhulst',0,3,0,6) >> hold on METODO NUMERICO: EULER ---------------------- >> for k=0:0.1:6 [t,y] = mieuler('verhulst',0:0.01:3,k); plot(t,y,'k') end CALCULO DEL ERROR ----------------- GRAFICAMENTE -------- >> [t,y] = mieuler('verhulst',0:0.01:3,0.2); >> plot(t,y,'g') >> [t,y] = mieuler('verhulst',0:0.005:3,0.2); >> plot(t,y,'r') >> [t,y] = mieuler('verhulst',0:0.0025:3,0.2); >> plot(t,y,'b') CALCULO >> [t,y] = mieuler('verhulst',0:0.01:1,0.2); y1 = y(end) >> [t,y] = mieuler('verhulst',0:0.005:1,0.2); y2 = y(end) >> [t,y] = mieuler('verhulst',0:0.0025:1,0.2); y3 = y(end) >> y2-y1 ans = 0.0110 >> y3-y2 ans = file:///E|/Documentos/Estudios/Documentacion%20Asigna...%20-%2019%20(Cualitativa)/practica%2017%20-%20EDO.txt (1 of 3) [09/03/2008 13:49:42] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo...%20(Sistemas)%20-%2019%20(Cualitativa)/practica%2017%20-%20EDO.txt 0.0054 El doble de orden reduce el error a la mitad. Lineal. Es muy malo METODO NUMERICO: HEUN --------------------- CONVERGENCIA >> [t,y] = heun('verhulst',0:0.01:1,0.2); >> y1 = y(end) y1 = 2.9670 >> [t,y] = heun('verhulst',0:0.005:1,0.2); >> y2= y(end) y2 = 2.9673 >> [t,y] = heun('verhulst',0:0.0025:1,0.2); >> y3 = y(end) y3 = 2.9673 >> (y2 - y1)/(y3-y2) ans = 3.9609 % aprox 4. Aumentar al doble de puntos mejora en 4 la aproximacion es cuadrático METODO NUMERICO: EULER MODIFICADO --------------------- CONVERGENCIA >> [t,y] = eulermod('verhulst',0:0.01:1,0.2); >> y1 = y(end) >> [t,y] = eulermod('verhulst',0:0.005:1,0.2); >> y2= y(end) file:///E|/Documentos/Estudios/Documentacion%20Asigna...%20-%2019%20(Cualitativa)/practica%2017%20-%20EDO.txt (2 of 3) [09/03/2008 13:49:43] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo...%20(Sistemas)%20-%2019%20(Cualitativa)/practica%2017%20-%20EDO.txt >> [t,y] = eulermod('verhulst',0:0.0025:1,0.2); >> y3 = y(end) >> (y2 - y1)/(y3-y2) ans = 3.9475 Convergencia cuadratica Justificacion de la importancia de utilizar método preciso ---------------------------------------------------------- Utilizando un metodo malillo: >> [t,y] = mieuler('verhulst',0:0.3:3,0.2); >> plot(t,y,'k') >> [t,y] = mieuler('verhulst',0:0.7:3,0.2); >> plot(t,y,'r') >> [t,y] = mieuler('verhulst',0:0.6:40,0.2); plot(t,y,'r') se desmadra totalmente file:///E|/Documentos/Estudios/Documentacion%20Asigna...%20-%2019%20(Cualitativa)/practica%2017%20-%20EDO.txt (3 of 3) [09/03/2008 13:49:43] ______________________________________________________________________ 1 18. Sistemas de ecuaciones diferenciales En el tema anterior hemos desarrollado métodos numéricos para resolver ecuaciones diferenciales ordinarias de primer orden, que aparecen en las aplicaciones cuando se conoce cómo varía una magnitud y con respecto a otra, generalmente el tiempo t. En este tema, generalizaremos dichos métodos a situaciones que involucren la variación con respecto a t de varias magnitudes, o bien, aquellas en la que intervienen derivadas de y de orden mayor que 1. En el primer caso se trata de los sistemas de ecuaciones diferenciales, y en el segundo de las ecuaciones diferenciales de orden superior. Un ejemplo típico de sistema diferencial surge al estudiar la evolución de dos poblaciones biológicas relacionadas entre sí. Conocidas leyes físicas, como la ley de Newton, F = m·a, dan lugar a ecuaciones diferenciales de orden superior, en este caso de orden 2, pues la aceleración es la derivada segunda de la posición. La generalización buscada es directa y sencilla, consistiendo básicamente en trabajar con vectores en lugar de escalares. Los programas se modifican mínimamente gracias a la capacidad vectorial de MATLAB. Por la misma razón, en lugar de desarrollar métodos específicos para ecuaciones de orden superior, se prefiere transformarlas en sistemas de primer orden, con tantas ecuaciones como el orden de la ecuación dada. Aplicaremos los métodos desarrollados a la resolución de circuitos eléctricos LRC, que dan lugar a ecuaciones diferenciales lineales de segundo orden con coeficientes constantes. Como estas ecuaciones se resuelven analíticamente, en cualquier momento podemos comprobar la precisión de los resultados numéricos. Naturalmente, éstos son realmente útiles cuando no se dispone de una expresión analítica adecuada de la solución. 18.1. Ecuaciones de orden superior y sistemas Una sistema de ecuaciones diferenciales expresa las relaciones que verifican varias funciones desconocidas, y 1 (t), y 2 (t), ..., y m (t) y sus derivadas respecto a la variable t. El objetivo es determinar estas funciones en un intervalo [a, b]. En el caso más sencillo, la derivada primera de cada función puede expresarse explícitamente en términos de la variable independiente y de las funciones incógnita. ¦ ¦ ) ¦ ¦ ` ¹ = ′ = ′ = ′ )) ( ),..., ( ), ( , ( ) ( )) ( ),..., ( ), ( , ( ) ( )) ( ),..., ( ), ( , ( ) ( 2 1 2 1 2 2 2 1 1 1 t y t y t y t f t y t y t y t y t f t y t y t y t y t f t y m m m m m M Sistemas de ecuaciones diferenciales 2 Las m ecuaciones admiten una escritura compacta en términos vectoriales. Considerando las incógnitas como componentes de una función vectorial de una variable ( ) m m R I R I t y t y t y t → = : ) ( , ), ( ), ( ) ( 2 1 K y y las ecuaciones, como componentes de una función vectorial de varias variables ( ) m m m R I R I t t f t t f t t f t t → = +1 2 1 : )) ( , ( , )), ( , ( )), ( , ( )) ( , ( y y y y f K el sistema diferencial se escribe formalmente igual que una ecuación diferencial )) ( , ( ) ( t t t y f y = ′ El Problema de Valor Inicial consiste en resolver este sistema dado el valor en el instante inicial a, ( ) a y y = = ) ( , ), ( ), ( ) ( 2 1 a y a y a y a m K La notación vectorial sugiere la extensión de los métodos numéricos de ecuaciones diferenciales ordinarias a los sistemas de ecuaciones diferenciales, efectuando componente a componente las operaciones de estos métodos. Ejemplo 1 Dos especies viven en determinado medio y una de ellas se alimenta de la otra, por ejemplo, zorros y conejos. Si no fuera por los zorros, los conejos se reproducirían proporcionalmente a su población, pues encuentran en el medio suficientes recursos para alimentarse. Los conejos son devorados por los zorros a velocidad proporcional al producto del número de zorros, z(t), por el número de conejos, c(t). La proliferación de los zorros depende de la cantidad de conejos que pueden cazar, que suponemos proporcional al número de encuentros entre zorros y conejos, que, a su vez, es proporcional al producto de sus poblaciones respectivas. Asimismo, si hay demasiados zorros, han de competir entre ellos por el alimento. El factor de competencia se considera proporcional al cuadrado de la población de zorros. Estas ideas se resumen en el sistema diferencial ) ` ¹ + − = − = z c z z z c c c δ γ β α 2 ' ' donde α, β, γ y δ son constantes apropiadas. Las ecuaciones diferenciales de orden m involucran la función incógnita y(t) y sus derivadas hasta el orden m. Supondremos que la ecuación está en forma explícita, es decir, con la derivada de mayor orden expresada en función de las demás y en su caso de la variable independiente. ( ) ) 1 ( ) ( ), ( ), ( ), ( , ) ( − ′ ′ ′ = m m y t y t y t y t f t y K Las ecuaciones diferenciales de orden superior al primero se transforman en sistemas mediante un cambio de variables. Llamando y 1 a la función incógnita y, y 2 a su derivada y', y 3 a la derivada segunda y", y así sucesivamente, queda el sistema equivalente Ecuaciones de orden superior y sistemas 3 ¦ ¦ ¦ ) ¦ ¦ ¦ ` ¹ = ′ = ′ = ′ = ′ )) ( ..., ), ( ), ( , ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( 2 1 4 3 3 2 2 1 t y t y t y t f t y t y t y t y t y t y t y m m M Ejemplo 2 Un circuito eléctrico LRC consta de una resistencia, una bobina y un condensador conectados en serie con una fuente de energía eléctrica. Si denotamos por R el valor de la resistencia, por L la inductancia de la bobina y por C la capacidad del condensador y suponemos que la tensión en la fuente viene dada por una función del tiempo E(t), entonces, el comportamiento del circuito viene dado por la ecuación ) (t E C Q RI I L = + + ′ donde Q es la carga en el condensador e Q I ′ = es la intensidad de la corriente por el circuito. Al fijar los valores de Q e I en 0 = t se obtiene un problema de valor inicial. Si expresamos I e I' en función de Q, queda una ecuación diferencial de segundo orden ) (t E C Q Q R Q L = + ′ + ′ ′ Tomando en cambio como variables Q e I, obtenemos el sistema equivalente de primer orden ¦ ) ¦ ` ¹ | . | \ | − − = ′ = ′ L RI C Q t E I I Q ) ( 18.2. Método de Euler Consideramos el problema de valor inicial asociado a un sistema de m ecuaciones diferenciales y a unos valores iniciales dados )) ( , ( ) ( t t t y f y = ′ , a a b a t y y = ∈ ) ( ]; , [ Para cada t, y(t) e y'(t) son vectores m-dimensionales. Salvo este pequeño detalle, el método de Euler se aplica igual que en el caso unidimensional. Dividimos el intervalo [a, b] en n partes iguales h k a t n a b h k * ) 1 ( / ) ( − + = − = E(t) C R L Sistemas de ecuaciones diferenciales 4 y estimamos iterativamente el valor de la solución en cada nodo según a t y y y = = 1 1 ) ( Para k = 1, 2, …, m ) , ( · ) ( 1 1 k k k k k t h t y f y y y + = ≅ + + Vamos a programar el método de Euler para sistemas diferenciales, mediante una función cuyas entradas y salidas sean análogas a las de los métodos implementados en MATLAB. Consultando la ayuda de ODE23, vemos que la sintaxis más sencilla es [t,y] = ode23(odefun,tspan,y0) donde odefun es el fichero de la ecuación diferencial, tspan es el intervalo de integración e y0 la condición inicial. La salida proporciona una matriz y cuyas columnas son las componentes de la solución en los instantes dados por t. Cada fila de y contiene el valor de la solución en el instante correspondiente de t. El vector tspan puede ser de la forma [a,b], siendo a y b los extremos del intervalo en que se quiere calcular la solución, o bien un vector que contenga todos los instantes en los que se requiere conocerla. En el primer caso, el algoritmo determina los puntos a evaluar, en función de la precisión requerida. Nuestros algoritmos usan la versión extensa de tspan, ya que son de paso fijo. La llamada a la función odefun dy = odefun(t,y) tiene dos argumentos de entrada, aunque no utilice el primero, y debe producir una columna dy con las derivadas dadas por el sistema diferencial, f(t, y). Damos a continuación un posible código del método de Euler, de acuerdo con estas observaciones. En cada paso, al algoritmo añade una fila a la matriz y con el valor calculado de la solución para el instante siguiente. function [t,y]=mieuler(f,t,y0) % Método de Euler para el problema de valor inicial % % y'(t) = f(t,y(t)); y(t0)=y0; % % en los instantes dados por t n = lenght(t); h = diff(t); y(1,:) = y0; for k=1:n y(k+1,:) = y(k,:) + h(k)*feval(f,t(k),y(k,:))'; end Curiosamente, MATLAB requiere que al evaluar un sistema diferencial, las derivadas se obtengan en columna, mientras que genera la solución por filas. Por este motivo aparece la transpuesta en el código de mieuler. Método de Euler 5 Ejemplo 3 El fichero siguiente evalúa el sistema diferencial del Ejemplo 1 con determinados valores de los parámetros. ) ` ¹ + − = − = z c z z z c c c δ γ β α 2 ' ' function dy = presarapaz(t,y) % Modelo presa-rapaz (zorros, conejos) % Parametros a=0.4; b=0.01; g=0.01; d=0.01; % Variables c = y(1); z = y(2); % Ecuacion dc = a*c-b*c*z; dz = g*c*z-d*z^2; % Salida dy = [dc; dz]; Resolvamos el problema de valor inicial con partiendo de c = z = 10, en un tiempo de 30 unidades, por el método de Euler con 1000 subintervalos. tspan = 0:0.03:30; [t,y] = mieuler('presarap',tspan,[10,10]); El gráfico muestra la evolución de las poblaciones con el tiempo, observándose que tienden a una situación estable con 40 individuos de cada especie. plot(t,y) Sistemas de ecuaciones diferenciales 6 0 5 10 15 20 25 30 10 20 30 40 50 60 70 En este otro gráfico se observa la interrelación entre ambas poblaciones. plot(y(:,1),y(:,2)) xlabel('conejos') ylabel('zorros') 10 20 30 40 50 60 70 10 15 20 25 30 35 40 45 50 55 conejos z o r r o s Cada punto de la trayectoria muestra las poblaciones de ambas especies en un momento dado. La trayectoria se recorre en sentido antihorario. Se observa que cuando la población de conejos es grande, la de zorros aumenta, lo que a su vez hace disminuir Método de Euler 7 el número de conejos. el aumento de zorros provoca mayor competencia entre ellos además de escasez de conejos, con lo que la población de zorros se reduce. En este caso los valores de los parámetros hacen que el sistema tienda al equilibrio rápidamente, pero con otros valores, el comportamiento puede ser distinto, provocando, por ejemplo, la extinción de una especie. Ejemplo 4 Consideremos circuito eléctrico LRC en el que no hay tensión impresa y la resistencia es cero. La solución general de la ecuación diferencial del circuito 0 = + ′ ′ C Q Q L es t B t A Q 0 0 sin cos ω ω + = donde A y B dependen de las condiciones iniciales. En ausencia de resistencia, el circuito no pierde energía y presenta oscilaciones periódicas sinusoidales de frecuencia angular . 1 0 LC = ω El fichero siguiente codifica el sistema diferencial ¦ ) ¦ ` ¹ | . | \ | − − = ′ = ′ L RI C Q t E I I Q ) ( de un circuito genérico LRC. En el propio fichero se establecen los parámetros del circuito concreto. Damos valores convencionales a los datos para simplificar los cálculos; los valores reales suelen estar en diferente escala. function dy=lrc(t,y) % Circuito LRC % LI' + RI + Q/C = E(t) % Prametros del circuito L = 2; R = 0; C = 1; E = 0; % Variables Q = y(1); I = y(2); % Ecuación dQ = I; dI = (E-Q/C-R*I)/L; % Salida dy = [dQ;dI]; E(t) C R L Sistemas de ecuaciones diferenciales 8 Resolvamos el circuito por el método de Euler en un intervalo de 30 segundos con 1000 subintervalos tspan = 0:0.03:30; [t,y] = mieuler('lrc',tspan,[1,0]); plot(t,y) grid 0 5 10 15 20 25 30 -1.5 -1 -0.5 0 0.5 1 1.5 El gráfico tiene algo inesperado, pues la amplitud de las oscilaciones va en aumento, en lugar de mantenerse constante. Esto no tiene sentido físico, porque supone que el circuito genera energía. Concluimos que es debido a la limitada precisión del método de Euler. Podemos mejorar la precisión aumentando el número de pasos de integración, pero así aumenta también el coste computacional. La alternativa es recurrir a un método de mayor orden, como puede ser el método de Heun o el de Runge-Kutta. 18.3. Método de Runge-Kutta Recordemos las fórmulas de Runge-Kutta del caso escalar y las adaptamos al problema de valor inicial )) ( , ( ) ( t t t y f y = ′ , a a b a t y y = ∈ ) ( ]; , [ Dividimos el intervalo [a, b] en n partes iguales h k a t n a b h k * ) 1 ( / ) ( − + = − = y estimamos iterativamente el valor de la solución en cada nodo según a t y y y = = 1 1 ) ( Método de Runge-Kutta 9 Para k = 1, 2, …, m ) * 2 * 2 ( 6 / ) ( ) · , ( ) · 2 / , 2 / ( ) · 2 / , 2 / ( ) , ( 4 3 2 1 1 1 3 4 2 3 1 2 1 k k k k y y y k y f k k y f k k y f k y f k + + + + = ≅ + + = + + = + + = = + + h t h h t h h t h h t t k k k k k k k k k k k Codificamos el método de Runge-Kutta para sistemas, teniendo en cuenta las observaciones anteriores sobre la sintaxis de estas funciones. function [t,y]=rungekut(f,t,y0) % Método de Runge-Kutta para el problema de valor inicial % % y'(t) = f(t,y(t)); y(t0)=y0; % % en los instantes dados por t h = diff(t); n = length(t); y(1,:) = y0; for k=1:n-1 k1 = feval(f,t(k), y(k,:))'; k2 = feval(f,t(k)+h(k)/2, y(k,:)+h(k)/2*k1)'; k3 = feval(f,t(k)+h(k)/2, y(k,:)+h(k)/2*k2)'; k4 = feval(f,t(k+1),y(k,:)+h(k)*k3)'; y(k+1,:) = y(k,:)+h(k)/6*(k1+2*k2+2*k3+k4); end Ejemplo 5 Aplicando Runge-Kutta al problema de valor inicial del ejemplo anterior con el mismo número de subintervalos, obtenemos un resultado más coherente con lo esperado desde el punto de vista físico. tspan = 0:0.03:30; [t,y] = rungekut('lrc',tspan,[1,0]); plot(t,y) grid Sistemas de ecuaciones diferenciales 10 0 5 10 15 20 25 30 -1 -0.5 0 0.5 1 18.4. Paso de parámetros mediante variables globales Para analizar el modelo del circuito LRC con distintos parámetros no resulta muy cómodo tener que editar el fichero de la función lrc.m cada vez que se desea modificar uno de ellos. Este inconveniente se puede evitar definiendo como variables globales aquellos parámetros que deseamos modificar. La sintaxis del fichero del sistema de ecuaciones diferenciales quedaría como sigue. function dy=lrcg(t,y) % Circuito LRC % LI' + RI + Q/C = E(t) % Prametros del circuito global L R C E = 0; % Variables Q = y(1); I = y(2); % Ecuación dQ = I; dI = (E-Q/C-R*I)/L; % Salida dy = [dQ;dI]; Las variables globales se asignarían desde el espacio de trabajo o desde otro fichero. En ambos casos, previamente hay que declarar globales dichas variables. Ejemplo 6 En un circuito eléctrico real, la resistencia siempre es positiva y parte de la energía eléctrica se transforma en calor. En ausencia de fuentes de potencial, la intensidad y la carga en el circuito se anulan con el tiempo. Dependiendo del valor de la resistencia, se producen oscilaciones o no, hasta que se anula la corriente. Por ejemplo, E(t) C R L Método de Runge-Kutta 11 tomando R = 0.2, se producen oscilaciones de amplitud decreciente (subamortiguadas). global L R C L=1;C=1;R=0.2; tspan = 0:0.03:30; [t,y] = rungekut('lrcg',tspan,[1,0]); plot(t,y) grid 0 5 10 15 20 25 30 -1 -0.5 0 0.5 1 En cambio, con R = 2, el circuito está sobreamortiguado y no se producen oscilaciones en el tránsito a la estabilidad. R=2; tspan = 0:0.01:10; [t,y] = rungekut('lrcg',tspan,[1,0]); plot(t,y) grid 18.5. Uso de las funciones de MATLAB para sistemas diferenciales MATLAB dispone de diversas funciones para resolver ecuaciones diferenciales, aplicando en cada caso métodos apropiados. Los métodos elementales corresponden a las funciones ODE23 y ODE45. Consultando la ayuda de cualquiera de ellas, se obtiene además la lista de métodos disponibles. La diferencia fundamental entre los métodos elementales que hemos programado, Euler, Heun, Runge-Kutta y los de MATLAB, es que en estos últimos, el paso de integración se determina dinámicamente, en función del comportamiento de la ecuación 0 1 2 3 4 5 6 7 8 9 10 -0.5 0 0.5 1 Sistemas de ecuaciones diferenciales 12 y con el objetivo de que el error estimado esté dentro de cierta tolerancia, mientras que en los métodos que hemos programado nosotros, el paso es fijo. Como ya hemos indicado, la llamada básica a las funciones de MATLAB es del tipo [t,y] = ode23(odefun,tspan,y0) donde tspan puede contener, como antes, todos los nodos, o bien, sólo los extremos del intervalo. En la ayuda se describen numerosas variantes y opciones de estos comandos. Por ejemplo, omitiendo los argumentos de salida, se obtiene la gráfica de la solución. ode23('lrcg',[0,10],[1,0]); Como se aprecia en la figura, los nodos no están equiespaciados. Si queremos forzar que la solución se evalúe en puntos determinados, hemos de introducirlos en tspan, tal como la hacemos con nuestros algoritmos. 18.6. Problemas 18.6.1. Enunciados 1.- Emplea el método de Runge-Kutta aplicado a sistemas para aproximar las soluciones a los siguientes problemas de valor inicial. Compara, numérica y gráficamente, el resultado obtenido en cada caso con la solución exacta. a) ( ) ( ) | | ( ) ( ) 2 2 2 2 ' 3 2 2 1 0 1 0,1 ' 4 2 4 0 1 t t x x y t e x t y x y t t e y = + − + = ∈ = + + + − = Solución exacta: ( ) ( ) 5 5 2 2 2 2 3 3 3 3 t t t t t t e e e e x t e y t t e − − = − + = + + b) ( ) | | ( ) ( ) ' 0 1 0, 2 ' 2 +1 0 0 ' +1 0 1 t t x y x t y x e y z x e z = = ∈ = − − = = − − = 0 1 2 3 4 5 6 7 8 9 10 -0.5 0 0.5 1 Problema 13 Solución exacta: ( ) ( ) ( ) cos sen +1 sen cos sen cos t t x t t t e y t t t e z t t t = + − = − + − = − + 2.- Una masa m suspendida de un alambre inextensible de longitud l y masa despreciable oscila en un plano vertical, sometido a la acción de la gravedad y a la resistencia del aire. Denotamos por y la desviación en radianes del péndulo respecto a la vertical y suponemos que la resistencia del aire es proporcional a la velocidad del péndulo. La ecuación que rige su movimiento será '' sen ( ) ' g k y y t y l m = − − − a) Resuelve el movimiento del péndulo no amortiguado (k=0) con distintos métodos y diferente número de puntos. b) Estudia el comportamiento del péndulo amortiguado para distintos valores de k. c) Considera ahora que el péndulo que recibe un impulso exterior h(t)=cos(t). Estudia su comportamiento para distintos valores iniciales de la velocidad. 3.- Estudia el circuito Comprueba numéricamente que el método de Runge-Kutta es de orden 4 comparando los resultados en un punto con diferentes pasos. 4.- Un péndulo de Foucault proporciona la demostración empírica de la rotación terrestre: el plano de oscilación del péndulo gira con el tiempo de manera que tras un cierto periodo que depende de la latitud del observador, vuelve a su posición original. Las ecuaciones de movimiento son: ( ) ( ) 2 2 2 sen ' 0 2 sen ' 0 x y k x y x k y ω ϕ ω ϕ ′′ − + = ′′ + + = donde 5 1 7.29 10 s ω − − = ⋅ es la velocidad angular de la rotación terrestre, ϕ es la latitud del observador y la constante 2 g k l = depende de la aceleración de la gravedad g y la longitud del péndulo l. Para iniciar el movimiento se sitúa el péndulo en la posición x = −6, y = 0 y se deja en movimiento libre. Calcula la posición del péndulo en el instante t = 3600 con un paso temporal de 0.5 segundos. ¿Cuánto tiempo es necesario para que un péndulo de 10 m de longitud gire su plano de oscilación 45º en Valencia, con una latitud de 40º? ¿Cuánto tiempo tarda el plano de oscilación en girar 360º en el polo norte? ¿Y en el ecuador? E(t)=sin(100t) C=10 -3 F R=10 Ohm L=8 H I 1 I 2 Sistemas de ecuaciones diferenciales 14 -Las ecuaciones del movimiento de un satélite puesto en órbita desde la Estación Espacial Internacional son 0 0 3 0 3 " , (0) , '(0) " , (0) 0, '(0) x y x x x x x v r y y y y v r u u ¹ = − = = ¦ ¦ ` ¦ = − = = ¦ ) donde 2 2 r x y = + es la distancia a la Tierra, situada en el origen de coordenadas y ( ) 3 2 398598.309 T S G M m km s u − = ⋅ + ≅ es el llamado parámetro gravitacional, en el que se considera nula la masa de satélite respecto a la de la Tierra. Consideramos que la estación espacial está situada en el punto x 0 del eje de abscisas y v x0 , v y0 son las componentes de la velocidad inicial. a) Convierte el sistema de orden 2 en uno de primer orden. b) Considerando las condiciones iniciales: ( ) ( ) ( ) ( ) -1 -1 0 42167.911 ' 0 1.07168 s 0 0 ' 0 2.8827 s x km x km y km y km = = − = = Resuelve el problema de valor inicial empleando la función de MATLAB ode23, encontrando la posición del satélite respecto a la Tierra transcurridas 24 horas desde su lanzamiento. c) Dado que las variables x e y dependen del tiempo, podemos considerar la trayectoria del satélite en el espacio situada en un plano que contiene al ecuador terrestre. Representa dicha trayectoria situando en el origen de coordenadas una esfera de radio 6378.1 T R = km. 7.- Utiliza el algoritmo de Runge-Kutta para aproximar la solución del problema de valor inicial: | | ( ) ( ) ( ) 4 6 1,1.9 1 1 ' 1 1 1 2 y y t y y y ′′′ = − ∈ ′′ = − = − = − Emplea el paso h = 0.05 y compara los resultados, numérica y gráficamente, con la solución exacta ( ) 1 2 y t t = − . 18.6.2. Soluciones 2.- a) Primero definimos la función function dy=pendulo(t,y) k=0; %Resistencia del medio m=1; %Masa g=9.81; %Aceleración de la gravedad l=1; %Longitud del péndulo dy=[y(2);-g/l*sin(y(1))-k/m*y(2)]; Problema 15 Luego calculamos la solución en el intervalo [0,10] con el método de Euler con dos pasos diferentes: t=linspace(0,10,401); [t,y]=mieuler('pendulo',t,[0.1,0]); t2=linspace(0,10,10001); [t2,y2]=mieuler('pendulo',t2,[0.1,0]); plot(t,y,'-',t2,y2,'--') title('Péndulo-Método de Euler') 0 1 2 3 4 5 6 7 8 9 10 -1 -0.5 0 0.5 1 1.5 Péndulo-Método de Euler Como pasaba con el circuito eléctrico, si se toman pocos puntos la energía aumenta. Con el método de Runge-Kutta no sucede esto t=linspace(0,10,201); [t,y]=rungekut('pendulo',t,[0.1,0]); t2=linspace(0,10,401); [t2,y2]=rungekut('pendulo',t2,[0.1,0]); plot(t,y,'-',t2,y2,'--') 0 1 2 3 4 5 6 7 8 9 10 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 Péndulo-Método de Runge-Kutta b) Vamos a tomar por ejemplo k=0,0.5 y 10. Si utilizamos el método de Runge Kutta dividiendo el intervalo en 200 subintervalos se obtiene t=linspace(0,10,201); k=0;[t,y]=rungekut('pendulo',t,[0.1,0.]); k=0.5;[t,y2]=rungekut('pendulo',t,[0.1,0.]); k=10;[t,y3]=rungekut('pendulo',t,[0.1,0.]); plot(t,y,'-',t,y2,'--',t,y3,'-.') ,title('Péndulo amortiguado') Sistemas de ecuaciones diferenciales 16 0 1 2 3 4 5 6 7 8 9 10 -0.4 -0.3 -0.2 -0.1 0 0.1 0.2 0.3 0.4 Péndulo amortiguado Para valores pequeños de k el péndulo va oscilando hasta que se detiene. Para valores grandes no se producen oscilaciones. c) Añadimos al fichero de la ecuación del péndulo el término del forzamiento externo. function dy=pendulo(t,y) k=0.; %Resistencia del medio m=1; %Masa g=9.81; %Aceleración de la gravedad l=10; %Longitud del péndulo dy=[y(2);-g/l*sin(y(1))-k/m*y(2)+cos(t)]; Por analogía con el caso del oscilador lineal, se puede suponer que hay una parte transitoria que decrece exponencialmente y al final de la oscilación sigue la de cos(t). Sin embargo el comportamiento del sistema hasta alcanzar el estado estacionario es difícil de prever. Vamos a resolver el sistema partiendo del reposo y con una velocidad inicial 2.7. t=linspace(0,200,2001);[t,y]=rungekut('pendulof',t,[0,2.7]); plot(t,y(:,1)),hold La gráfica indica que el péndulo da unas cuantas vueltas completas antes de estabilizarse. Esto podría ser debido a que se le ha dado demasiado impulso. Podemos probar con una velocidad inicial 2.5. [t,y]=rungekut('pendulof',t,[0,2.5]); Ahora el péndulo se estabiliza antes. Parece que cada vez el comportamiento es menos caótico. Se puede probar con menos velocidad, por ejemplo 2.3 y 2.1. Problema 17 0 20 40 60 80 100 120 140 160 180 200 -5 0 5 10 15 20 25 30 Tiempo Á n g u l o Péndulo forzado w 0 =2.7 w 0 =2.5 w 0 =2.3 w 0 =2.1 En el caso de 2.3 hay menos oscilaciones, pero en para 2.1 parece que vuelva a empezar a oscilar. Podemos probar con 1.9 0 20 40 60 80 100 120 140 160 180 200 -5 0 5 10 15 20 25 30 35 Á n g u l o Tiempo Péndulo forzado Ahora el comportamiento vuelve a ser bastante caótico. Se observa que es difícil hacer predicciones para un tiempo futuro. 3.- Igualando la diferencia de potencial en el condensador y en la bobina obtenemos la ecuación 2 1 I L C Q ′ = donde Q 1 es la carga del condensador. La caída de potencial en la malla derecha y la ley de los nudos proporcionan ) ( ) ( 2 1 1 t E R I I C Q = + + Derivando y teniendo en cuenta que , 1 1 I Q = ′ se obtiene E(t)=sin(100t) C=10 -3 F R=10 Ohm L=8 H I 1 I 2 Sistemas de ecuaciones diferenciales 18 ) ( ) ( 2 1 1 t E R I I C I ′ = ′ + ′ + Tomando como variables Q 1 , I 1 e I 2 , queda el sistema diferencial siguiente LC Q I R LC Q C I t E I I Q 1 2 1 1 1 1 1 ) ( = ′ | . | \ | − − ′ = ′ = ′ Este sistema se codifica en el fichero siguiente function dy=lrc2(t,y) L=8;R=10;C=1e-3; dE = 100*cos(100*t); % Variables Q1 = y(1); I1 = y(2); I2=y(3); % Ecuación dQ1 = I1; dI1 = (dE-I1/C-Q1/L/C)/R; dI2=Q/L/C; % Salida dy = [dQ;dI1;dI2]; Resolvemos el problema en un intervalo de 0.1 segundos y representamos el resultado. [t1,y1] = rungekut('lrc2',0:1e-3:1e-1,[0,0,0]); plot(t1,y1) grid 0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 -0.1 -0.05 0 0.05 0.1 El aparente aumento de la amplitud de las oscilaciones cesa en poco tiempo, quedando un comportamiento periódico. Para comprobar el orden del método de Runge-Kutta, obtenemos la solución en un punto, 0.1 por ejemplo con pasos diferentes, cada uno la mitad del anterior. Estimando el error mediante la diferencia entre la solución con paso h y la solución con paso h/2, Problema 19 comprobamos que ésta se divide aproximadamente por 2 4 =16 cada vez que el paso se divide por 2. [t2,y2] = rungekut('lrc2',0:0.5e-3:1e-1,[0,0,0]); [t3,y3] = rungekut('lrc2',0:0.25e-3:1e-1,[0,0,0]); (y1(end,:)-y2(end,:))./(y2(end,:)-y3(end,:)) ans = 16.1252 16.1313 16.2393 4.- Comenzaremos transformando el sistema de orden dos: ( ) ( ) 2 2 2 sen ' 0 2 sen ' 0 x y k x y x k y ω ϕ ω ϕ ′′ − + = ′′ + + = en uno de primer orden. para ello definimos las variables: 1 2 3 4 z ' z z ' z x x y y = = = = cuyas derivadas nos permiten definir el sistema de primer orden: ( ) ( ) 1 2 2 2 4 1 3 4 2 4 2 3 2 sen 2 sen z z z z k z z z z z k z ω ϕ ω ϕ ′ = ′ = − ′ = ′ = − − que almacenamos en la función: function w=foucault(t,z) global fi k om w=[z(2) ; 2*om*sin(fi)*z(4)-k*z(1) ; z(4) ; -2*om*sin(fi)*z(2)-k*z(3)]; donde declaramos como variables globales la latitud ϕ y las constantes w y k. Para estudiar el comportamiento del péndulo de Foucault en Valencia (latitud 40º), definimos los valores de las constantes: global fi k2 om fi=40*pi/180; om=7.29e-5; k2=9.8/10; Definimos el vector de condiciones iniciales y el vector de nodos: z0=[-6 0 1 0]; t=0:.5:3600; y resolvemos con el método de Runge-Kutta y las variables de entrada ya definidas: [t,y]=rungekut('foucault',t,z0); sol1=y(end,:) Si representamos gráficamente el movimiento cada una de las componentes de la posición y velocidad del péndulo respecto al tiempo): plot(t,y(,1:2)), title('Representación de las curvas x(t),vx(t)') observamos cómo la atracción gravitatoria hace que la amplitud de oscilación (en ambas variables) disminuya con el tiempo. Al observar en detalle la posición del péndulo el primer minuto notamos el carácter ondulatorio del movimiento. plot(t(1:120),y(1:120,1:2)), title('Representación de las curvas x(t),vx(t)') Sistemas de ecuaciones diferenciales 20 0 10 20 30 40 50 60 -6 -4 -2 0 2 4 6 Representación de las curvas x(t),vx(t) plot(t,y(:,3:4)) title('Representación de las curvas y(t),vy(t)') 0 10 20 30 40 50 60 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 Representación de las curvas y(t),vy(t) Por otra parte, la representación conjunta de las variables x e y nos muestra cómo el plano de oscilación gira con el tiempo: plot(y(:,1),y(:,3)) 0 500 1000 1500 2000 2500 3000 3500 4000 -6 -4 -2 0 2 4 6 Representación de las curvas x(t),vx(t) Problema 21 -6 -4 -2 0 2 4 6 -1.5 -1 -0.5 0 0.5 1 1.5 Para averiguar cuánto tiempo necesita el plano de oscilación del péndulo de Foucault situado en Valencia para girar 45 grados, calculamos el ángulo (en grados) girado en la primera hora de movimiento: angfi=atan2(y(end,3),y(end,1)) angin=atan2(1,-6) horang=abs(angfi-angin)*180/pi angfi = 2.8080 angin = 2.9764 horang = 9.6498 y el tiempo necesario para girar 45º es de 4 horas, 39 minutos y 47.88 segundos: t45=45/horang t45 = 4.6633 Al cambiar de situación geográfica, un aumento de latitud provoca una aceleración del giro del plano de oscilación del péndulo, mientras que el acercamiento del péndulo al ecuador hace que el plano de oscilación permanezca constante. Para observar este efecto, basta con modificar el valor de la variable latitud. En el polo norte, la latitud es de 90º; observemos el giro del plano de oscilación en el mismo intervalo de tiempo: fi=pi/2 % latitud en radianes [t,y]=rungekut('foucault',t,z0); plot(y(:,1),y(:,3)) Sistemas de ecuaciones diferenciales 22 -6 -4 -2 0 2 4 6 -1.5 -1 -0.5 0 0.5 1 1.5 A continuación calculamos el ángulo de giro por hora: angfi=atan2(y(end,3),y(end,1)) angin=atan2(1,-6) horang=abs(angfi-angin)*180/pi angfi = 2.7144 angin = 2.9764 horang = 15.0123 de lo que se deduce que, en un día, el plano de oscilación del péndulo situado en el polo norte da una vuelta completa: horang*24 ans = 360.2964 Sin embargo, en el ecuador el plano de oscilación no gira: fi=0; [t,y]=rungekut('foucault',t,z0); plot(y(:,1),y(:,3)) Problema 23 -6 -4 -2 0 2 4 6 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 El problema de valor inicial 0 0 3 0 3 " , (0) , '(0) " , (0) 0, '(0) x y x x x x x v r y y y y v r u u ¹ = − = = ¦ ¦ ` ¦ = − = = ¦ ) puede reescribirse como un sistema de cuatro ecuaciones diferenciales de primer orden, introduciendo las nuevas variables: 1 2 3 4 z ' z z ' z x x y y = = = = cuyas derivadas definen el sistema: ( ) ( ) 1 2 1 2 3 2 2 2 1 3 3 4 3 4 3 2 2 2 1 3 z z z z nu z z z z z z nu z z ′ = ′ = − ⋅ + ′ = ′ = − ⋅ + Almacenamos este sistema en la función satelite.m: function w=satelite(t,z) nu=398598.309; den=(z(1)^2+z(3)^2)^(3/2); w=[z(2); -nu*z(1)/den; z(4); -nu*z(3)/den]; Para aproximar la trayectoria del satélite en torno a la Tierra, definimos en primer lugar el vector de condiciones iniciales: z0=[39511.0557, -1.07168, 14693.8542, 2.8827]; Sistemas de ecuaciones diferenciales 24 El vector de nodos que emplearemos en la resolución del problema es t=0:60:24*3600; y la posición y velocidad del satélite en ese instante: [t,y]=ode23('satelite',t,z0);y(end,:) ans = 1.0e+004 * 4.48250114876932 0.00002440421634 - 1.95975100215809 0.00026074263059 Se comprueba fácilmente que un intervalo de tiempo menor no permite al satélite completar la órbita en torno a la Tierra. Concluimos, por tanto, que el periodo orbital es de un día. [t,y]=ode23('satelite',0:60:22*3600,z0);plot(y(:,1),y(:,3)) -5 -4 -3 -2 -1 0 1 2 3 4 5 x 10 4 -5 -4 -3 -2 -1 0 1 2 3 4 5 x 10 4 Para representar una esfera centrada en el origen con radio R T , y la trayectoria del satélite en torno a ella: [t,y]=ode23('satelite',t,z0); plot3(y(:,1),y(:,3),zeros(size(y(:,1)))), hold on [X,Y,Z]=sphere(50); X=6378.1*X; Y=6378.1*Y; Z=6378.1*Z; plot3(X,Y,Z), axis equal Problema 25 -4 -3 -2 -1 0 1 2 3 4 x 10 4 -4 -3 -2 -1 0 1 2 3 4 x 10 4 -5000 0 5000 file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labor...%20(EDO)-%2018%20(Sistemas)%20-%2019%20(Cualitativa)/practica18.txt Zorros contra Conejos --------------------- >> tspan = 0:0.03:30; >> [t,y] = mieuler('presarapaz',tspan,[10,10]); ----------------------- Grafico vs tiempo >> plot(t,y(:,1),'g'); >> hold on >> plot(t,y(:,2),'r'); ----------------------- Conejos vs Zorros >> plot(y(:,1),y(:,2)) Circuito LRC (sin R) ------------ >> [t,y] = mieuler('lrc',tspan,[10,10]); >> plot(t,y(:,1),'g'); hold on plot(t,y(:,2),'r'); Sale que va creciendo sin haber fem! Imposible Se debe a fallos en Euler. Como es lineal requiere muchos calculos -> errores redondeo habria que aumentar la 'resolucion' [t,y] = mieuler('lrc',0:0.003:30,[10,10]); Aun asi sigue aumentando bastante... Solucion: Runge-Kutta (adaptada a vectores) --------------------- [t,y] = rungekut('lrc',0:0.03:30,[1,0]); plot(t,y(:,1),'g'); hold on plot(t,y(:,2),'r'); file:///E|/Documentos/Estudios/Documentacion%20Asignatu...18%20(Sistemas)%20-%2019%20(Cualitativa)/practica18.txt (1 of 3) [09/03/2008 13:49:48] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labor...%20(EDO)-%2018%20(Sistemas)%20-%2019%20(Cualitativa)/practica18.txt Circuito LRC (con R) (fichero lrcg con variables globales) ---------------------------------------------------------- >> global L R C >> L = 2; R=0.3; C=1; >> [t,y] = rungekut('lrcg',0:0.03:30,[1,0]); plot(t,y(:,1),'g'); hold on plot(t,y(:,2),'r'); se puede ir probando >> R = 3 >> close; [t,y] = rungekut('lrcg',0:0.03:30,[1,0]); plot(t,y(:,1),'g'); hold on; plot(t,y(:,2),'r'); grid >> C = 3 >> close; [t,y] = rungekut('lrcg',0:0.03:30,[1,0]); plot(t,y(:,1),'g'); hold on; plot(t,y(:,2),'r'); grid >> R =0.3 >> close; [t,y] = rungekut('lrcg',0:0.03:30,[1,0]); plot(t,y(:,1),'g'); hold on; plot(t,y(:,2),'r'); grid Funcion de Matlab ----------------- (ODE45) >> close; [t,y] = ode45('lrcg',0:0.03:30,[1,0]); plot(t,y(:,1),'g'); hold on; plot(t,y(:,2),'r'); grid Si no le damos salido lo dibuja el solito. Ademas le podemos dar el intervalo y pone los puntos segun convenga >> C = 0.3; R = 2 >> ode45('lrcg',[0,30],[1,0]); Comprobacion de que el error Runge-Kutte es orden 4. ---------------------------------------------------- ----------------------------------------------------- El doble de puntos hace un error 2^4 = 16 veces menor ----------------------------------------------------- >> h=0.05; [t,y1] = rungekut('lrcg',0:h:2,[1,0]); [t,y2] = rungekut('lrcg',0:h/2:2,[1,0]); [t,y3] = rungekut('lrcg',0:h/4:2,[1,0]); file:///E|/Documentos/Estudios/Documentacion%20Asignatu...18%20(Sistemas)%20-%2019%20(Cualitativa)/practica18.txt (2 of 3) [09/03/2008 13:49:48] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labor...%20(EDO)-%2018%20(Sistemas)%20-%2019%20(Cualitativa)/practica18.txt (y2(end)-y1(end))/(y3(end)-y2(end)) ans = 17.2394 >> (y2(end,:)-y1(end,:))./(y3(end,:)-y2(end,:)) ans = 15.7684 17.2394 file:///E|/Documentos/Estudios/Documentacion%20Asignatu...18%20(Sistemas)%20-%2019%20(Cualitativa)/practica18.txt (3 of 3) [09/03/2008 13:49:48] ______________________________________________________________________ 19. Teoría cualitativa La teoría cualitativa analiza el comportamiento de las soluciones de un sistema de ecuaciones diferenciales sin necesidad de obtenerlas de forma explícita. Dado que los métodos analíticos sólo nos permiten resolver algunos casos particulares, como los lineales con coeficientes constantes, el análisis cualitativo de dichas soluciones (si hay comportamientos periódicos, puntos a los que tienden las trayectorias o de los que se alejan,…) resulta de gran interés. En este capítulo analizaremos las propiedades cualitativas de las soluciones de sistemas de ecuaciones diferenciales autónomos: ( ) ( ) ( ) 1 1 1 2 2 2 1 2 1 2 , ,..., , ,..., , ,..., n n n n n x f x x x x f x x x x f x x x ′ = ′ = ′ = M es decir, sistemas de ecuaciones diferenciales en los que no aparece de forma explícita la variable independiente t. Empleando notación vectorial, podemos reescribir el sistema anterior del siguiente modo: ( ) ′ = x f x donde y , . ( ) 1 , ,..., n n x x ∈ = x x : n n → f ( ) ( ) ( ) ( ) 1 1 1 ,..., ,..., ,..., n n n f x x f x x = f x En primer lugar, estudiaremos los sistemas lineales con coeficientes constantes, introduciendo ideas que se concretarán más adelante para sistemas no lineales: Soluciones de equilibrio:valores en los que el sistema puede permanecer indefinidamente; en el caso de sistemas lineales, el origen es un punto de equilibrio; Órbitas periódicas: trayectorias cerradas en las que, siendo solución del sistema, el comportamiento se repite tras un cierto tiempo; Estabilidad: dadas dos soluciones muy próximas en un instante concreto, ¿permanecerán próximas en el futuro? ¿Se acercarán a una solución del sistema, se alejarán de ella o quizá seguirán caminos distintos?. Las herramientas que nos permitirán describir este tipo de comportamiento serán los valores propios de la matriz de coeficientes del sistema: si los valores propios son simples, las trayectorias tienden o se alejan de los puntos de equilibrio; los valores propios múltiples provocan comportamientos degenerados, mientras que si son imaginarios puros, las soluciones del sistema serán elipses en torno al punto crítico; dichas elipses degeneran en espirales cuando dichos valores propios tienen parte real no nula. En la segunda sección, el análisis de los sistemas no lineales se centra, por una parte, en encontrar un sistema lineal próximo, cuyo comportamiento en el entorno del punto 1 Teoría cualitativa 2 n x n de equilibrio pueda extrapolarse al sistema no lineal; por otra parte, los sistemas no lineales admiten la existencia de soluciones periódicas a las que tienden (o de las que parten) las trayectorias de su entorno, son los llamados cilcos límite. En esta sección de proporcionan algunos resultados teóricos que permiten deducir o descartar la existencia de trayectorias cerradas. 19.1. Sistemas lineales Consideraremos en esta sección sistemas de n ecuaciones diferenciales de primer orden lineales, con coeficientes constantes: 1 11 1 12 2 1 2 21 1 22 2 2 1 1 2 2 n n n n n n n nn x a x a x a x x a x a x a x x a x a x a x ′ = + + + ′ = + + + ′ = + + + L L M L donde a ij , i = 1,…,n, j = 1,…,n son n 2 constantes reales. Es posible reescribir este sistema, empleando notación matricial, ( ) ' t = ⋅ x A de tal modo que la matriz A es denotada por 11 12 1 21 22 2 1 2 n n n n nn a a a a a a a a a = A L L M M O M L y puede interpretarse como un campo vectorial sobre , que actúa sobre . Así, una solución de este sistema es una curva cuyo vector tangente en un cierto instante t es . n : x : n → A n → n x∈ ( ) A x t ⋅ 19.1.1. Puntos críticos y soluciones periódicas Una solución específica de la ecuación diferencial autónoma ( ) ' = x f x se llama solución de equilibrio (o punto crítico) si es constante en el tiempo, es decir, . Para que x ( ) constante e t = x x e sea solución de equilibrio debe verificar la ecuación diferencial y, al no depender del tiempo, se verifica: ( ) e e ′ = = x f x 0 Así, todos los ceros de la función f(x) son soluciones de equilibrio. En el caso particular de los sistemas lineales, x , cuando la matriz A es no singular puede concluirse que x ( ) ' t = ⋅ A x e = 0 es el único punto crítico del sistema. Ejemplo 1 En el modelo de población de Malthus y Verhulst, las soluciones de equilibrio p e de la ecuación diferencial autónoma de primer orden: ( ), , 0 p p a b p a b ′ = − ⋅ > Sistemas lineales 3 son los ceros de la función , por lo que y ( ) ( ) f p p a b p = − ⋅ 0 e p = e a p b = serán los puntos críticos de la ecuación diferencial. Por otra parte, consideremos una solución x x del problema ( ) t = ( ) ′ = x f x . Si existe tal que , dicha solución recibe el nombre de órbita o solución periódica de la ecuación diferencial o sistema. De este modo, la solución es una trayectoria cerrada que puede recorrerse en p unidades de tiempo. p∈ ( ) ( t p t + = x ) x ) 19.1.2. Plano de fase En dimensión dos, recordemos que una solución del sistema ( ) ( ) 1 2 ' , ' , x f x y y f x y = = es una función vectorial ( ) que satisface las ecuaciones diferenciales del sistema. Podemos pensar en dicha solución como la representación paramétrica de una curva en el plano . ( , T x y t ϕ = xy Resulta útil con frecuencia imaginarse la curva solución del sistema como la trayectoria recorrida por una partícula en movimiento cuya velocidad (respecto a cada una de sus componentes) queda especificada en el sistema de ecuaciones diferenciales. Así, diremos que un conjunto de trayectorias en el plano xy, o plano fase o plano de fases, se llama retrato fase del sistema. 19.1.3. Análisis de estabilidad Consideremos un punto crítico x de un sistema autónomo lineal x e ( ) ( ) ' t = f x ( ) 0 = y una solución de dicho sistema que verifica la condición inicial x . Si interpretamos la solución como la trayectoria de una partícula en movimiento, sometida a las condiciones descritas por el sistema de ecuaciones diferenciales, podemos preguntarnos cuál será el comportamiento de dicha partícula en las proximidades del punto crítico. Es decir, cuando es próximo a , ¿se mantendrá la trayectoria en las proximidades del punto de equilibrio o se alejará definitivamente de él?; y en el primer caso, ¿tenderá dicha trayectoria al valor de equilibrio?. Responderemos a continuación a estas preguntas para el caso particular de sistemas lineales, dejando para la sección siguiente la respuesta correspondiente al caso no lineal, que precisa de otro tipo de herramientas. ( ) t = x x 0 x y 0 x e x Trabajaremos en lo sucesivo con dimensión 2, es decir, nos ceñiremos al caso de un sistema autónomo lineal formado por dos ecuaciones diferenciales. En casos de dimensión superior, se trata de reducir el problema a varios problemas bidimensionales, para aplicar sobre cada uno de ellos las técnicas que describiremos a continuación. Para analizar la estabilidad del sistema, interpretaremos las soluciones de ' ' x a x b y y c x d = ⋅ + ⋅ = ⋅ + ⋅ en términos de los valores y vectores propios de la matriz de coeficientes: Teoría cualitativa 4 a b c d = A Para asegurar la unicidad del punto crítico (0,0), supondremos que el determinante . Si denotamos la traza de la matriz por τ = , entonces la ecuación característica de se puede reescribir como λ τ . Así, los valores propios de A son 0 a d c b δ = ⋅ − ⋅ ≠ a d + 2 ( ) t 0 λ − = A I 0 λ δ − + = 2 4 2 δ − 0 τ τ ± = 2 4 − < λ , y por tanto podemos afirmar que los valores propios de A serán reales y distintos cuando τ δ , reales e iguales cuando y complejos si τ δ . A continuación analizaremos, mediante un ejemplo, el comportamiento de las trayectorias solución del sistema en las proximidades del origen en cada una de estas circunstancias. 2 4 − > 0 2 4 0 τ δ − = Ejemplo 2 Consideraremos el sistema lineal en términos de un parámetro c: ' ' x x y y c x = − + = ⋅ − y Obviamente el origen de coordenadas (0,0) es un punto de equilibrio del sistema. Emplearemos el algoritmo de Runge-Kutta implementado en la práctica anterior para representar los espacios de fase de dicho sistema en los casos 1 , 4, 0, 9 4 = − c . La traza de la matriz de coeficientes es τ = y el determinante δ = (notemos que en nuestro caso c , luego el determinante no se anula y está asegurada la unicidad del punto crítico), por lo que los valores propios asociados a la matriz son 2 − 1 c − 1 ≠ 2 4 1 2 c τ τ δ λ ± − = = − ± Así, para 1 4 = c , los valores propios son negativos y distintos, 1 2 − λ = y 3 2 λ = − . Aplicando el método de Runge-Kutta al sistema con este valor del parámetro con distintas condiciones iniciales (| | y ), obtenemos el siguiente retrato de fase: 0.5, 1 ± ± | 1, 0.2 ± ± | Notemos que, para este valor del parámetro c, todas las trayectorias parecen tender al origen desde cualquier dirección. Sistemas lineales 5 Cuando c = 4, los valores propios tienen signos contrarios, λ = y λ = . Observamos en el retrato de fase que todas las trayectorias se alejan del origen, aparentemente en una dirección concreta, a excepción de las soluciones que comienzan sobre una determinada recta, que se acercan al punto crítico. 1 3 − Si el parámetro c toma valor nulo, se llega a un único valor propio real. En este caso, al dibujar el retrato de fase observamos que todas las trayectorias se acercan al punto crítico, pero siguiendo una dirección concreta. Por último, para c = -9, los valores propios son complejos conjugados, con parte real negativa: . La trayectoria de las soluciones es una espiral hacia el origen cuando aumenta la variable independiente t. 1 3i λ = − ± Teoría cualitativa 6 En general, para analizar en detalle el comportamiento de las trayectorias estudiaremos los valores y vectores propios asociados a la matriz de coeficientes del sistema. Teniendo en cuenta que la solución general del sistema es: ( ) 1 2 1 1 2 2 t t t c e c e λ λ = + x v v distinguiremos los siguientes casos, especificando en cada uno de ellos el signo del determinante y traza de la matriz de coeficientes, así como la estabilidad del punto de equilibrio. 1. Valores propios distintos (τ δ ) 2 4 0 − > a. Ambos valores propios son negativos ( , τ < y ): las trayectorias solución tienden al origen desde cualquier valor inicial del plano de fase a lo largo de la recta determinada por el vector propio v 2 4 0 τ δ − > 0 = 2 1 λ λ < < 0 0 δ > 1 (si ) o por el vector propio v 1 0 c ≠ 2 , si c . En este caso, el punto de equilibrio recibe el nombre de nodo estable, . 1 0 b. Ambos valores propios son positivos ( τ δ , y ): las soluciones se alejan del origen desde cualquier valor inicial en una de las direcciones determinadas por el vector propio v 2 4 0 − > 0 τ > 0 ≠ 0 δ > 1 (si c ) o por el vector propio v 1 2 , si c ; Este tipo de punto de equilibrio recibe el nombre de nodo inestable, . 1 0 = 0 2 1 λ λ < < c. Los valores propios tienen signos opuestos (τ δ y δ < ). En este caso, el análisis de las soluciones es similar al caso anterior, salvo por una circunstancia: cuando c , la solución tiende a cero siguiendo la recta determinada por v 2 4 0 − > 0 1 0 = 2 . Sin embargo, para c , la recta determinada por v 1 0 ≠ 1 es una asíntota para las trayectorias que se alejan del origen. Este punto crítico recibe el nombre de punto silla. Sistemas lineales 7 2. Un valor propio real de multiplicidad dos (τ δ ): en este caso el punto crítico recibe el nombre de nodo estable (inestable) degenerado si las trayectorias solución tienden (se alejan) al origen. Además, la solución general tiene comportamientos distintos según si se pueden determinar uno o dos valores propios linealmente independientes: en el primer caso, la recta determinada por el vector propio es una asíntota para todas las soluciones, mientras que en el segundo caso la distribución de las trayectorias solución respecto al punto crítico es radial. 2 4 − = 0 3. Valores propios complejos (τ δ ): distinguiremos dos casos según si los valores propios son, o no, imaginarios puros. 2 4 − < 0 a. Valores propios imaginarios puros (τ δ , τ = ): En este caso las soluciones del sistema son periódicas y describen elipses con el mismo sentido en torno al punto crítico, que recibe el nombre de centro. 2 4 0 − < 0 b. Valor propio imaginario no puro ( , ): las trayectorias describen espirales en torno al punto crítico. Dichas espirales se acercan cada vez más al origen cuando la parte real de los valores propios sea negativa (en cuyo caso hablaremos del origen como punto espiral estable o foco estable) y se alejarán del punto crítico (espiral/foco inestable) cuando dicha parte real sea positiva. 2 4 0 τ δ − < 0 τ ≠ Teoría cualitativa 8 Retomemos a continuación el ejemplo anterior para analizar la estabilidad del origen para cada uno de los valores del parámetro c: Ejemplo 3 Consideremos de nuevo el sistema lineal para 1 , 4, 0, 9 4 c = − . ' ' x x y y c x = − + = ⋅ − y Sabemos que los valores de la traza y el determinante son, respectivamente τ = y . Así, los valores propios asociados a la matriz son 2 − 1 c δ = − 2 4 2 τ τ δ ± − = = −1 c λ ± Por tanto, es fácil construir la siguiente tabla para clasificar en cada caso el punto crítico: c τ δ 2 4 τ δ − Punto crítico 0.25 -2 0.75 1>0 Nodo estable 4 -2 -3 16>0 Punto de silla 0 -2 1 0 Nodo estable degenerado -9 -2 10 -36<0 Espiral/foco estable Por otra parte, también es posible dicha clasificación atendiendo únicamente a los valores propios de la matriz de coeficientes del sistema. Empleando el comando eig de MATLAB, obtenemos la información necesaria: c=1/4; A=[-1,1;c,-1]; eig(A) ans = -0.5000 -1.5000 A la vista de los resultados obtenidos, y dado que se trata de dos valores propios reales y distintos, del mismo signo, podemos concluir que el origen es, para este valor del parámetro c, un nodo estable. Repitiendo los cálculos para el resto de los valores posibles del parámetro, obtenemos idénticas conclusiones a las mostradas en la tabla anterior. 19.2. Sistemas no lineales En la presente sección consideraremos un sistema autónomo no lineal bidimensional ( ) ' = x f x y examinaremos el comportamiento de las trayectorias del sistema en el Sistemas no lineales 9 entorno de un punto crítico x e . Es conveniente que dicho punto crítico esté en el origen; si no es así, un pequeño cambio de variable ( u x ) nos proporcionará un sistema equivalente al inicial cuyo punto de equilibrio estará en el origen del plano de fases. e = − x ( ) + x g x ndo → → ' = x ( ) ( ) ' , ' , x y x y ) ) ( )( ) ( ) 1 1 1 2 2 2 , , , , , , , , , , e e e e e e e e e e e e e e f x y f x y x y x x y y y x y f x y f x y x y x x y y y x y η η = + − + = + − + 2 1 1 2 2 e e f f x x y f f x x y ∂ ∂ − + ∂ ∂ ∂ ∂ − + ∂ ∂ Para estudiar la estabilidad del sistema en el entorno de un punto crítico, trataremos de encontrar un sistema lineal próximo a nuestro sistema no lineal: ' = ⋅ x A de manera que x e = 0 sea un punto crítico aislado del sistema, es decir, existe un entorno del origen en el cual no hay otros puntos críticos. Además, supondremos que de , por lo que el origen también será un punto crítico del sistema lineal asociado. Por último, supondremos que las componentes de g tienen primeras derivadas parciales continuas y satisfacen la condición: t 0 ≠ A ( ) 0 cua g x x 0 x es decir, que cerca del origen el comportamiento del sistema original es casi lineal. A continuación describiremos un método general para encontrar el sistema lineal correspondiente a un sistema casi lineal ' = ⋅ x A x ( ) f x cerca de un punto crítico dado x e . Consideremos el sistema no lineal bidimensional: 1 2 x f y f = = tal que siendo un entorno del punto crítico; dicho sistema es casi lineal en el entorno del punto de equilibrio, ya que aplicando el desarrollo de Taylor a ambas funciones: ( ) 2 , 1, 2 i f C D i ∈ = 2 D ⊆ ( ) ( ) ( )( ( )( ) ( ) ( ) ( ) ( )( los términos del errorη verifican la condición ( ) , , 1, i x y i = ( ) ( ) ( ) ( , 0 cuando , , , i e e e e x y x y x y x x y y η → → − − ) Así, el sistema se puede expresar ( ) ( ) 1 1 1 2 2 2 , , e e e e f f x x x x x y x y y y y y x y f f x y η η ∂ ∂ | | | ′ − − | | ∂ ∂ | | | | | = + | | | − − ∂ ∂ | \ . \ . \ . | ∂ ∂ \ . y en notación vectorial: ( ) ( f e J ′ = ⋅ + u x u η x) ) u donde y . Dado que el término no lineal η es pequeño en comparación con el lineal J , cuando u es pequeño (es decir, cuando estamos en las proximidades del punto crítico), es razonable esperar que las trayectorias solución del sistema lineal sean buenas aproximaciones a las del sistema no lineal. Esto es cierto en la mayoría de los casos, aunque en algunos, como los de tipo ( ) , T e e x x y y = − − u ( 1 2 , η η = η ( ) x ( ) f e ⋅ x Teoría cualitativa 10 centro (los más susceptibles a pequeñas perturbaciones del sistema), puede haber problemas para determinar la estabilidad. Ejemplo 4 El movimiento no amortiguado de un péndulo de longitud l = 1 se describe por el sistema: sin x y g y x l ′ = ′ = − donde g es la aceleración de la gravedad. Sabemos que ( ) y son puntos de equilibrio; vamos a continuación a estudiar su estabilidad. 0, 0 ( , 0 π ) El sistema lineal asociado al problema del péndulo, cuya matriz de coeficientes es la matriz jacobiana del sistema, es: 0 1 0 x x g y y l | | ′ | | | | = | | ′ − | \ . \ \ . | | . ) , 0 en el caso de , y ( ) ( , 0 e e x y = 0 1 0 u u g v v l | | ′ | | | | = | | ′ | \ . \ \ . | | . ) , 0 ) en el caso ( ) , donde . ( , e e x y π = , u x v y π = − = Deduciremos la estabilidad de sendos puntos crítico empleando los valores propios de la matriz jacobiana en cada caso: A=[0 1; -9.8/1 0]; eig(A) ans = 0 + 3.1305i 0 - 3.1305i de donde se deduce que el origen es un punto crítico de tipo centro. Respecto al segundo punto crítico, A=[0 1; 9.8/1 0]; eig(A) ans = 3.1305 -3.1305 al tener dos valores propios reales y de distinto signo, se deduce que el punto crítico es un punto silla. ( , 0 π Podemos confirmar dichas conclusiones representando el espacio de fase del problema del péndulo con valores iniciales en el entorno de sendos puntos críticos: mediante las instrucciones [t,y]=rk4('pendulo',0,5,[0.1,0.1],500); plot(y(:,1),y(:,2)) representamos una elipse en torno al punto crítico del origen. Podemos representar estas curvas junto con las correspondientes a un entorno del otro punto crítico, en las que se confirman las conclusiones a las que habíamos llegado mediante el estudio de la estabilidad. Sistemas no lineales 11 En general, dado un sistema no lineal de n ecuaciones de primer orden ( ) ' = x f x , diremos que un punto de equilibrio es hiperbólico si ningún valor propio de la matriz jacobiana tiene parte real nula, en otro caso se dice que el punto crítico es elíptico. e x ( f e J x ) ) Por otra parte, un punto crítico hiperbólico x se llama sumidero (o punto crítico asintóticamente estable) si todos los valores propios de J tienen parte real negativa; diremos que dicho punto es una fuente (o punto crítico inestable) si todos tienen parte real positiva y punto de silla si tiene al menos un valor propio con parte real positiva y otro con parte real negativa. e ( f e x 19.2.1. Soluciones periódicas y ciclos límite Consideremos de nuevo el sistema no lineal bidimensional: ( ) ( ) 1 2 ' , ' , x f x y y f x y = = tal que las funciones y sus primeras derivadas parciales son continuas en el espacio de fases. Empleando las técnicas descritas hasta el momento somos capaces de obtener información sobre las trayectorias solución del sistema únicamente en los entornos de sus puntos críticos. Para obtener las propiedades globales de las trayectorias en regiones amplias del plano de fases es útil saber si existen o no trayectorias cerradas, o lo que es equivalente, soluciones periódicas. , 1, 2 i f i = Sabemos por la sección anterior que un sistema lineal tiene trayectorias cerradas si y sólo si los valores propios asociados a la matriz de coeficientes del sistema son imaginarios puros, en cuyo caso toda trayectoria es cerrada. Así, para un sistema lineal se puede concluir que todas las trayectorias son cerradas y, por tanto periódicas, o ninguna lo es. Al contrario, un sistema no lineal puede tener una trayectoria cerrada de tal manera que no haya ninguna otra próxima a ella, como se muestra en el siguiente ejemplo. Ejemplo 5 Sea el sistema: ( ) ( ) 2 2 2 2 ' 1 ' 1 x y x x y y x y x y = − + − − = + − − Teoría cualitativa 12 2 en el que resulta más fácil emplear coordenadas polares: r x y 2 2 y = + arctan y x θ = . De este modo, las ecuaciones equivalentes en polares son: ( ) 2 ' 1 ' 1 r r r θ = − = El único punto de equilibrio es el origen del plano de fase, ya que r = 1 sólo anula una de las ecuaciones diferenciales. El sistema linealizado en torno al origen es: 1 0 0 0 r r θ θ ′ | | | || = | | ′ \ . \ .\ | | . donde la matriz de coeficientes es singular. Para estudiar la estabilidad del origen utilizaremos la linealización del sistema en coordenadas cartesianas: 1 1 1 1 x x y y ′ | | | || | = | | | ′ − \ . \ .\ . que es no singular. Dado que la traza τ = y el determinante (o alternativamente que los valores propios son complejos, 1 ), podemos afirmar que el punto crítico es un foco o espiral inestable, y por tanto las trayectorias en un entorno del origen, se alejarán de éste. 2 0 > 2 0 δ = > i ± Por otra parte, r = 1, θ = es solución del sistema de ecuaciones diferenciales (expresado en polares). Esta es una solución periódica del sistema y además sabemos que las trayectorias solución en un entorno del origen se alejan en espiral de éste y, por tanto, se aproximan a la circunferencia unidad. De hecho, si observamos la ecuación diferencial , para 0 se verifica que r y por tanto la variación de la distancia al origen es positiva y cada vez mayor hasta que para r = 1 se anula dicha variación. Esto confirma que el origen sea un foco inestable y que las trayectorias solución tiendan a la órbita periódica pero, ¿qué ocurre más allá de dicha órbita? Siguiendo el mismo razonamiento, para r se verifica cada vez mayor en valor absoluto. Así, la variación de la distancia al origen es cada vez menor hasta que para r = 1 se anula dicha variación. Por tanto, no es descabellado atribuir a la órbita periódica un carácter atractor. 0 t t + ) ( 2 ' 1 r r r = − 1 r < < ' 0 > ' 0 r < 1 > En general, una trayectoria cerrada en el plano fase tal que otras trayectorias no cerradas tienden en espiral hacia ella, desde el interior o desde el exterior, se conoce como ciclo límite. De este modo, en el ejemplo anterior la curva r = 1 es un ciclo límite del sistema. Concretamente, es un ciclo estable o atractor, ya que todas las trayectorias que se inician en sus proximidades tienden en espiral hacia ella. Si las trayectorias en uno de sus lados se aproximan en espiral a la trayectoria cerrada y por el otro lado se alejan en espiral de ésta, se dice que el ciclo límite es semiestable. Sin embargo, si las trayectorias próximas al ciclo límite se alejan en espiral de éste, se dice que dicha trayectoria cerrada es inestable. En el ejemplo anterior hemos deducido la existencia de la trayectoria periódica mediante manipulaciones de las ecuaciones diferenciales. Sin embargo, esto no siempre es posible; son necesarios ciertos resultados generales que nos permitan conocer la existencia o no existencia de ciclos límite en sistemas autónomos no lineales. Teorema (Poincaré): Una trayectoria cerrada del sistema autónomo no lineal Sistemas no lineales 13 ( ) ( ) 1 2 ' , ' , x f x y y f x y = = tal que las funciones y sus primeras derivadas parciales son continuas en el espacio de fases, necesariamente debe encerrar un punto crítico. Además, si sólo encierra un punto crítico, éste no puede ser un punto silla. , 1, 2 i f i = Ejemplo 6 En el sistema: ( ) ( ) 2 2 2 2 ' 1 ' 1 x y x x y y x y x y = − + − − = + − − se ha demostrado que la órbita periódica contiene al punto crítico (0,0). 2 2 1 x y + = Este resultado proporciona un criterio negativo: un sistema sin puntos críticos en una cierta región no puede tener en ella trayectorias cerradas. El siguiente resultado también da un criterio negativo: Teorema (Bendixon): Consideremos el sistema autónomo no lineal ( ) ( ) 1 2 ' , ' , x f x y y f x y = = tal que las funciones y sus primeras derivadas parciales son continuas en un dominio D simplemente conexo del espacio de fases. Si , 1, 2 i f i = 1 f f x y ∂ ∂ + ∂ ∂ 2 es siempre positiva o siempre negativa en una cierta región del espacio de fases, el sistema no tiene trayectorias cerradas en esa región. Ejemplo 7 Volviendo de nuevo al sistema: ( ) ( ) 2 2 2 2 ' 1 ' 1 x y x x y y x y x y = − + − − = + − − calculamos ( ) ( 2 2 2 1 2 2 4 2 1 2 f f x y r x y ∂ ∂ + = − + = − ∂ ∂ ) Es fácil probar que 1 f f x y ∂ + ∂ ∂ 2 ∂ es positiva para 1 2 r ≤ < 0 ; como esta región se simplemente conexa (no tiene "agujeros"), podemos afirmar que en este disco no hay trayectorias cerradas. Sin embargo, para 1 2 r > , 1 2 0 f f x y ∂ ∂ + < ∂ ∂ pero no podemos aplicar el teorema porque la región en este caso no es simplemente conexa. De hecho, hemos visto antes que sí existe dicha trayectoria periódica. Teoría cualitativa 14 0 y | | . En el siguiente teorema se dan las condiciones que garantizan la existencia de una trayectoria cerrada: Teorema (Poincaré-Bendixon): Sea R una región acotada del espacio de fases junto con su frontera y supongamos que R no contiene puntos de equilibrio del sistema. Si C es una trayectoria del sistema que está en R en cierto instante t 0 y permanece en R para todo t , entonces C o bien es una trayectoria cerrada o tiene en espiral hacia una trayectoria cerrada. 0 t ≥ Ejemplo 8 Para aplicar el teorema de Poincaré-Bendixon al sistema: ( ) ( ) 2 2 2 2 ' 1 ' 1 x y x x y y x y x y = − + − − = + − − emplearemos una región R anular en torno al origen: 0.5 . En esta región el sistema no posee ningún punto crítico. Trabajando con la ecuación en polares: 2 r ≤ ≤ ( ) 2 ' 1 r r r = − observamos que para r = 0.5, r' > 0 luego la distancia al origen crece; mientras que para r = 2, r' >0 por lo que r decrece. Así, cualquier trayectoria que cruce la frontera de R permanece en su interior. Aplicando el teorema de Poincaré-Bendixon, podemos afirmar que existe una trayectoria cerrada en R. Pudiera parecer a partir del ejemplo mostrado que es fácil demostrar la existencia de ciclos límite en los sistemas no lineales; nada de eso. Muchas veces los teoremas de Poincaré y de Bendixon no nos llevan a ninguna conclusión y el tercer teorema no es aplicable, como se muestra en el siguiente ejemplo. En estos casos, se ha de recurrir a otras técnicas más complejas. Ejemplo 9 La ecuación de Van der Pol u u , donde la constante u > es positiva, describe la corriente u en un triodo oscilador. ( ) 2 1 ' u u u ′′ − − + = 0 Introduciendo las variables transformamos la ecuación en el sistema: , ' x u y u = = ( ) 2 ' ' 1 x y y x x u = = − + − Observamos que el único punto de equilibrio del sistema es el origen y el sistema lineal asociado cerca del origen es: 0 1 1 x x y y u ′ | | | || = | | ′ − \ . \ .\ Los valores propios de la matriz de coeficientes son: 2 2 4 4 2 2 u u τ τ δ λ ± − ± − = = y, por tanto, si u = , el origen es un nodo inestable degenerado; para 2 los valores propios son imaginarios con parte real positiva, por lo que el origen es un punto espiral o foco inestable; por último, si u > , los valores propios son reales positivos y distintos, luego el origen es un nodo inestable. En todos los casos, una trayectoria que se inicie cerca del origen, se alejará de él. 2 0 u > > 2 Sistemas no lineales 15 Con respecto a las soluciones periódicas, del primer teorema de Poincaré se deduce que, si existen soluciones periódicas, deben rodear al origen. Por otra parte, al calcular ( ) 2 1 2 1 f f x x y u ∂ ∂ + = − ∂ ∂ observamos que se produce un cambio de signo en 1 x = . Esto significa que mientras 1 x < , no habrá ninguna trayectoria periódica. Por otra parte, una región anular R en torno al origen no nos permite aplicar el teorema de Poincaré-Bendixon, ya que no podemos asegurar que las trayectorias que entren en R permanezcan en su interior. Es posible demostrar, mediante un análisis más complejo, que la ecuación de Van der Pol admite un ciclo límite único. Sin embargo, emplearemos un enfoque diferente: representaremos gráficamente las trayectorias solución obtenidas numéricamente, en función del parámetro u. Almacenamos el sistema correspondiente a la ecuación de Van der Pol en una función vandpol.m con un primer valor para el parámetro: function z = vandpol(t,y) nu = 0.2; z(:,1) = y(:,2); z(:,2) = -y(:,1)+mu*(1-y(:,1).^2)*y(:,2); y representamos las trayectorias solución para diferentes valores iniciales: [t,z]=rk4('vandpol',0,50,[0.1,0.1],500); plot(z(:,1),z(:,2)), hold on [t,y]=rk4('vandpol',0,50,[-3,2],500); plot(y(:,1),y(:,2)) Tal y como habíamos deducido, el origen es un foco inestable ya que la trayectoria solución con estimación inicial (0.1,0.1) traza una espiral en el sentido de las agujas del reloj que se aleja del origen mientras se aproxima a la solución periódica. Al introducir un valor inicial alejado del origen, se observa que la trayectoria describe asimismo una espiral en el sentido de las agujas del reloj, que tiende a la órbita periódica. Si observamos la gráfica de u respecto de t, observamos que las dos soluciones varían su amplitud inicial para tender a un movimiento periódico estable que corresponde al ciclo límite. También se observa una diferencia de fase entre las dos soluciones al aproximarse al ciclo límite. Observando la gráfica se puede determinar la amplitud y el periodo de la órbita periódica, una vez estabilizado el movimiento. plot(t,[z(:,1),y(:,1)]) Teoría cualitativa 16 Cuando , se observa un comportamiento similar, pero el ciclo límite dista de ser una circunferencia. Las trayectorias se acercan más rápidamente al ciclo límite, perdiéndose la simetría. . 2 u = [t,z]=rk4('vandpol',0,50,[0.1,0.1],500); plot(z(:,1),z(:,2)), hold on [t,y]=rk4('vandpol',0,50,[-3,2],500); plot(y(:,1),y(:,2)) De nuevo se observa en la variación de u respecto del tiempo una diferencia en fase: plot(t,[z(:,1),y(:,1)]) Sistemas no lineales 17 Cuando tomamos u = , partiendo de las mismas condiciones iniciales, obtenemos las siguientes gráficas: 4 [t,z]=rk4('vandpol',0,40,[0.1,0.1],500); plot(z(:,1),z(:,2)), hold on [t,y]=rk4('vandpol',0,40,[-3,2],500); plot(y(:,1),y(:,2)) plot(t,[z(:,1),y(:,1)]) Se observa que el ciclo límite es más alargado en la dirección y; las trayectorias siguen tendiendo a él a mayor velocidad que en los casos anteriores (para intervalos de tiempo mayores, las trayectorias exteriores retroceden y se repite en movimiento en sentido opuesto). Además, se observa que la gráfica de u respecto al tiempo dista ahora bastante de una sinusoidal. 19.3. Problemas 19.3.1. Enunciados 1.- En los sistemas lineales siguientes, clasifica el punto crítico (0,0), calculando la traza y el determinante. Comprueba los resultados obtenidos representando algunas trayectorias solución en el espacio de fases partiendo de diferentes valores iniciales, empleando para ello el método de Runge-Kutta de orden 4. Teoría cualitativa 18 y y y y y y y y y y y y y (a) (b) ' 5 3 ' 2 7 x x y x y = − + = + ' 5 3 ' 2 7 x x y x y = − + = − (c) (d) ' 5 3 ' 2 5 x x y x = − + = − + ' 5 3 ' 7 4 x x y x = − + = − + 2.- Determina las condiciones bajo las cuales el origen es un centro del sistema lineal: ' ' x x y x u u = − + = − + 3.- Determina una condición de la constante u tal que (0,0) sea un punto espiral (foco) estable del sistema lineal: ' ' x y y x u = = − + 4.- Demuestra que el origen es un punto crítico inestable del sistema lineal: ' ' x x y x u = + = − + donde u es una constante real tal que u ≠ . ¿Bajo qué condiciones será el origen un punto silla? ¿Y un punto espiral inestable? 1 5.- En los siguientes problemas no lineales clasifica, si es posible, cada punto crítico como nodo estable, foco estable nodo inestable, foco inestable o punto silla. Comprueba en cada caso los resultados obtenidos representando algunas trayectorias solución en el espacio de fases partiendo de diferentes valores iniciales empleando para ello el método de Runge-Kutta de orden 4. (a) (b) x x ' 1 2 ' 2 x x y xy = − = − 2 2 ' 1 ' 2 y y y = − − = (c) ( ) 2 2 1 3 ' ' 2 x x x | | ′′ + = − − | \ . x x (d) 2 4 2 ' 1 x x ′′ + + + 0 = y x x (e) (f) 3 ' 2 ' x xy y y x xy y = − = − + − ( ) ( ) 2 2 2 2 ' 1 3 ' 3 3 x x x y y y x y = − − = − − 6.- Demuestra gráficamente que el sistema autónomo plano 3 2 ' ' x x y x y x y = − + − = − − + tiene dos puntos críticos. Clasifica dichos puntos críticos y comprueba numéricamente dicha clasificación representando el espacio de fases algunas trayectorias solución del sistema (obtenidas mediante el algoritmo de Runge-Kutta), con distintas condiciones iniciales. Sistemas no lineales 19 y y ) 3 7.- Una interacción depredador-presa entre dos especies sucede cuando una de ellas (el depredador) se alimenta de la segunda de ellas (la presa). Por ejemplo, el lince ibérico se alimenta casi exclusivamente de conejos, mientras que éstos usan las plantas campestres como alimento. El interés de la aplicación de las matemáticas en las relaciones depredador-presa reside en determinar, no sólo el número de individuos de ambas poblaciones que establece el equilibrio en el ecosistema, sino también puede servir para poner remedio a la extinción de alguna de las especies, o de ambas. El primer modelo depredador-presa fue el de Lotka-Volterra: ' ' x ax bx y cxy d = − + = − + en el que x representa la cantidad de depredadores, y la de presas y a, b, c y d son constantes positivas. a) Calcula los puntos críticos del modelo de Lotka-Volterra. b) Suponiendo que a = 0.1, b = 0.002, c = 0.0025 y d = 0.2, clasifica los puntos críticos del sistema. c) Representa el espacio de fases algunas trayectorias solución del sistema obtenidas mediante el algoritmo de Runge-Kutta, con distintas condiciones iniciales. d) ¿Existen órbitas periódicas? Razona la respuesta. 8.- En cada uno de los siguientes problemas se expresan un sistema autónomo en coordenadas polares. Determina todos los puntos críticos, soluciones periódicas, ciclos límite así como sus características de estabilidad. (a) r r (b) r r ( ) 2 2 ' 1 ' 1 r θ = − = ( ) 2 ' 1 ' 1 r θ = − = − (c) r r (d) r s ( )( ' 1 ' 1 r r θ = − − = ( ) ' ' 1 en r π θ = = 9.- Determina las soluciones periódicas (y sus características de estabilidad), en caso de haber, del sistema: ( ) ( ) 2 2 2 2 2 2 2 2 ' 2 ' 2 x x y x y x y y y x x y x y = + + − + = − + + − + 19.3.2. Soluciones 1.- (a) Definimos la matriz del sistema lineal y calculamos su traza y determinante: A=[-5 3;2 7]; t = trace(A) d = det(A) t = 2 d = -41 Teoría cualitativa 20 de este modo, los valores propios son: lambda1 = (t+sqrt(t-4*d))/2 lambda2 = (t-sqrt(t-4*d))/2 lambda1 = 7.4420 lambda2 = -5.4420 o, calculados directamente: lambda = eig(A) lambda = -5.4807 7.4807 Dado que los valores propios son reales y de signos opuestos, concluimos que el punto crítico es un punto de silla. Para comprobar esta afirmación, almacenaremos el sistema en un fichero de función y representaremos algunas curvas solución en el espacio de fases empleando el algoritmo de Rung-Kutta: [t,z]=rk4('ej1',0,2,[5,0.5],50); plot(z(:,1),z(:,2)), hold on [t,y]=rk4('ej1',0,2,[-5,1],50); plot(y(:,1),y(:,2)) [t,z]=rk4('ej1',0,2,[5,-1],50); plot(z(:,1),z(:,2)) [t,y]=rk4('ej1',0,2,[-5,-0.5],50); plot(y(:,1),y(:,2)) axis([-5 5 -5 5]) 2.- Para que el origen sea un centro del sistema lineal ' ' x x y x u u = − + = − + y y − + debe cumplirse que los valores propios de la matriz de coeficientes sean imaginarios puros, es decir, que τ δ , siendo τ = tr(A) y δ = det(A). Es decir, 4 0 − < 2 1 ; 0; 1 1 A u τ δ u u − | | = = = | − \ . Sistemas no lineales 21 debe verificarse: ( ) 2 2 4 1 0 1 0 1 u u − − < ⇔ − > ⇔ < u 5.- (a) Buscaremos, en primer lugar, los puntos críticos del sistema, aquellos en los que se verifican las ecuaciones: 1 2 0 2 0 xy xy y − = − = Despejando 2xy en la primera ecuación y sustituyéndolo en la segunda obtenemos que la única solución (y, por tanto, el único punto crítico) es el punto (0.5,1). Para estudiar la estabilidad de las soluciones en un entorno de este punto, trabajaremos con el sistema linealizado: 1 ,1 2 ' 2 2 2 1 ' 2 2 1 2 0 x y x x y y x y | | | \ . − − − − | | | | | | | | | = ⋅ = | | | | − \ . \ . \ . \ . \ x y | ⋅ | . Obtenemos los valores propios de la matriz de coeficientes: A=[-2 -1;2 0]; lambda=eig(A) lambda = -1.0000 + 1.0000i -1.0000 - 1.0000i que son complejos de parte real negativa. Por tanto, el punto crítico es un punto espiral estable. Para comprobarlo basta calcular algunas curvas solución mediante el algoritmo de Runge-Kutta: [t,z]=rk4('ej5',0,10,[0.3,0.5],50); plot(z(:,1),z(:,2)), hold on [t,y]=rk4('ej5',0,10,[0.6,0.5],50); plot(y(:,1),y(:,2)) [t,z]=rk4('ej5',0,10,[0.3,1.2],50); plot(z(:,1),z(:,2)) [t,y]=rk4('ej5',0,10,[0.6,1.2],50); plot(y(:,1),y(:,2)) 8.- (d) Teniendo en cuenta la periodicidad de la función seno, los valores críticos de la variable radial son 0 y 1, únicos valores naturales en el intervalo 0 . Sin 2 r ≤ < Teoría cualitativa 22 | | . ) embargo, sólo r = 0 corresponde a un punto crítico. Con toda probablilidad, r = 1 corresponderá a una órbita periódica pero, ¿será ciclo límite, y en su caso, de qué tipo? Estudiemos en primer lugar la estabilidad del punto crítico a través del sistema linealizado: ( ) ' cos 0 0 ' 0 0 r r π π θ θ | ⋅ | | | | = ⋅ | | \ . \ \ . pero dado que el determinante de la matriz de coeficientes es nulo, no podemos clasificarlo directamente. Indirectamente, clasificaremos el punto crítico al estudiar el comportamiento de las trayectorias solución en su entorno: si observamos la ecuación diferencial , para 0 se verifica que r y por tanto la variación de la distancia al origen es positiva y cada vez mayor hasta que para r = 1 dicha variación se anula. Esto nos permite afirmar que el origen es inestable y que las trayectorias solución tiendan a la órbita periódica pero, ¿qué ocurre más allá de dicha órbita? Siguiendo el mismo razonamiento, para 1 se verifica . Así, la variación de la distancia al origen es cada vez menor hasta que para r = 1 ésta se anula. Por tanto, la órbita periódica será un ciclo límite de carácter atractor. Sin embargo, no nos basamos en criterios probados para realizar estas afirmaciones, son simple intuición. ( ' sin r r π = 1 r < < ' 0 > 2 r < < ' 0 r < Por otra parte, del primer teorema de Poincaré se deduce que, si existen soluciones periódicas, deben rodear al origen. Esto no aporta nueva información, pero no contradice las conclusiones anteriores. Por otra parte, al calcular ( ) 1 2 cos f f r x y π π ∂ ∂ + = ∂ ∂ observamos que se produce un cambio de signo en 1 2 r = . Esto significa que mientras 1 2 r < , no habrá ninguna trayectoria periódica. Una región anular R tal que 1 2 r ε − ≤ ≤ 2 en torno al origen, con ε > próximo a cero, nos permite aplicar el teorema de Poincaré-Bendixon, ya que hemos observado que para r = 0.5, r' > 0 luego la distancia al origen crece; mientras que para r , r' >0 por lo que r decrece. Así, cualquier trayectoria que cruce la frontera de R permanece en su interior. Aplicando el teorema de Poincaré-Bendixon, podemos afirmar que existe una trayectoria cerrada en R. 0 2 ε = − A continuación representaremos distintas trayectorias en el espacio de fases que nos permitan observar en comportamiento deducido: [t,z]=rk4('ej8',0,10,[1.8,1],50); polar(z(:,2),z(:,1)), hold on [t,y]=rk4('ej8',0,10,[0.4,0.5],50); polar(y(:,2),y(:,1)) Sistemas no lineales 23 file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Practica%2017%20(EDO)-%2018%20(Sistemas)%20-%2019%20(Cualitativa)/practica19.txt Ecuación diferencial no lineal PENDULO ------- >> [t,y] = rungekut('pendulo',0:0.01:10,[0,0]) solucion, todo ceros, el pendulo ha empezado parado, solucion estacionaria >> [t,y] = rungekut('pendulo',0:0.01:10,[0,1]); >> plot(t,y) ondas aparentemente sinusoidales: quiere decir que el termino no lineal no influye mucho, porque el seño es propio de sistema lineal con coeficientes constantes. >> [t,y] = rungekut('pendulo',0:0.01:10,[0,5]); >> plot(t,y) la velocidad ya no se curva como el seno, es mas picuda >> [t,y] = rungekut('pendulo',0:0.01:10,[0,6.5]); >> plot(t,y) el pendulo esta dando vueltas! Plano de fases -------------- en lugar de usar diagrama de tiempos y angulos, en vez de dibujar las dos magnitudes respecto al tiempo, represento una magnitud respecto a la otra. Ademas dibujaremos un campo con los vectores de la derivada. >> planofases('pendulo',-2*pi,2*pi,-8,8); Se pueden ver los puntos estacionarios (ej. 0, 2*pi - derivada cero), los puntos silla (ej.pi,-2*pi)(direcciones que se alejan y otra que se acercan) >> [t,y] = rungekut('pendulo',0:0.01:10,[0,3]); >> hold on >> plot(y(:,1),y(:,2)) >> [t,y] = rungekut('pendulo',0:0.01:10,[0,6]); >> plot(y(:,1),y(:,2)) >> [t,y] = rungekut('pendulo',0:0.01:10,[0,6.5]); >> plot(y(:,1),y(:,2)) >> axis([-2*pi,2*pi,-8,8]) % lo centra en lo interesante Se puede comparar con lo que ocurria en la otra representacion: con velocidad 3 -> sinusoidal = elipse en 2D con velocidad 6 -> sinusoidal picuda = elipse picuda en 2D con velocidad 6.5 -> se va Vamos a ver si conseguimos darle el impulso exacto para que se quede en posicion pi (hacia arriba) file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%2...ica%2017%20(EDO)-%2018%20(Sistemas)%20-%2019%20(Cualitativa)/practica19.txt (1 of 2) [09/03/2008 13:49:51] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Practica%2017%20(EDO)-%2018%20(Sistemas)%20-%2019%20(Cualitativa)/practica19.txt [t,y] = rungekut('pendulo',0:0.01:10,[0,6.23]); % no llega >> plot(y(:,1),y(:,2)) [t,y] = rungekut('pendulo',0:0.01:10,[0,6.28]); % se pasa >> plot(y(:,1),y(:,2)) [t,y] = rungekut('pendulo',0:0.01:10,[0,6.26]); % se pasa >> plot(y(:,1),y(:,2)) Cambiando el Modelo ------------------- >> k=0.2; >> planofases('pendulo',-2*pi,2*pi,-8,8); >> [t,y] = rungekut('pendulo',0:0.01:10,[0,2*pi]); >> hold on >> plot(y(:,1),y(:,2),'r') >> [t,y] = rungekut('pendulo',0:0.01:10,[0,7]); >> plot(y(:,1),y(:,2),'r') % la 7 primero da una vuelta y luego empieza a oscilar. Comentarios. ------------ El modelo del pendulo es casi lineal (seno de x =- x) con otros modelos salen cosas como ciclos limites (ver transpa) Con ED de mas de 2 varibles salen nuevos fenomenos (atractores extraños) ej lorenz file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%2...ica%2017%20(EDO)-%2018%20(Sistemas)%20-%2019%20(Cualitativa)/practica19.txt (2 of 2) [09/03/2008 13:49:51] Utiliza la ayuda que proporciona help siempre que no recuerdes bien el funcionamiento de alguna instrucción de MATLAB. La instrucción pwd nos informa del directorio actual de trabajo y el mandato dir lista los ficheros de dicho directorio, también tenemos what que solo muestra los ficheros de función (es decir, los que tienen extensión '.m', que más adelante comentaremos). 1.1.2 Path, Diary. Para cambiar de directorio tenemos que utilizar la instrucción path, que asigna el camino (directorios o subdirectorios) donde el programa buscará los archivos. Ejemplo 2 path nos informa del orden de los subdirectorios donde MATLAB busca los archivos. asigna el disco a: como primer subdirectorio de búsqueda, siempre y cuando nos hallamos asegurado de haber insertado un disco en la disquetera. path(path,'a:') Otra forma más visual de utilizar la instrucción, es en la barra de menús, en el menú File/Archivo la instrucción set path abre una ventana para cambiar el path, y también podemos ejecutar el mandato editpath que hace lo mismo directamente. Uno de los mandatos más útiles de MATLAB es diary, que permite guardar en un fichero todo el texto que aparece en la ventana de comandos. Escribe diary a:practi01.txt y todo lo que salga en pantalla se grabará en un fichero practi01.txt justo cuando vuelvas a introducir el mandato diary. Para añadir más texto en una misma sesión al diario creado usa diary on al principio de lo que quieras grabar y diary off al final (en este momento se graba realmente). Cuando utilices esta instrucción espera a que el LED de la disquetera se apague, para dejar tiempo al programa a que guarde los datos en el disco. Ten en cuenta que esta instrucción es del tipo interruptor y solo graba cuando se ejecuta la opción off. Una mala ejecución puede hacerte perder la información, además como puede ocurrir que el ordenador falle alguna vez es aconsejable ir grabando la información cada cierto tiempo, acordándote de volver a ejecutar el diary para que se vaya almacenando la siguiente información. La memoria de pantalla en MATLAB no es muy grande, y por tanto hay datos que van desapareciendo de la ventana, pero estos no se pierden si estas utilizando el diary. El mandato % que convierte en comentario lo que se escribe a continuación. % Esto es un comentario Con la tecla [↑] recuperas los mandatos antes escritos, evitando así tener que reescribir órdenes iguales o parecidas. También puedes 'copiar' con el ratón texto de cualquier sitio y 'pegar' en la (única) línea de mandatos activa, eligiendo estas opciones en el menú de edición. Vale usar [Ctrl]+C y [Ctrl]+V con el mismo fin. 1.2 Variables En MATLAB las variables se asignan de modo natural. Basta escribir un nombre de variable, a continuación el signo igual y luego el valor que toma esa variable. Para aceptar, como siempre, hay que pulsar [Intro]. Escribiendo sólo el nombre de una variable previamente asignada, MATLAB devuelve su valor. Los signos +, −, *, / y ^ denotan las operaciones aritméticas de suma, resta, multiplicación, división y elevación a una potencia (de modo que resultan válidas para matrices, como veremos más adelante). Si el resultado de una operación no es asignado a ninguna variable, MATLAB lo asigna a la variable del sistema ans. Al poner 'punto y coma', no se muestra el resultado por pantalla. Naturalmente, la asignación de la variable no resulta afectada. 1.2.1 Who, Whos. La orden who lista las variables definidas y con la orden whos tipo de variable y su tamaño. obtenemos además el Ejemplo 3 a = 3, b = 4, a a + b c = ans; who whos 1.2.2 Clear, Save, Load, Workspace. clear sin argumentos elimina todas las variables. La misma instrucción seguida de nombres de variables, elimina a estas. La instrucción save, guarda las variables definidas en el archivo que indiquemos para poderlas utilizar en otra sesión y lo hace con la extensión '.mat', lo mismo podemos hacer desde el Menú File con la instrucción save workspace. Para recuperar del disco un espacio de trabajo donde tengamos almacenados datos se utiliza la instrucción load junto con el nombre del fichero, también desde el Menú File con la instrucción load workspace o import data según versiones. La instrucción show workspace del Menú File, o la instrucción workspace muestran todas las variables de trabajo creadas en una ventana. 1.2.3 Variables especiales, format. MATLAB utiliza ciertos nombres de variable para fines especiales, como i o j, que designan ambas a la unidad imaginaria (i2 = j2 = –1) o pi, para el número π. El número e, base de los logaritmos neperianos, no está preasignado, pero se obtiene fácilmente como exp(1). La precisión relativa en operaciones de coma flotante se llama eps. El resultado de 1/0 en MATLAB es Inf y el de 0/0, NaN. 1/0 0/0 % Infinito % Indeterminado Podemos utilizar estos nombres de variable para almacenar otros valores, prevaleciendo nuestra asignación sobre el valor por defecto de MATLAB. Por ejemplo, si no utilizamos números complejos, no hay inconveniente en representar por i y j los índices de fila y columna de una matriz. Igualmente podríamos llamar eps a una cantidad a utilizar como criterio de convergencia, pero en general conviene evitar equívocos empleando otros nombres de variable. Internamente MATLAB trabaja con mucha precisión, aunque por defecto muestra los resultados con cuatro decimales. La apariencia de los resultados se modifica por menú o con la orden format. format long aumenta el número de decimales visibles. format short vuelve al estado inicial. format rat aproxima el resultado por un cociente de enteros pequeños. Explora otras opciones con help format . pi,format long, pi format rat, pi 1.2.4 Cadenas De Caracteres. Podemos usar también cadenas de caracteres para manejar texto en funciones de MATLAB. Para introducir una cadena, basta escribir el texto entre comillas. Un texto sin comillas produce error porque MATLAB lo interpreta como un nombre de variable o función. El mandato ischar nos dice si una expresión es o no un carácter (responde 1 si es verdadero y 0 si es falso). Ejemplo 4 a='Esto es una cadena' b=Esto no c=3 ischar(a) ischar(c) 1.3 1.3.1 Vectores Edición de Vectores Los vectores se utilizan, entre otras cosas, para representar: Puntos del plano y del espacio. Puntos de un espacio n-dimensional. Magnitudes físicas. Filas o columnas de una matriz (recuerda la discusión de sistemas de ecuaciones lineales). Para introducir un vector en MATLAB, escribimos sus componentes entre corchetes. Separando las componentes con comas o espacios obtenemos un vector fila. Separándolas por punto y coma o por [Intro], obtenemos un vector columna. Ejemplo 5 u = [1 2 3], v = [1,2,3] w = [1;2;3] » z=[1 »2 » 3] % Vectores fila % Vectores columna Para calcular la longitud de un vector se utiliza el mandato length, ahora bien como MATLAB trabaja siempre todas las variables como matrices, tanto si son matrices como si son escalares como si son vectores, para obtener la dimensión de cualquier variable podemos utilizar la función size que devuelve un vector de dos componentes que son el número de filas y el número de columnas de la matriz. Ejemplo 6 length(u) length(w) [f,c]=size(u) dimension=size(w) 1.3.2 Vectores Progresivos. Es muy frecuente tener que editar vectores con componentes equiespaciadas, por ejemplo, para crear una tabla de valores de una función. Con a:h:b creamos un vector de componentes que van de a hasta b y distan h cada una de la siguiente. La orden linspace(a,b,n) crea n términos en progresión aritmética, desde a hasta b. Ejemplo 7 x=0:0.1:1 y=linspace(0,1,11) 1.3.3 Suma y producto por un escalar. La suma de dos vectores del mismo tamaño se efectúa componente a componente y se obtiene con MATLAB escribiendo directamente »u + v La orden sum(u) proporciona la suma de todas las componentes del vector u. Para multiplicar un vector u por un escalar a, basta escribir » a*u En ocasiones hay que multiplicar dos vectores elemento a elemento y eso MATLAB lo hace con la versión 'punto' del producto. u.*v % Producto elemento a elemento Si intentamos multiplicar por las buenas dos vectores del mismo tamaño, nos da un error, pues MATLAB aplica el producto matricial y los tamaños no son coherentes. El producto matricial requiere que el primer factor tenga tantas columnas como filas tiene el segundo. Por ejemplo, podemos multiplicar una fila por una columna del mismo número de elementos o viceversa. » u*w % Fila × Columna = Escalar » w*u % Columna × Fila = Matriz de rango 1 Finalmente, el producto de todas las componentes de un vector se obtiene con la función prod. 1.3.4 Producto escalar y vectorial de dos vectores. El producto escalar de dos vectores de la misma dimensión se efectúa con dot y el producto vectorial de dos vectores de longitud 3 con cross. Ejemplo 8 a b c d e f = = = = = = [1 2 3]; [4 5 6]; dot(a,b) cross(a,b) prod(a) prod(b) 1.3.5 ', .', flipud, fliplr La transpuesta (conjugada) de un vector (complejo) v es v', su instrucción equivalente es ctranspose, la transpuesta (no conjugada) de un vector (complejo) v es v.', su instrucción equivalente es transpose. Mediante fliplr volteamos un vector fila de izquierda a derecha y con flipud ponemos cabeza abajo un vector columna. Ejemplo 9 z=[1 i 2-i]; v=z' w=z.' 1.3.6 Diferencias, sumas y productos acumulados La instrucción diff aplicada a un vector X=[X(1), X(2), ..., X(n)], realiza la diferencia entre sus componentes de la siguiente forma [X(2)-X(1), X(3)-X(2), ..., X(n)X(n-1)]. Las instrucciones cumsum y cumprod efectuan respectivamente las suma y los productos acumulados de un vector, son interesantes para el estudio de sumatorios y productorios finitos. Ejemplo 10 a = 1:6 b = cumsum(a) c = cumprod(a) 1.4 1.4.1 Matrices Edición de Matrices Por defecto, MATLAB trabaja con matrices. Esto supone la ventaja substancial de no tener que declarar tipos de variable ni tamaños de fila o columnas para trabajar tanto con matrices de números reales o complejos como con vectores o escalares, que se consideran casos particulares de matrices. Las matrices se escriben por filas. Los elementos de una fila se separan por 'comas' y las distintas filas por 'puntos y comas'. A = [1,2;3,4] Lo mismo que con vectores, podemos también separar los elementos de una fila con espacios y las filas pulsando la tecla [Intro]. » B = [-1 -2 -3 -4] El elemento en la fila i y la columna j de la matriz A se denota por A(i,j). Modifica, por ejemplo, el elemento 2,1 de A: » A(2,1) = 0 A(i,:) denota la fila i de la matriz A. Análogamente, A(:,j) es la columna j de A. » A(2,:), A(:,1) En ocasiones resulta cómodo construir una matriz a partir de bloques. Con tal de que sus tamaños sean coherentes, basta escribir los bloques por filas, como si se tratase de elementos individuales. » M = [A,B;B,A] Para extraer una submatriz, indicaremos las filas y columnas de que se compone. » M41 = M(1:3,2:4) Las filas o columnas no tienen por que ser consecutivas » fil = [1,2,4], col = [1,3,4] » M32 = M(fil,col) 1.4.2 Matrices usuales Ya hemos visto cómo se escriben las matrices. MATLAB tiene varias funciones que facilitan la edición de matrices de uso frecuente: eye(n) proporciona la matriz identidad de orden n. zeros(n,m) inicializa una matriz m por n con todos los elementos nulos. ones hace lo mismo con elementos de valor 1. rand crea matrices con elementos aleatorios uniformemente distribuidos en el intervalo [0,1]. Ejemplo 11 M N O P = = = = eye(4) zeros(3) ones(2) rand(3,2) se obtiene en MATLAB con A\b. Hiperbólicas: seno hiperbólico. . coseno hiperbólico. A. A*inv(A) La no conmutatividad del producto justifica que inv(A)*B se abrevie a A\B. cosecante.1) de la matriz producto A*B es » A(1.^-1 Si A es una matriz real. coseno. arco tangente. Asimismo.abs(-4). La transpuesta sin conjugar se obtiene con A. secante y cotangente.1)*B(1.*B. Comprueba la diferencia entre » A*B. A. parte entera.sqrt(-4) abs(4). la solución del sistema Ax=b. abs. que formalmente es x=A–1b.4. 1. Exponencial y logaritmos neperiano.5. A^-1..1)+A(1. Ejemplo 12 sqrt(4). sino aplicando métodos numéricamente más eficientes (ver help slash ). »A + B El producto de matrices se hace multiplicando fila por columna y sumando los resultados. En el caso complejo. si este es negativo da como resultado un complejo. Trigonométricas inversas: arco seno. se suma cada elemento de una con el elemento correspondiente de la otra. ..B*A MATLAB interpreta A/B como el producto de A por la inversa de B. A' es la transpuesta conjugada.abs(3+4*i) .2)*B(2. Bien entendido que la solución no se obtiene calculando la inversa de A. . . A*inv(B)..1. usamos las variantes 'punto' de las operaciones correspondientes. A' es la transpuesta de A. arco coseno. tangente hiperbólica. decimal y en base 2.. en lugar de filas por columnas.. Prueba: » A/B. La función sqrt realiza la raíz cuadrada de un número. valor absoluto. si este es complejo devuelve su módulo. Comprueba que el elemento (1. tangente.1 sqrt.. Raíz cuadrada... coseno. 1. La orden abs calcula el valor absoluto de un número.5 Funciones MATLAB conoce las funciones matemáticas elementales: Trigonométricas: seno. tangente.1) Observa que el producto de matrices NO es conmutativo » A*B .'. Hiperbólicas inversas: argumento seno hiperbólico. Para multiplicar dos matrices elemento a elemento.3 Operaciones con Matrices Para sumar dos matrices del mismo tamaño. teniendo en cuenta el cuadrante para dar la respuesta correcta. aparte de estar el nombre en inglés. Los puntos (1.log. La función atan devuelve la arcotangente de un número. sin embargo la función atan2 que en este caso tiene dos argumentos de entrada devuelve la arcotangente teniendo en cuenta el cuadrante.x) el resultado se obtiene directamente atan2(1.1) y (-1. atan2 Las funciones trigonométricas tienen el argumento en radianes.y) en el plano este viene dado por arcotangente(y/x). ya que el ángulo esta en radianes. pero solo la primera es correcta. el logaritmo neperiano y el logaritmo decimal de un número. Ejemplo 13 exp(1) log(ans) log10(10) 1.1)*180/pi. en este ejemplo MATLAB dará un resultado para ambas ordenes.5. Ahora bien si utilizamos la instrucción atan2(y. Ejemplo 15 Si intentamos determinar el ángulo de un punto (x.1. que si expresamos el resultado en grados seria atan(1)*180/pi ans = 45 luego considerando el cuadrante obtendriamos que los ángulos son respectivamente 45 y 225 (o –135) grados.5.atan2(-1.2 exp.-1)*180/pi ans = 45 ans = -135 . tan. cos.-1) se obtendrian con el mismo valor de la arcotangente.3 sin.log10 Los mandatos exp. Ejemplo 14 sin(pi/2) sin(90) Cuidado. atan. pues su argumento de entrada es correcto. log y log10 realizan respectivamente la exponencial. cosh.1 Tipos de linea. lo cual es muy práctico. 1.5.(exp(1)-exp(-1))/2 cosh(1).sinh(1)/cosh(1) Una característica destacable de MATLAB es que evalúa una función sobre todas las componentes de un vector simultáneamente. marcadores y tipos de línea que admite la instrucción gráfica plot. y = tanh(x). Y otras funciones especiales disponibles con help specfun . colores y marcadores. recuerda que para números reales se definen como: exp( x) − exp(− x) 2 epx( x) + exp(− x) cosh( x) = 2 sinh( x ) = Ejemplo 16 sinh(1).4 sinh. En la siguiente tabla se muestran los tipos de color. Ejemplo 17 x = -1:0. .(exp(1)+exp(-1))/2 tanh(1). tanh Estas órdenes representan a las funciones hiperbólicas. plot(x. tanto funciones elementales que puedes consultar su sintaxis con help elfun .01:1.6. Así como el código que los genera en el gráfico.y) Aparte de estas funciones MATLAB tiene definidas otras tantas menos conocidas pero no menos útiles.1.6 Gráficas 1. 01:1.'dirección'). plot(x. o x + * s d v ^ < > p h tipo de línea código sólida punteada : punto y raya -. rayada -- Ejemplo 18 x = -1:0. Indicar a MATLAB dónde está el archivo con: path(path.'r') 1.7. y = sin(x).m. Guardarlo con extensión . Ejecutarlo escribiendo en la línea de órdenes el nombre de fichero y los parámetros de entrada necesarios. Como ejemplo. Son simplemente ficheros de texto que contienen órdenes de MATLAB. que utilizaremos más adelante en la teoría de interpolaciones: f (x ) = 1 1 + 25 ⋅ x 2 . creamos un fichero para evaluar la llamada función de Runge.7 1. Su utilización requiere Editar el fichero con el editor de MATLAB o con un editor ASCII.1 Ficheros de función Función y=f(x) La programación en MATLAB de efectúa mediante ficheros.color Amarillo Magenta Cyan Rojo Verde Azul Negro Blanco código y m c r g b k w marcador punto circulo x-marca más estrella cuadrado diamante triángulo (abajo) triángulo (arriba) triángulo (izquierda) triángulo (derecha) pentagrama hexagrama código .y.m. y seguido de los nombres de los argumentos de entrada.Debemos escribir en el editor: function y=runge(x) % Función de Runge y=1. también es aconsejable que este no contenga signos ni acentos y si es posible no supere 8 caracteres. Consideremos la función que da las coordenadas cartesianas de un punto. entre paréntesis.*x. entre corchetes. Nótese que se han utilizado las operaciones con el punto delante. Ejemplo 19 runge(0) runge([-1 0 1]) El fichero runge. A su vez hay que fijarse que el nombre asignado a la función es el mismo que el del archivo que se graba en el disco./(1+25. Notar que las primeras líneas de comentario que escribimos inmediatamente después del nombre de la función son las que se obtienen con el help de matlab help runge El nombre de función suele ir precedido de los argumentos de salida. al incluir la palabra clave function. esto es por si la entrada es un vector o matriz efectuará las operaciones indicadas para cada uno de los elementos. Después de grabarlo con el nombre runge. A continuación es obligatorio poner el nombre de función.m.m es un archivo de función. a partir de su radio vector y su ángulo respecto al eje OX:  x = r ⋅ cos(θ )   y = r ⋅ sin(θ ) .^2). Entre estos y el nombre de función aparece el signo 'igual'. podremos ejecutar llamadas a la función. e indicar el path a Matlab. Define las siguientes matrices en MatLab: . y=r. El vector x tiene n + 1 componentes a las que llamamos a = x0 < x1 < x2 < . Ejemplo 20 ro=ones(1.y]=cartpol(r. evalúa estas sucesiones en la función para obtener su carácter convergente o divergente. b y n para obtener representaciones gráficas de los valores en x de las siguientes funciones: a) f(x) = sen x d) f(x) = sinh x g) f(x) = log x j) f(x) = 1/x2 b) f(x) = cos x e) f(x) = cosh x h) f(x) = exp x k) f(x) = 1/(1+x2) c) f(x) = tg x f) f(x) = tanh x i) f(x) = 1/x l) f(x) = x/(1+x2) 2.*sin(z). y en el caso de convergencia obtener una aproximación al límite. zeta=[pi/2 pi 3*pi/2].3).*cos(z).Que llamaremos por ejemplo cartpol. Toma sucesiones de números que convergen al valor donde se evalúa el límite. [x. en referencia al paso de polares a cartesianas. Elegir adecuadamente a. la definiríamos de la siguiente forma: function [x. < xn = b.y]=cartpol(ro. obtén un vector x cuyas componentes sean los extremos de los intervalos obtenidos al dividir [a.b] en n partes iguales. a) lim ex −1 x →0 tan(2 x ) b) lim x →0 x − atan(x ) x3 c) lim x →0 x cos( x ) − sin(x ) x3 d ) lim x →0 e x − sin( x ) − 1 e) lim x →0 sin 2 ( x ) sin( x ) − 1 f ) lim π 2x − π x→ 2 log(sin(3 x )) log(sin(2 x )) 2x g ) lim 5 x →∞ x 2x − x2 h) lim x→2 x − 2 3. .z) % Entradas 'r':radio vector % y 'z' ángulo respecto al eje OX % Salidas 'x. Dados dos números a < b.y': coordenadas cartesinas x=r. Estudia de forma aproximada los siguientes límites de funciones sin resolverlos. .zeta) help cartpol EJERCICIOS 1. 4 ⋅  atan  + atan     2  3   1  1  b. 1  2 −1 1 2 3 4   2     1 A = 3 2 1 .2.K . B = 4 3 2  . Los primeros términos no nulos de la serie de MacLaurin para la función x3 x5 arcotangente son x − + . C =   3  5 1 4  1 5 − 5  −1       6 1 4 2 5 1 1  8 1   1  y efectúa las siguientes operaciones: a) Comprueba la no conmutatividad del producto de matrices calculando: A*B y B*A. d) Calcula (A*B)-1 de dos formas diferentes utilizando la teoría de matrices. calcula las siguientes derivadas y derivadas parciales: d2 d 3 d3  1  2 (t * sin (t )) b) 3  2  c) 2 tan 1t a) dt dt dt  1 + t  2 ∂ (x * sin( y ) − y * cos(x )) e) ∂ ∂x∂y (x * sin( y ) − y * cos(x )) d) ∂x ( ( )) 5. Hazlo de tres formas diferentes usando los siguientes seudocódigos que definen dos algoritmos para determinar la norma euclídea de un vector x = ( x1 . utilizando las potencias de matrices y las potencias de matrices elemento a elemento. c) Define la matriz identidad de orden 3 con la orden correspondiente y con ella calcula la inversa de A utilizando la división izquierda de matrices. Utilizando las otras opciones de la instrucción diff de MatLab que puedes consultar con el Help. 16 ⋅ atan  − 4 ⋅ atan  5  239  Nota: Si p* es una aproximación de p se definen error absoluto como p − p * y si p ≠ 0 . x n ) : error relativo como p − p* . x 2 . Calcula el error absoluto y relativo en las siguientes 3 5 aproximaciones de π usando el polinomio en vez de la función arcotangente. 4. p 6.3. Calcula la norma euclídea del vector (1.−10. b) Calcula C^3.6) .−1.  1  1  a. hemos visto ya en el ejercicio 5 una forma más efectiva de cáculo de π. c) Utilizar también la instrucción de MatLab que calcula directamente la norma euclídea.10000 utilizando la definición de vectores y la instrucción de MatLab sum. .a) Nombre: norma1 Entrada : el vector x Salida : norma de x Paso1 : Determinar la longitud de x. Paso 2: Sumar los elementos de x2 utilizando la instrucción de MatLab correspondiente. Paso 3: Hacer norma igual a la raíz cuadrada del último valor obtenido en el Paso 2 utilizando la instrucción de MatLab correspondiente. El número π puede aproximarse teoricamente como la suma se la serie 4 ⋅ ∑ n =0 ∞ (− 1)n 2n + 1 aunque veremos que en la prática este método no es el mejor. n hacer suma=suma + x2i Paso 4: Hacer norma=suma^(1/2) b) Nombre: norma2 Paso 1: Elevar al cuadrado elemento a elemento el vector x y nombrarlo x2 utilizando la instrucción de MatLab correspondiente.2. que designaremos por 'n' Paso 2 : Hacer suma=0 Paso 3: Para i = 1. 7.K . utilizando el valor de π de MatLab calcular la exactitud de las aproximaciones. a) Calcula las aproximaciones de π para n=100. b) Crea un archivo de función que tenga argumento de entrada 'n' y que devuelva la aproximación de π para ese número de sumandos. c) Fijándose en los datos obtenidos en el apartado a) da una estimación del 'n' necesario para aproximar π con una precisión del orden de 10 −8 .1000. 2882 .a) a=[1.3) ans = -48/(1+t^2)^4*t^3+24/(1+t^2)^3*t c) diff('tan(1/t)'. for i=1:n suma=suma+x(i)^2.2) ans = 2*tan(1/t)*(1+tan(1/t)^2)/t^4+2*(1+tan(1/t)^2)/t^3 d) diff('x*sin(y)-y*cos(x)'. suma=0.6].-10.-1. function norma=norma1(x) n=length(x).SOLUCIONES 4.a) diff('t^3*sin(t)^2') ans = 3*t^2*sin(t)^2+2*t^3*sin(t)*cos(t) b) diff('1/(1+t^2)'. end norma=suma^(1/2).2.'x') ans = sin(y)+y*sin(x) e) diff(diff('x*sin(y)-y*cos(x)'.'y') ans = cos(y)+sin(x) 6. norma1(a) ans = 12.'x').3. 2882 6.^n. norma2(a) ans = 12. y=4*sum(x) % evaluamos la suma y multiplicamos por 4 con lo que tendremos la aproximación. a) n=0:100.15149340107099 abs(y-pi) ans = % calculamos el error absoluto.2882 7.00990074748120 . norma=sqrt(suma).^2. 0.6. x=(-1). y = 3.c) norm(a) ans = 12. suma=sum(x2).b) function norma=norma2(x) x2=x. % a partir del vector anterior y evaluando elemento a elemento obtenemos el vector con los primeros sumandos de la serie hasta el número 100./(2*n+1). % creamos el vector que va de 0 a 100 de 1 en 1. . x=(-1).y=4*sum(x)./(2*n+1).abs(y-pi) y = 3./(2*i+1).^n. s=4*sum(x).990007497511222e-004 n=0:10000.Si ponemos todas las instrucciones en una fila será más fácil ir calculando las aproximaciones. hasta el sumando n % Da también como salida el error absoluto cometido i=0:n. En temas posteriores veremos un caso general para acelerar la convergencia de sucesiones y minimizar los cálculos necesarios. Comprobemos que funciona: [s.999000074145670e-005 7.14259165433954 e = 9.abs(y-pi) y = 3. sólo hará falta ir modificando la fila: n=0:1000.x=(-1).e]=aproxpi(1000) s = 3.c) Si creamos una tabla con los valores de n y los errores (redondeados) obtenidos tenemos: n 102 103 104 error absoluto 10-2 10-3 10-4 Con lo que aproximadamente necesitaremos un n=108 para obtener un error de 10-8.x=(-1). e=abs(s-pi).^i.^n. Se puede comprobar que en este caso nuestra función presenta problemas de memoria y de tiempo de cálculo a partir de cierto n grande.y=4*sum(x).b) function [s.e]=aproxpi(n) % Efectúa una aproximación de pi utilizando la serie % (-1)^(2n+1)/(2*n+1)./(2*n+1).14169264359053 ans = 9.990007497511222e-004 7. con lo que este método de aproximación de π no seria aplicable para aproximaciones con errores muy pequeños. sin necesidad de escribir más.14259165433954 ans = 9. si utilizamos esta serie para calcular π. Vas tranquilamente por la calle resolviendo enigmas como ese de "la mayor toca el piano" y te tropiezas con un par de complejos conjugados. resulta natural representarlo en coordenadas cartesianas mediante un vector o un punto de abscisa a y ordenada b. 2. – Pues mi vecino tiene tres hijas cuyas edades también multiplican 36. Este resultado se conoce como el Teorema Fundamental del Álgebra. que se introducen tal y como se 3 escriben en matemáticas.2. Comenzando por la más elemental x2 +1 = 0 podemos llamar i a un "número imaginario" cuyo cuadrado sea –1 y añadirlo al sistema de números reales. Los complejos de la forma 0 + b i se denominan imaginarios puros. Operando formalmente con i = − 1. Complejos. pero hoy en día es imposible vivir sin ellos. – ¡Ah. a. ¿Y si la suma es 6 y el producto 13? – Imposible. Por ello. sí! La mayor toca el piano. – ¿Cómo lo sabes? Una ecuación de segundo grado con discriminante negativo no tiene solución real. te lo has inventado. Puedes elegir entre echar a correr o seguir leyendo. – La suma de las edades de dos hermanos es 13 y el producto 36. las raíces de cualquier ecuación de segundo grado con discriminante negativo se pueden expresar de la forma z = a + bi con a y b números reales. y de una parte imaginaria. El número de este portal es la suma de sus edades.1 Números complejos Los complejos tienen algo de real y algo de imaginario. sino que toda ecuación polinómica de grado n tiene n soluciones en C. Polinomios. b. – Fácil. nos vemos en la necesidad de introducir unos entes que amplíen los números reales y contengan las soluciones de tales ecuaciones. Un número complejo de la forma a + 0 i se identifica naturalmente con el número real a. Como has optado por lo segundo. utilizando i o j para la unidad imaginaria. En el cuerpo de los números complejos. – Me falta un dato. 2. De aquí el 4+3i llamar plano complejo al cuerpo C. Veremos que estas expresiones constituyen un cuerpo llamado cuerpo C de los números complejos. Escribe. no sólo las ecuaciones de segundo grado tienen solución.1 Representación cartesiana Un complejo z = a + b i consta de una parte real. por 2 ejemplo z = 4 + 3i.1. La expresión z = a + b i se denomina forma binómica del complejo z. Lo mejor es conocer sus mecanismos y acostumbrarse a sus repentinas apariciones. 1 0 0 1 2 3 4 5 . – Está claro. te vas a enterar de todo lo que siempre quisiste saber sobre los números complejos y nunca te atreviste a preguntar. Si insistimos en resolver todas estas ecuaciones.Curvas en polares. tienen 4 y 9 años. 4 MATLAB trabaja por defecto con números complejos. El opuesto de z = a + b i es − z = − a − b i . Se define el conjugado de un complejo z = a + b i como el complejo z = a − b i . Las funciones real(z) e imag(z) proporcionan. resta. entre el 3 y la i.2 Operaciones con complejos 2. compass(z). la parte real y la parte imaginaria del complejo z. opuesto Para sumar dos complejos basta sumar sus partes reales y sus partes imaginarias por separado. Gráficamente. b) Opuesto y conjugado de un complejo El concepto de conjugado juega un papel muy importante. cociente La multiplicación de complejos se define de forma natural operando formalmente con las expresiones binómicas de los factores y aplicando la relación fundamental i 2 = −1.2. La sintaxis en MATLAB es conj(z). respectivamente. (4 − i ) + (2 + 3 i ) = (4 + 2) + (− 1 + 3) i = 6 + 2 i La suma tiene las propiedades habituales que confieren a C la estructura de grupo conmutativo. El número 1 se comporta como elemento unidad del producto.'*'). Se comprueba que todo complejo no nulo tiene inverso operando .1 Suma. Podemos forzar el uso de los ejes cartesianos creándolos antes de representar el vector: close. inverso.1. Esta última presenta el vector sobre uno ejes tipo radar (coordenadas polares).1. En MATLAB. *. asociativa y distributiva del producto de números reales. el afijo representa con plot(z. tomar conjugados equivale a hacer una simetría respecto al eje real. b) o como un vector con que va del origen al mismo punto.1. 2.2 Producto. 2. mientras que para obtener el vector puede usarse la orden compass(z). El neutro es el complejo 0 + 0i. hold on. El complejo z = a + b i se representa gráficamente como el punto del plano de coordenadas cartesianas (a. (a + b i)(c + d i) = ac + ad i + bc i + bd i 2 = (ac − bd ) + (ad + bc) i Por ejemplo. (4 − i ) ⋅ (2 + 3 i ) = (4 ⋅ 2 + 3) + (4 ⋅ 2 − 2)i = 11 + 6 i La operación así definida hereda las propiedades conmutativa.Observa que no es necesario poner el signo de multiplicación. 4 4 2 2 0 0 -2 -2 0 2 4 6 -4 -4 -2 0 2 4 Opuesto Conjugado Complejo Figura 1 a) Suma de complejos.2. axis. La tercera propiedad es la llamada desigualdad triangular. En MATLAB. Las expresiones binómicas del producto y del cociente no son muy sugerentes. Usaremos este hecho en la caracterización geométrica del producto. por lo que las operaciones anteriores se efectúan con el formalismo usual: si u y v son dos complejos. permiten dar una interpretación geométrica intuitiva de dichas operaciones. cuya raíz cuadrada se llama módulo del complejo z y se denota por z . 2. Si llamamos x e y a sus coordenadas.1. Geométricamente. medido en sentido contrario a las agujas del reloj. el módulo representa la longitud del vector asociado a z. Un complejo z puede representarse en forma modulo-argumental o trigonométrica como z = z (cos θ + i sin θ ) siendo z el módulo z y θ es el argumento. 1 a − bi a − bi a bi = = 2 = 2 − 2 2 2 a + b i (a + b i)(a − b i) a + b a +b a + b2 Todas estas propiedades se resumen diciendo que C tiene estructura de cuerpo. Cualquier otro valor que difiera de θ en un múltiplo entero de 2π es también argumento de z. z = 0 sólo si z = 0. MATLAB trabaja por defecto con números complejos. z ≥ 0. el módulo se obtiene con abs. existe un único θ en [0. zw = z w z+w ≤ z + w eje imaginario z |z| θ b O a eje real Estas propiedades definen una norma en C. Listemos sus propiedades fundamentales. Al dividir z por su módulo. La segunda propiedad indica que el módulo del producto de dos complejos es igual al producto de sus módulos. En MATLAB. queda un complejo de módulo 1 cuyo afijo está sobre la circunferencia de centro el origen y radio 1. 2. 2π[ tal que x = cos θ y = sin θ Decimos que θ es un argumento del complejo z. u + v. aparte de otras propiedades más importantes. el argumento se obtiene con angle. Las nociones de módulo y argumento que introduciremos a continuación. proporcionan los resultados de las operaciones indicadas. u ∗ v y u / v.formalmente y usando el mismo truco que para eliminar una raíz cuadrada del denominador de una fracción. El módulo de un complejo juega un papel análogo al del valor absoluto para números reales.3 Módulo y Argumento Si z = a + b i es un número complejo. al ángulo que forma el vector asociado con el semieje real positivo. Llamamos argumento de un número complejo no nulo z = a + b i . a 2 + b 2 es un número real. por la interpretación geométrica de la suma de complejos. . 1. 3. n zn = z arg( z ) = n arg z. Las sucesivas potencias de z. En cambio. Estos comportamientos se generalizan a raíces de índice par o impar. Como el argumento de 1 es 0. z n = (a + b i ) desarrollarse por la fórmula de Newton de la potencia n-ésima de un binomio. 7 tienen de módulo 2 y de argumento kπ 4. en el campo complejo.4 Potencias y raíces De la interpretación geométrica del producto se deduce que la potencia n-ésima de un complejo z tendrá por módulo la potencia n-ésima del módulo de z y por argumento n veces el argumento de z. O sea. compass([z z^2 z^3 z^4 z^5 z^6 z^7 z^8]. Siempre que hablamos de argumentos. obteniéndose. respectivamente. Podemos calcularlas y representarlas con MATLAB mediante: z = 1 + i. sólo los números positivos tienen raíz cuadrada y ésta puede tener dos signos. por ejemplo. n 90 120 150 16 60 30 10. k z k . En consecuencia. todo real tiene exactamente una raíz cúbica real. Curiosamente.6667 5. la situación es más sencilla. Esto constituye un caso particular del Teorema Fundamental del Álgebra que establece que todo polinomio de grado n tiene n raíces (contando la multiplicidad). tras simplificar. El inverso de z tiene por módulo el inverso del módulo de z y por argumento el opuesto del argumento de z. En el campo real. se multiplican los módulos y se suman los argumentos.Aplicando relaciones de trigonometría elemental. con k entero. se comprueba que el argumento del producto de dos complejos es la suma de los argumentos de los factores. Para dividir complejos. hay que considerarlos definidos salvo adición de 2kπ. 1. Por ejemplo. Otra forma de caracterizar el inverso de z es como el conjugado dividido por el cuadrado del módulo.3333 180 0 puede Alternativamente. podemos decir que para multiplicar complejos. 2. 3 y –3 son raíces cuadradas de 9. n 210 240 270 300 330 Ejemplo 1 El complejo z = 1 + i tiene módulo 2 y argumento π 4. K . la raíz cúbica de –8 es –2 y la raíz cúbica de 8 es 2.'r') El cálculo de la raíz enésima de un complejo requiere algo más de cuidado. En general se tiene 2 zz= z 2. para k = 0.1. . complejos inversos tienen argumentos opuestos. Asimismo. se dividen los módulos y se restan los argumentos. Todo complejo no nulo tiene exactamente n raíces de orden n. Las raíces n-simas de un complejo se obtienen fácilmente usando la expresión moduloargumental. el argumento del cociente es la diferencia de los argumentos. mientras que –9 no tiene raíz cuadrada. la expresión binómica del resultado. 1. K . tenemos n raíces n-simas distintas de un complejo z. 1. n n expresión que toma distintos valores para k = 0. n n Ejemplo 2 El complejo z = − i tiene módulo 1 y argumento 3π 2. compass(cos(fi)+i*sin(fi).Dado un complejo no nulo z = z (cos θ + i sin θ ) . 2. arg(w n ) = n arg w = arg z. K . n − 1 o para cualesquiera otros n valores de k consecutivos. Las raíces cúbicas de z tienen π 2π +k . para módulo 1 y argumento 90 1 2 3 120 60 k = 0. Como el argumento está definido salvo adición de múltiplos enteros de 2π.') hold for k = 0:2 fi = pi/2 + k*2*pi/3. Si aplicamos el desarrollo de la exponencial al número imaginario ib. podemos escribir . que escribimos como: 1 θ 2π wk = z n (cos ϕ k + i sin ϕ k ). En definitiva. Por las propiedades de las potencias tenemos que wn = w = z de donde |w| es la raíz n-ésima positiva (real) de |z|. Por otra parte. tratamos de hallar los complejos w = w (cos ϕ + i sin ϕ ) tales que w n = z.'r') end 270 2. donde ϕ k = + k . 2 y sus expresiones son: π π cos + i sin = i 0. n − 1 . para k = 0. 2. coseno y exponencial pueden aproximarse indefinidamente por su desarrollo de Taylor en cualquier intervalo acotado. 1.1. de donde θ 2π ϕ = +k .5 Fórmula de Euler Las funciones reales seno. compass(z.'-.5 150 30 2 2 7π 7π 3 1 cos + i sin =− − i 6 6 2 2 180 0 11π 11π 3 1 cos + i sin = − i 6 6 2 2 210 330 240 300 n Representémoslas con MATLAB: z = -i. tenemos nϕ = θ + 2kπ . Más precisamente deberíamos decir que z es un logaritmo de w. parece lógico decir que z es el logaritmo de w. log w = log w + i (arg w + 2kπ ) para cualquier k entero. . pues cualquier complejo que difiera de z en un múltiplo entero de 2πi.(i θ ) 2 (i θ ) 3 (i θ ) 4 (i θ ) 5 + + + +L 2! 3! 4! 5! θ2 θ3 θ4 θ5 = 1 + iθ − −i + +i +L 2! 3! 4! 5!   θ2 θ4 θ3 θ5 =1− + − L iθ − + − L   2! 4! 3! 5!   y recordando los desarrollos del seno y del coseno ponemos e i θ = cos θ + i sin θ que constituye la fórmula de Euler. Podemos rescribir la forma trigonométrica de un complejo como z = z (cos θ + i sin θ ) = z e i θ e iθ = 1 + iθ + La interpretación geométrica de producto y cociente se deriva ahora formalmente de las propiedades de la exponencial. w = e x . también lo será. o sea. Definimos formalmente también la exponencial compleja mediante e z = e x +i y = e x (cos y + i sin y ) Figura 2: Original e imagen de un rectángulo por la exponencial compleja La exponencial de z es un complejo w cuyo módulo es la exponencial de la parte real de z y cuyo argumento es la parte imaginaria de z. arg(w) = y Tomando logaritmos x = log w luego z = x + i y = log w + i arg w Como w es la exponencial de z. En resumen. de modo que produzcan a su vez intereses durante el periodo siguiente. 2. el polinomio x2 se representa mediante el vector [1 0 0]. En este caso. produce intereses durante el segundo mes. sobre todo. a que toda función continua en un intervalo cerrado puede aproximarse mediante polinomios. C(1+r). p = [a1 a2 . solamente se pueden resolver mediante fórmulas exactas las ecuaciones polinómicas de grado no superior a 4. Si ahorras durante un año. r.1 Representación mediante vectores El polinomio de grado n p( x ) = a1 x n + a 2 x n −1 + L + a n x + a n +1 se representa en MATLAB mediante el vector de longitud n+1 cuyos elementos son los coeficientes del polinomio ordenados de mayor a menor grado. La cantidad a13 corresponde a una cantidad final que se añade el último día del año y que no produce intereses. imponiendo a1 euros el primero de enero. en su lugar se utilizan métodos numéricos. debido a que son fáciles de evaluar y.2. . Los polinomios surgen a menudo en problemas de resolución de ecuaciones. Por ejemplo. Ejemplo 3 Cada mes ahorras parte de tu paga para comprar un regalo a un/a amigo/a. . es lo que produce 1 euro ingresado en la cuenta al cabo de un mes. a fin de año tendrás a1 ( 1 + r )12 = a1 x 12 euros. la cantidad acumulada al final del primer mes. las fórmulas para ecuaciones de grado superior a 2 son raramente utilizadas. En esta sección recordamos las operaciones y propiedades básicas de los polinomios y las funciones de MATLAB que actúan sobre ellos. De hecho. siendo x = 1 + r. El interés compuesto consiste en acumular los intereses al capital al final de cada periodo. an an+1] . En general. Incluimos los coeficientes nulos para conservar el grado del polinomio. Esta cantidad se expresa como un polinomio que depende de las imposiciones y del tipo de interés mensual. a pesar de la sencillez y las buenas propiedades de los polinomios. hasta que logras reunir la cantidad deseada. un capital C se convierte en un mes en C(1+r). A primeros de mes.2.2 Polinomios Los polinomios constituyen una clase de funciones de gran importancia. convirtiéndose al final de este periodo en C(1+r)2 y así sucesivamente. El dinero acumulado a fin de año con este plan de ahorro viene dado por el polinomio C = a1 x12 + a 2 x11 + L + a12 x + a13 donde ai es la cantidad impuesta al principio del i-ésimo mes. haces un ingreso en una cuenta “remunerada”. Un ingreso de a2 euros el 1 de febrero se convierte en a2x11 euros a final de año y así sucesivamente. mientras que [1] representa al polinomio constante 1. Curiosamente. El tipo de interés mensual en tanto por uno. divisor. Ejemplo 5 Con MATLAB (x − 1) se puede obtener mediante 6 p = [1 -1]. usando la función conv. cociente y resto. q = conv(p.2 Operaciones con polinomios Para operar con polinomios en MATLAB. Afortunadamente. q = [1 0 2]. con q(x) no nulo. si no recordamos este procedimiento. q. cuya sintaxis es [c. con deconv p = [1 -2 2 -1 3 7].2. Para sumar o restar en MATLAB polinomios de distinto grado. hay que traducir a operaciones con vectores las correspondientes operaciones con polinomios. Ejemplo 6 Dividimos p( x) = x 5 − 2 x 4 + 2 x 3 − x 2 + 3 x + 7 por q( x) = x 2 + 2 .p) r = conv(q. . resta y producto por un escalar se efectúan término a término.q) conv(q. Como la suma. podemos recurrir la función deconv de MATLAB. pueden determinarse de forma única dos polinomios c(x) y r(x) tales que (i) p(x) = q(x)c(x) + r(x) (ii) r(x) es idénticamente nulo o de menor grado que q(x) Los polinomios c(x) y r(x) se llaman el cociente y el resto de la división. c y r vectores que representan los polinomios dividendo. basta operar con los coeficientes de cada término.r] = deconv(p.Coeficientes p ( x ) = a1 x n + a 2 x n −1 + L + a n x + a n +1 Coeficiente director Indeterminada Término independiente Figura 3 Nomenclatura de polinomios 2.q) siendo p. Ejemplo 4 Para sumar en MATLAB los polinomios x2 y 3 hacemos p = [1 0 0] q = [0 0 3] p+q Multiplicar polinomios es tarea fácil con MATLAB.r) % (x−1)^2 % (x−1)^4 Recordemos el resultado fundamental de la división de polinomios: Dados dos polinomios con coeficientes reales (complejos) p(x) y q(x). Estos polinomios pueden obtenerse a mano por el método de Euclides. hay que representarlos como vectores de la misma longitud. q) El cociente es c( x) = x 3 − 2 x 2 + 3 y el resto r ( x) = 3x + 1. Teorema del Resto El valor del polinomio p(x) en a es el resto de la división de p(x) por x – a. x2 y x3 en el intervalo [− 1.a). x = linspace(–1.1+r) P otenc ias de x 1 Ejemplo 8 Para representar gráficamente los polinomios 1. p = 10*ones(1. siendo a el punto en que queremos evaluar el polinomio.13). La relación entre evaluación y división se establece en el siguiente teorema. [x. en lugar -1 de sustituir directamente la indeterminada -1 -0. construimos un polinomio cuyos coeficientes son las imposiciones y lo evaluamos en 1 + r .conv(q. 1]. desde el 1 de enero. Se cumplen las propiedades de la división porque el resto es de menor grado que el divisor y se verifica la relación (i).3% mensual. Ejemplo 9 Aplicamos el teorema del resto para el polinomio p(x) = x2 – 1 con a = 2. q = [1 –2] [c. es más cómodo aplicar la regla de Ruffini. Capital = polyval(p. comprobando que el resto de la división por x − 2 coincide con el valor del polinomio en 2.^3]) title(‘Potencias de x’). 2. r = 0. Teorema del resto Para que la representación de un polinomio p(x) mediante un vector p resulte práctica. r] = deconv(p.5 0 0. grid 0.3 Valor de un polinomio.1)’ plot(x. Ejemplo 7 Si ingresas 10€ el 1 de cada mes.2. Esto se hace en MATLAB mediante polyval(p. que equivale a dividir el polinomio por x − a.5 Para evaluar a mano un polinomio. 2) % Valor del polinomio en 2 .5 1 en la expresión del polinomio. es más fácil evaluarlos directamente que usar polyval. siendo r el tipo de interés mensual.r Los ceros iniciales que MATLAB añade a r sirven para que los sumandos de la expresión anterior tengan la misma longitud.5 0 -0. x.3/100. se necesita una forma fácil de obtener el valor del polinomio al sustituir la indeterminada x por un número dado a.^2 x. p = [1 0 –1]. como se comprueba mediante p . Siguiendo la idea del Ejemplo 3.r] = deconv(p.[c.q) % El resto es la última componente de r polyval(p.c) .^0 x x. ¿cuánto habrás acumulado hasta el 1 de enero del año siguiente? (Incluyendo 10€ de ese último día). al 0. El producto ( x − r )( x − r ) es un polinomio real de segundo grado sin raíces reales que aparece en la factorización real de p (x) . entonces r es una raíz múltiple del polinomio. Decimos que un número r es raíz del polinomio p(x). un complejo r es raíz de un polinomio p(x) de coeficientes reales si y sólo si su conjugado r es raíz del polinomio. Ejemplo 10 roots([1 0 1]) proporciona las raíces de x +1.4 Raíces de un polinomio. . Si p(x) admite varios factores de la forma x – r.2. Ejemplo 11 poly([-i. p(r) = 0.2. que no tiene raíces reales. Las raíces complejas de un polinomio real aparecen por pares conjugados. la descomposición contiene también factores de grado 2 correspondientes a polinomios de segundo grado que no tienen raíces reales. Como consecuencia del antes mencionado teorema del resto. En el caso real. La multiplicidad m de una raíz r del m polinomio p(x) es el máximo entero m tal que (x − r ) divide a p(x). si el valor del polinomio en dicho número es 0. 0 es una raíz de multiplicidad n del polinomio xn. contando sus multiplicidades. Naturalmente. K . 1 y –1 son raíces del polinomio x2 – 1. 2.2. Divisibilidad. Por ejemplo. La existencia y propiedades de las raíces están estrechamente relacionadas con las propiedades de divisibilidad de polinomios. Teóricamente se demuestra (Teorema fundamental del álgebra) que un polinomio de grado n tiene n raíces en el cuerpo de los números complejos. salvo el orden de los factores. Los métodos de cálculo de raíces que se aprenden en la escuela consisten en buscar factores de la forma x – r del polinomio en cuestión. Recíprocamente. Por ejemplo. La necesidad de trabajar con números complejos se manifiesta con la simple ecuación x 2 + 1 = 0. 2 Al aplicar roots a un polinomio se obtiene un vector con sus raíces. se puede obtener un polinomio a partir de sus raíces mediante la función poly. El exponente m j se denomina orden de multiplicidad de la raíz r j . El cálculo de todas las raíces de un polinomio es un asunto complicado que MATLAB resuelve de un plumazo con roots. i]) da como resultado [1 0 1].5 Descomposición en factores irreducibles. r2 . rk son todas las raíces distintas del polinomio p(x). Esta descomposición es única. se obtiene un resultado que establece esta relación: Teorema del Factor r es raíz de p(x) si y sólo si p(x) es divisible por x – r. o sea. Si sólo admite un factor. es decir. es raíz simple. Combinando los teoremas del resto y fundamental del álgebra se prueba que todo polinomio complejo de grado n > 0 se puede escribir como p ( x) = a1 ( x − r1 ) m1 ( x − r2 ) m2 LL ( x − rk ) mk donde r1 . estos métodos sólo son prácticos para hallar raíces enteras y poco más en casos preparados. y) al origen se obtiene mediante norm([x. % Abscisa y ordenada π y ρ = 2 . respectivamente. ρ) y cartesianas (x. correspondientes a pares de raíces complejas conjugada) Ejemplo 12 El polinomio x 3 − 1 tiene una raíz real x = 1 y dos raíces complejas conjugadas 1 3 x=− ± i . Ejemplo 13 Las coordenadas polares de (1. 2 2  1 3  1 3  x 3 − 1 = ( x − 1) x + − i  = ( x − 1)( x 2 + x + 1) i  x + +   2 2  2 2    2. x = 1. se suele determinar θ usando juiciosamente la fórmula y θ = arctan x Con MATLAB. pues. si el punto no es el origen. el ángulo está definido salvo adición de múltiplos enteros de 2π.descompone en producto de factores de la forma (de grado 1. la distancia se determina mediante ρ = x2 + y2 y para obtener el ángulo. la distancia del punto (x. Matemáticamente hablando. corespondientes a las raíces reales o de grado 2. Hacemos el cálculo con 4 . mientras que atan2 lo hace sobre las coordenadas en orden inverso. O x eje polar Tomando el polo como origen de coordenadas cartesianas y el eje polar como semieje de abscisas positivo. y) del punto P viene dada por las ecuaciones x = ρ cosθ y = ρ sin θ La relación inversa debe tratarse con más cuidado. −1) son θ = − MATLAB. En todo caso. Las coordenadas polares de un punto P son la distancia ρ al polo y el ángulo θ θ que forma OP con el eje polar. y = -1.3 Curvas en coordenadas polares El radar permite localizar un objeto en el plano conociendo su distancia a la antena y su P orientación. Observa que abs actúa sobre el vector. Alternativamente.x).y]) y el ángulo mediante la función atan2(y. Sus factorizaciones compleja y real son . la relación entre las coordenadas polares (θ. 2π[ o en qualquier trasladado del mismo. se fija un punto O del plano como origen de distancias o polo y un semieje que parte del polo a partir del ρ cual se miden los ángulos en sentido contrario a y las agujas del reloj. se elige un valor de θ tal que x y cosθ = y sin θ = ρ ρ Este valor es único en el intervalo [0. ρ = f (θ ) . También se puede pasar de coordenadas cartesianas a polares trabajando con complejos.5 120 150 60 30 150 120 60 30 270 270 Figura 4: Circunferencias ρ = 2. r = 2*ones(size(z)). cardioides Las coordenadas polares son útiles para describir algunas trayectorias. ρ = 2 es la ecuación de una circunferencia de centro el origen y radio 2 en coordenadas polares. La primera es tangente al eje polar y la segunda lo tiene por diámetro.r. r = abs(u) z = angle(u) % Pasa a complejos % Módulo % Argumento 2. polar(z.y]) z = atan2(y.101).5 180 210 240 300 0 330 180 210 240 300 0 330 90 1 0. basta tomar el complejo x + yi y calcular su módulo y su argumento.r) Las ecuaciones polares ρ = sin θ y ρ = cosθ corresponden a circunferencias que pasan por el polo. y). r = cos(z). polar(z.i. Por ejemplo. 2*pi).r) .1 Circunferencias. Ejemplo 14 u = 1 .5 1 0. poniendo el módulo en función del ángulo. polar(z. r = sin(z). y variando θ en determinado intervalo. 90 2 1. Para representarla gráficamente escribimos z = linspace(0.r) z = linspace(0.r = norm([x. pi. Dado el punto (x.'*') representa gráficamente los puntos del plano cuyas coordenadas polares están almacenadas en los vectores z (ángulo) y r (distancia). ρ = sin θ y ρ = cosθ z = linspace(0. pi).3.x) % Distancia % Ángulo La orden polar(z. 8 60 0.3 Espirales arquimediana y logarítmica La función lineal en polares. ρ = aθ . En la naturaleza aparece frecuentemente la espiral logarítmica ρ = e aθ .8 60 0.La gráfica de ecuación polar ρ = sin(θ / 2) se denomina cardioide. 120 150 90 1 0. polar(z.6 0. 2*pi.r) En el caso de un dipolo de longitud L la expresión de la potencia radiada depende de   kL   kL  cos 2 cos θ  − cos 2       2 sin θ El caso kL = π se denomina dipolo de media onda y el de kL = 2π . 2 . z = linspace(0. se representa como una espiral de paso fijo. Veamos por qué. r = sin(z/2). 2. dipolo de onda completa.4 0. llamada espiral de Arquímedes.4 0.2 120 30 150 90 1 0.2 30 180 0 330 240 300 180 0 330 240 300 210 210 270 270 Figura 5: Cardioide ρ = sin(θ / 2) y diagrama de radiación de antena P = sin 2 (θ ) 2.3.6 0.3.2 Diagramas de radiación de antenas (I) La densidad de potencia radiada por una antena elemental depende del ángulo respecto al eje de la antena según P = Pmax sin 2 (θ ) . 101). 70. utilizando el algoritmo de división b) por la regla de Ruffini c) utilizando la orden deconv Evalúa el mismo polinomio en x = 2 d) por sustitución directa e) usando polyval 6. 8. Halla los coeficientes del polinomio (2 x − 3) 5 y represéntalo gráficamente en el intervalo [1. .. Representa gráficamente la situación de una cuenta que ofrece un interés del 1% por periodo. Prueba que la expresión A cos t + B sin t puede ponerse como para determinado valor de ϕ.4 Problemas 1. El tipo de interés por periodo en tanto por uno es r. 80. 4.90 120 150 60 30 120 150 90 60 30 180 0 180 210 240 300 0 330 210 240 270 300 330 270 Figura 6: Espirales arquimediana y logarítmica 2. 25. Un ahorrista ingresa una cantidad aj al comienzo del j-ésimo periodo. −45. 5. Escribe una función que proporcione el saldo de la cuenta al principio de cada periodo. 3. . a interés compuesto. 30. 2 2i 2. j = 1.. Halla (x − 1) a partir de sus raíces. 2]. ei x + e − i x ei x − e−i x cos x = . Deduce las expresiones siguientes a partir de la fórmula de Euler. 2. A 2 + B 2 sin(t + ϕ ) . 6 7. Divide el polinomio x 3 − 2 x − 5 por x − 2 a) manualmente. en la que las imposiciones (disposiciones) al inicio de cada periodo son 100.n. Deduce de la expresión e a i ⋅ e b i = e ( a +b ) i las fórmulas del seno y coseno del ángulo suma a + b . Expresa el polinomio p( x) = 5 x 3 − x 2 + 3x + 1 como combinación lineal de potencias de ( x − 1). sin x = . 125. p ′(1) = c. 9. π ] para k = 0. uno que represente en el plano complejo las raíces de un polinomio real. θ ∈ [−π .. ± 1. ± 1. Halla un polinomio real de segundo grado que admita como raíz. y otro que represente en el plano cartesiano los valores del mismo polinomio en un intervalo que contenga las raíces reales. ± 2. Expresa el número 53 en base 2. pn] como combinación de potencias de x − a. La función ex se aproxima en un entorno del origen mediante el polinomio de Taylor x2 x3 xn p n ( x) = 1 + x + + +L+ 2 3! n! Representa la función exponencial y sus sucesivas aproximaciones en un intervalo de la forma [ −a.a) b) c) d) p( x) = a( x − 1) 3 + b( x − 1) 2 + c( x − 1) + d desarrollando las potencias de x − 1 e identificando coeficientes de las potencias de x del mismo grado en ambas expresiones.. es decir. Recíprocamente. para representar todos los números. las cifras de la expresión en base 2 un número decimal son los restos de las divisiones sucesivas por 2 de dicho número y sus cocientes.. a − b i también lo es. Escribe una función de MATLAB. que si a + b i es raíz de un polinomio con coeficientes reales. basta evaluar el correspondiente polinomio en 2. Las cifras de un número entero en notación decimal son los coeficientes de un polinomio cuyo valor en 10 es el número dado. Para pasar de base 2 a base 10. 1[. 11012 = 23 + 22 +0·2 + 1 = 13.a) que obtenga los coeficientes q = [q1. Observa la diferencia con el problema anterior. 11. ± 2. 0 y 1. Demuestra que las raíces complejas de un polinomio real aparecen en pares conjugados. 12. y observando que d es el resto de la división p( x) = ( x − 1) p1 ( x) + d . porque basta usar dos cifras. Halla la descomposición x5 + x 4 + x3 + x 2 + x + 1 .. Por ejemplo. observando que p (1) = d . Representa gráficamente las curvas a) ρ = sin((2k + 1)θ ). p2. qn] de la expresión del polinomio p = [p1. a]. en factores irreducibles reales del polinomio 15. 10. K . q = shiftpol(p. La función log(1+x) se aproxima en un entorno del origen mediante el polinomio de Taylor x2 x3 xn + − L + (−1) n +1 p n ( x) = x − 2 3 n Representa la función log(1+x) y sus sucesivas aproximaciones en el intervalo ]−1. Los dispositivos electrónicos almacenan y operan con números en base 2. θ ∈ [0. que c es el resto de la división de p1 ( x) entre x − 1 y así sucesivamente. K b) ρ = sin(2kθ ).. Escribe un fichero de MATLAB que genere dos gráficos en la misma ventana (usa subplot). q2.. π ] para k = 0. escribiendo p (x) en forma anidada p ( x) = ((a ( x − 1) + b)( x − 1) + c)( x − 1) + d . 13. ¿Cuál es su discriminante? 14. . . p ′′(1) = 2b y p ′′′(1) = 3 ⋅ 2a. c) Averigua la ecuación polar de la curva de la figura. con lo que al inicio del periodo n habrá acumulado la cantidad c n = c n −1 (1 + r ) + a n Los cálculos en MATLAB pueden efectuarse mediante la función siguiente: function c = ahorro(a. al final. Al cabo del primer periodo. an. c(1) = a(1). c1 = a1 .5 Soluciones 4. 16. y la segunda imposición. El total es c 2 = c1 (1 + r ) + a 2 Durante el segundo periodo se producen intereses por un importe de c2r y. % % c = ahorro(a. for k = 2:n c(k) = c(k-1)*(1+r) + a(k). Llamamos cj al saldo a principio del periodo j.1 b) ρ = 1+θ 2 θ c) ρ = 210 1+θ 2 d) ρ = log θ 240 log θ e) ρ = θ 1 f) ρ = . a3. dando un total de c3 = c 2 (1 + r ) + a3 y así sucesivamente hasta la última imposición. end .r) %AHORRO Formación de capital a interés compuesto. c1r.8 60 0.2 30 0 330 300 270 2. se produce la tercera imposición. se acumula a c1 el interés producido. a2.r) % % a: vector de cantidades ingresadas al inicio de cada periodo % r: tipo de interés en tanto por uno por periodo % c: vector de capitales acumulados al inicio de cada periodo n = length(a).6 0. 1 + e ⋅ cos θ 120 90 1 0. Elige un intervalo adecuado y representa las siguientes curvas dadas por su 150 ecuación polar: 1 a) ρ = θ 180 0. porque al principio no se han producido intereses. para distintos valores de e. Obviamente.4 0. c = ahorro(a. a = [100. 2.r). bar(c) title('Interés compuesto') xlabel('Periodo') ylabel('Capital') Nota: Este algoritmo obtiene el cociente y el resto de la división del polinomio cuyos coeficientes son los elementos del vector a entre x − (1 + r ) . [c. e) polyval(p. -45. este resultado se puede obtener mediante la expresión [cociente. [1.01. 5. r = 0. q = [1 -2]]. c) p = [1 0 -2 -5].c) El camino más corto es aplicar Ruffini reiteradamente . 2 y el resto es −1. b) Al ser el denominador de la forma x − a . 25. resto] = deconv(a. Los primeros elementos de c contienen el cociente y el último.Para hallar la gráfica pedida. El polinomio tiene a 1 como raíz de orden 6. 30. los cálculos se disponen de la siguiente forma x3 − 2x − 5 x − 2 − x3 + 2x 2 2x 2 − 2x − 2x 2 + 4x 2x − 5 − 2x + 4 −1 2 El cociente es x + 2 x + 2 y el resto −1. Con MATLAB. trabajando sólo con los coeficientes. –(1+r)]) . aplicamos esta función a los datos del problema y usamos la orden bar. c(n) es el resto.q) x 2 + 2x + 2 d) p(2) = 2 3 − 2 ⋅ 2 − 5 = 8 − 4 − 5 = −1. 70]. 80. Constituye la llamada Regla de Ruffini o algoritmo de Horner. 1 0 −2 −5 2 2 4 4 1 2 2 −1 Los coeficientes del cociente son 1. a) En el algoritmo clásico. Por tanto será (salvo factor constante que en este caso es 1) poly([1 1 1 1 1 1]) 8.2) 6. 125. se obtiene el mismo resultado por Ruffini.r] = deconv(p. 8660i .5000 0.0000 -0.yk). ck = 1. Dividimos por 2 sucesivamente y tomamos los restos en orden inverso: 53 1 2 26 0 2 13 1 2 6 0 2 3 1 Por tanto.5000 + 0.y. plot(x.5 −1 1 5 1 5 1 5 4 5 5 5 14 3 4 7 9 1 7 8 9 16 Los restos son los coeficientes de las sucesivas potencias de x − 1 : 5 x 3 − x 2 + 3x + 1 = 5( x − 1) 3 + 14( x − 1) 2 + 16( x − 1) + 8. La función siguiente genera vectores con los sumandos del desarrollo y los representa sucesivamente en el mismo gráfico: function prob08(n) x = linspace(-1. plot(x. Calculamos en primer lugar las raíces del polinomio: r = roots([1 1 1 1 1 1]) Obtenemos: r = 0.0.8660i . 9.pause yk = ones(size(x)). plot(x.8660i + 0.8660i .pause for k = 1:n ck = ck*k. hold on.0. 10.'r').yk). y = exp(x). pause end 2 1 14.1). yk = yk + x. a) Con MATLAB.5000 -0. 53 = 1101012.^k/ck.5000 -1. 0000 O sea p1 ( x) = x − x + 1 . Podemos recordar la fórmula de la suma de términos de una progresión geométrica o tener la feliz idea de multiplicar el polinomio dado por x − 1 . kπ kπ Tales raíces son x k = cos + i sin . 3 3 quedan las raíces halladas en el apartado anterior y se puede operar como antes. . [1 -r(2)]) p1 = 1. 5.0000 Es decir. Las dos últimas raíces forman otro par conjugado y.0000 2 1. [1 -r(5)]) p3 = 1. pero haciendo a mano los cálculos.Observamos que las dos primeras son complejas conjugadas. corresponde al factor p 2 ( x) = x + 1 . K . En conclusión. para k = 0. la descomposición pedida es: x 5 + x 4 + x 3 + x 2 + x + 1 = ( x 2 − x + 1)( x + 1)( x 2 + x + 1) .0000 1. por lo que dan lugar a un factor irreducible de segundo grado que podemos obtener con p1 = conv([1 -r(1)].0000 1. Eliminando x0 = 1. b) Sin MATLAB. De las dos maneras se llega a que dicho polinomio tiene las mismas raíces que x 6 − 1 . La tercera raíz. operando como antes tenemos p3 = conv([1 -r(4)]. salvo la raíz x = 1. p3 ( x) = x + x + 1 . −1. 1.0000 2 -1. Vamos a estudiar en este tema la representación gráfica de varios tipos de funciones.. ecuaciones paramétricas. con las unidades para la variable independiente x en el eje horizontal y las de la variable dependiente y en el eje vertical. . compass para representar números complejos y polar para representar funciones a partir de su expresión en coordenadas polares. Para representar geométricamente una función y = f(x) como una gráfica.. plot une puntos consecutivos mediante un segmento. (xn. plot para representar polinomios.. xn) del dominio y el vector y = (y1. sobre el fenómeno o proceso que se desea analizar.y) representa los pares (x1. un bioquímico investigará el crecimiento de una población sometida a determinadas condiciones. 3. Ejemplo 1 Una población de 100. D es el dominio de la función. Un ingeniero necesita saber la relación entre el peso que puede soportar un objeto y la deformación que en él se puede producir. . siendo el vector x = (x1. Hemos utilizado ya algunas órdenes gráficas de MATLAB para representar expresiones algebraicas.. coordenadas cartesianas. ya que disponer de la representación gráfica de una función proporciona información. yn) las imágenes correspondientes. x=0:24. Un economista estará interesado en estudiar los beneficios por la fabricación de un producto. y2).1 Funciones reales de una variable Una función f real de variable real es una aplicación de D en IR que asocia a cada elemento x ∈ D ⊆ IR un numero real y. curvas en dos y tres dimensiones. Por ejemplo.. Todas estas relaciones generalmente se formulan matemáticamente mediante una expresión algebraica que se conoce con el nombre de función. economistas y otros investigadores estudian relaciones entre cantidades. yn).000 bacterias se introduce en un cultivo. es tradicional usar el sistema de coordenadas cartesianas. Veremos algún comando más para representación de funciones en general. (x2..3 Representación gráfica de funciones (II) Muchos procesos de la vida real pueden expresarse mediante funciones elementales y combinaciones de estas. y1). .. Gráfica de una función: La gráfica de una función f es el conjunto de todos los puntos del plano cuyas coordenadas (x. y2. En general en MATLAB utilizaremos plot para representar pares de valores de una función. x2. siendo su número al cabo de x horas: f ( x) = 105 (1 + log( x 2 + 1)) para estudiar la influencia de este cultivo en el crecimiento de la población conviene representar la función f(x). Los científicos. por lo que la representación será más perfecta cuantos más puntos pongamos. Por defecto. coordenadas cilíndricas y esféricas. . que puede no ser evidente en los tratamientos algebraicos.. y) verifican y = f(x) siendo x del dominio de f.. La orden plot(x. y=x.'Máximo') También podemos situar el texto con el ratón gtext('Mínimo') Las instrucciones interactivas. ylabel('Ordenadas') 8 x 10 5 población de bacterias 7 6 Ordenadas 5 4 3 2 1 0 5 10 Abscisas 15 20 25 Ejemplo 2 Representa la función de beneficios de una empresa si al vender un producto hasta un tope de 5000 unidades estos viene dados por B(x)=x3 – 9x2 + 24x. como su nombre indica. como pause. .^3-9*x.y) Observamos que la población a lo largo del día sigue multiplicándose pero cada vez de forma menos acusada Añadiendo un tercer argumento a plot. por ejemplo.^2+1)). con plot(x. title('población de bacterias' xlabel('Abscisas'). para poner un título al gráfico. bien mediante coordenadas o con el ratón. Así. Para trazar la gráfica de la función de color rojo.y. La orden title sirve.^2+24*x.'r') Con help plot vemos las distintas combinaciones de caracteres válidas como tercer argumento de esa función.y. etc. gtext.x.y=1e5*(1+log(x. Para escribir la palabra Máximo en el punto de coordenadas (2.'*') visualizamos los puntos que determinan la función del ejemplo anterior. para ser ejecutadas las tienes que probar en MATLAB. modificamos el color y el estilo del trazo.y ) Podemos añadir cualquier texto sobre el gráfico sin más que indicar la posición en que debe aparecer.'*'. plot(x. El argumento de estas funciones ha de ser una cadena o variable de este tipo. en el mismo gráfico hacemos plot(x. 20) utilizamos text(2. donde x son miles de unidades.20. plot(x. x=0:. no se pueden ejecutar desde Word. Igualmente podemos poner títulos en los ejes con xlabel e ylabel.1:5.y. y=r*sin(t). v2). cuyas coordenadas respecto a un sistema de referencia son (x(t).axis equal La orden hold on hará que la próxima gráfica se inserte en la misma figura. -2) hacemos: t=0:3. r=0. hacemos: hold on. 3. plot(x. -1) y tiene la dirección del vector (3.5. x=r*cos(t). y) dado por: x = x0 + t v1 y = y0 + t v2 es una recta en el plano que pasa por el punto (x0. plot(x. y0) y es paralela al vector (v1.v=[3. x=2+t*v(1).y) realmente representamos el segmento de recta comprendido entre (2. y(t)). y=-1+t*v(2). -7).1 Circunferencia La circunferencia representada por ecuación cartesiana por x2 + y2 = r2 se expresa en ecuaciones paramétricas de la siguiente forma: P=(x.y). Ecuaciones paramétricas Supongamos que al número real t corresponde el punto f(t). y) = (x(t).01:2*pi. Ejemplo 3 La curva definida por la aplicación que a cada número real t le hace corresponder el punto (x.y=r*sin(t). Entonces la curva f se puede describir como la aplicación que a cada t de IR hace corresponder el punto (x. r=1. y) t y x x= r cos t y = r sin t Con lo que para representar en MATLAB la circunferencia de centro (0.3. x=r*cos(t). para dibujar un circunferencia concéntrica con la anterior pero de menor radio. en muchas ocasiones representa el tiempo y así tenemos la posición de un objeto a lo largo del tiempo. Se dice que: x =x(t) y = y(t) t∈ IR son las ecuaciones paramétricas de la curva. plot(x.-2]. y(t)).hold off Recuerda que debes hacer hold off para desactivar el comando hold . t es el parámetro. Para representar la recta que pasa por el punto (2.2. -1) y (11.y).0) y radio 1 basta hacer: t = 0:.2 Curvas en 2D Una aplicación continua f definida en un intervalo de la recta real IR y con valores en el plano IR2 se llama curva en dos dimensiones. y) axis equal 2 1. como indica la siguiente figura: Si en el momento inicial el punto de contacto de ambas circunferencias es (a. que en coordenadas cartesianas será ( x − a ) 2 + ( y − b) 2 = r 2 tendrá por ecuaciones paramétricas: x = a + r cos t y = b + r sin t Prueba a representar por ejemplo la circunferencia de centro (-2. y(t)) del tiempo.5 1 0. c=1. que es el parámetro.3 Ruletas Las ruletas son una variedad de cicloides.2. se obtiene con: t = 0:pi/100:2*pi. 3) y r = 2. y = 1-cos(t). 3. se llama cicloide a la trayectoria de un punto de una circunferencia que rueda sin deslizarse sobre una recta.2.En general la circunferencia de centro (a. plot(x. que es tangente exterior a otra circunferencia fija de radio a y rueda sobre ella con velocidad constante. Por ejemplo.5 0 0 1 2 3 4 5 6 Cicloide 3. a=2.2 Cicloide Las ecuaciones paramétricas de una curva aparecen frecuentemente en la descripción de trayectorias de móviles. b) y radio r . x=(a+c)*cos(t)-c*cos((a+c)*t/c). Se trata de obtener la trayectoria de un punto fijo P de una circunferencia de radio c. se obtienen por el desplazamiento de una circunferencia sobre otra. cuya posición en el plano viene dada por dos funciones (x(t). . 0) y al cabo de un tiempo t suponemos que la circunferencia que se desliza recorre un ángulo la ecuación de la trayectoria es: t = 0:pi/100:2*pi. y=(a+c)*sin(t)-c*sin((a+c)*t/c). x = t-sin(t). t. y) axis equal 2.5.plot(x. x=(a+c)*cos(t)-c*cos((a+c)*t/c). a=1.5 -2 -2. y comprueba que para a = c la curva obtenida es una cardioide. c=1.5 -1 -1.5 0 -0.5 2 1. c = 0. y=(a+c)*sin(t)-c*sin((a+c)*t/c).5 -4 -3 -2 -1 0 1 2 Si suponemos que la circunferencia que se desliza es tangente interior a la primera tenemos una ruleta distinta que se denomina hipocicloide. Represéntala para valores de los parámetros a = 2. plot(x.5 1 0. curva que ya vimos en coordenadas polares. . t = 0:pi/100:2*pi.y) axis equal 4 3 2 1 0 -1 -2 -3 -4 -5 -4 -3 -2 -1 0 1 2 3 4 5 La curva obtenida se llama epicicloide. almacenar estos valores en una matriz z y utilizar órdenes de MATLAB que representan estos valores como alturas sobre el plano XY. La deformación d para una barra de longitud l sometida a una fuerza transversal F aplicada en su centro tiene por valor: F l3 d= 4 E ah 3 .3 Funciones reales de dos variables Una función f real de dos variables es una aplicación de D en IR2 que asocia a cada elemento ( x. c=0. Para representar geométricamente una función z = f(x. por efecto de una fuerza proporcional a su dimensión mayor. Ejemplo 4 La elasticidad por flexión es el fenómeno de deformación de un cuerpo. es tradicional usar el sistema de coordenadas cartesianas de IR3 con las unidades para la variables independientes x e y en el plano horizontal XY y las de la variable dependiente z en el eje vertical. plot(x. Gráfica de una función: La gráfica de una función f es el conjunto de todos los puntos del espacio cuyas coordenadas (x. y ) ∈ D ⊆ IR2 un número real z. D es el dominio de la función. y=(a-c)*sin(t)-sin((a-c)*t/c).y) siendo (x. a=2. Dibújala.5. x=(a-c)*cos(t)+c*cos((a-c)*t/c). La idea básica para representar funciones de dos variables es evaluarlas en un conjunto de puntos del plano XY formando una malla rectangular.y) como una gráfica.t = 0:pi/100:2*pi. y) del dominio de f. y. 3. z) verifican z = f(x. y el sólido se deforma de tal modo que el sistema de laminas planas paralelas se encorvan formando un haz de superficies curvas.y) axis equal En el caso de c=a/2 la curva que se obtiene es un astroide. la anchura y grosor de las láminas.d) .5:0. La matriz d se obtiene evaluando la función a representar sobre el par de matrices obtenidas. pues la función actúa elemento a elemento. que a partir de un conjunto de valores de a y otro de h.siendo F el peso o fuerza que se aplica. Damos a la anchura a valores entre 5 y 10 mm y a la altura h entre 2 y 4 mm. [A. observamos que si calculamos directamente d obtenemos un error de dimensiones. a = 0. La deformación queda como una función de dos variables. h = 0. MATLAB nos ayuda con la orden meshgrid.% ¡Truco! d=F*100^3. A y H. l. h: longitud.H]=meshgrid(a.1x108 dinas.2:. Representación de d en función de a y h.h. sobre las que se aplica una fuerza F de 5.*H.^3).1e8. surf(a. anchura y altura de la barra y E el módulo de elasticidad de Young. con las coordenadas de los puntos de la malla. E=9e11. F =5./(4*E.0x 1011 dinas/cm2.01:1.h). Consideremos láminas de cobre de longitud constante 10 cm y de anchura a y grosor h d variables. Hay que tener cuidado en emplear las versiones 'punto' de las operaciones producto. El modulo de Young del cobre es de 9.01:0. a.*A. crea dos matrices.4. cociente y potencia. y. y podemos prescindir de la instrucción meshgrid.3.z) hold on z=1-Y+5*X. con el mismo vector característico surf(x.1]. [X. %Plano paralelo. surf(x. z = y'*x. representa el plano 2 x − 3 y + z = 1 x = -1:0.y.1 Paraboloide hiperbólico La función z = xy es la ecuación de una superficie llamada paraboloide hiperbólico. La representamos en el rectángulo [–1. en este caso es más fácil disponer los valores de la función en una matriz z de modo que la posición en la matriz corresponda con las coordenadas del punto (x.y).1:1.Y] = meshgrid(x. hold on z=6+3*Y-2*X.z) % Superficie de placas . % Columna×Fila=Matriz cuadrada surf(x. x = -1:0. surf(x.y. y = -1:.y). z=1+3*Y-2*X.Ejemplo 5 Sabemos que una ecuación lineal en tres dimensiones representa un plano en el espacio IR 3.z) Representemos en la misma figura un plano paralelo a éste y otro que lo corte.1:1.1:1.y.1]×[–1. y = -1:.1:1.z) hold off 3. [X.3.y.y.1:1.z) % Curvas de nivel surfc(x.^2 + Y.y) a la curva del plano XY para la que la función toma un valor constante f(x.y) = c ó z = c.Puedes utilizar también la instrucción mesh para obtener el armazón de la superficie mesh(x.z) 3.2 Paraboloide elíptico Representemos el paraboloide elíptico z = x2 + y2 en [–1.y).1] x = -1:0. se pueden obtener en MATLAB con: contour(x.Y] = meshgrid(x. % ¡Truco! z = X.y. representan pues circunferencias en el plano XY.z) % Superficie y curvas de nivel . y = -1:.1]×[–1.z) % Armazón de la superficie 3.4 Curvas y tonos de nivel Se llaman curvas de nivel de una función z = f(x. Por ejemplo las curvas de nivel del paraboloide elíptico son x2 + y2 = c. % !Ojo al punto! surf(x.1:1.^2.y. Prueba las siguientes opciones surfl(x.0.5 0 -0.5.0.z).[10.[0.y.0.waterfall(x. surf(x.10.[0.y.5.z.z).z.y.y.0.5 0 1 contourf(x.z.z) % Cortes verticales 2 1.5.z.5 1 0.y.5.5. con surfl se ilumina la superficie desde una fuente de luz.z)%curvas de nivel rellenas según niveles El aspecto de la superficie puede modificarse de varias maneras.y. shading flat shading interp shading faceted % sin malla % color degradado % losetas con borde .0])%foco de luz en la posición [0. Las opciones de sombreado muestran u ocultan la malla sobre la superficie.10]) surfl(x.[0.y.5 0. hiden off Con hidden on volvemos al estado normal en el que se ocultan las líneas posteriores.1]) surfl(x.5 -1 -1 -0.5 0 1 0.5.1]) Para crear una malla transparente hacemos mesh(x.y.0]) surfl(x. z = 3*cos((X. hold on ccontour3(x.El color se cambia con colormap que tiene algunas opciones predefinidas (ver la ayuda de graph3) colormap pink 3. La opción view(x. % !Ojo al punto! surf(x. vamos a representarla: x = -5:0.1:5. no a través de Word.^2).^2 + Y.y.y. y = -5:..^2)/3).y)./(3+X.1:5.z).^2 + Y.z) nos permite especificar el punto de vista de la superficie .'r') Podemos ver distintas posiciones del sombrero.4. ya que el punto de vista de un gráfico en 3D puede modificarse interactivamente con el ratón. [X. haciendo rotate3d % Recuerda que las instrucciones interactivas las tienes que probar directamente en Matlab.y.Y] = meshgrid(x.1 Sombrero la función z= 3 cos((x2+y2)/3)/(3+x2+y2) se denomina sombrero.z. 1.0) %(h.1). z = sin(X).Y] = meshgrid(x. i gráfica que vamos a introducir.'k'). y = x.2π]×[0.n.5.z) posicion en coordenadas cartesianas. Ejemplo 6 Representa la función z = sen x cos y en [0. [X. hold Si en cambio queremos mostrar las curvas de nivel sobre la superficie.z)% primera gráfica subplot(2. creamos un mapa físico hold.-5])%(x.pcolor(x.*sin(Y). subplot (m.z.y. shading interp.y.view([5.v) h rotación horizontal.y.y. shading interp. hacemos lo mismo con surf y contour3 surf(x.surf(x. view(0.2π] x = 0:pi/10:2*pi. contour(x.z). subplot(2.z). v elevación vertical La función pcolor muestra un rectángulo coloreado según el valor que se representa.y.y.5 Curvas en 3D .z.2). hold contour3(x.'k'). hold 3.z) % dos gráficas distribuidas en dos filas y una columna.surf(x.1.i) mxn gráficas distribuidas en m filas y n columnas.y).% segunda gráfica Jugando con las opciones de sombreado y añadiendo curvas de nivel en negro.y. Vamos a utilizar la orden subplot para crear varias gráficas en una misma figura. -2. r sin t1. k=2.x=p(1)+t*v(1).-1) y tiene la dirección del vector (3. donde t varía en un intervalo y x. x = r*sin(t). En tres dimensiones la ecuación de las ecuaciones paramétricas de la recta serán: x = x0 + t v1 y = y0 + t v2 z= z0 + t v3 Por ejemplo la que pasa por el punto (0.-1].2. y = cos(t). la trayectoria un móvil en el espacio puede definirse mediante sus ecuaciones paramétricas.p=[0.plot3(x. tenemos la trayectoria de una hélice. r sin t1.5.y. z(t)).y=p(2)+t*v(2).y. (x(t). z = k*t.-2. z = t.r=3. plot3(x. .2.1 Hélice Si x e y describen una circunferencia y z avanza linealmente.z) 30 25 20 15 10 5 0 4 2 0 -2 -4 -4 -2 2 0 4 A los puntos t1 y t1+ 2π corresponden los puntos M1= ( r cos t1. y(t).-1]. y y z son las coordenadas del móvil en función de t. Dibuja dos hélices entrelazadas con t = 0:pi/500:4*pi.z) 3. x = sin(t). ht1) y M2=( r cos t1.v=[3. y =r* cos(t). -1) será: t=-1:. la distancia entre estos dos puntos 2π |h| se llama paso de la hélice.Al igual que en el plano.01:1. z=p(3)+t*v(3). sus ecuaciones paramétricas serán: x = r cos t y = r sin t z=kt La representamos con: t = 0:pi/500:4*pi. ht1+2π h). f ( x.'r'.*sin(t).-z.plot3(x.*cos(t). y ) =  . y = t. x = t. Notemos que el gradiente en cada punto tiene la dirección de máxima variación de la función y es perpendicular a las curvas de nivel de la superficie.y. −2 y )  ∂x ∂y  ∇f ( x0 .-y.'g') Para dibujar una trayectoria helicoidal sobre una superficie cónica haz: t = 0:pi/400:20*pi.z. y0 ) = ( −2 x0 . y ) mínimo descenso .  evaluado en un conjunto de puntos y representarlo junto a las  ∂x ∂y  curvas de nivel.y. plot3(x.6 Líneas de máxima pendiente Dada una función de dos variables z = f(x. y ) = 1 − ( x 2 + y 2 )  ∂f ∂f  ∇ f ( x .∇f ( x .-x. −2 y0 ) máximo ascenso ∇f ( x .y) podemos obtener su vector  ∂f ∂f  gradiente ∇f =  .  = ( − 2 x .t) 80 60 40 20 0 100 50 0 -50 -100 -100 -50 50 0 100 3. y ) . dy) mediante flechas.y).y.1:1. [X.hold on.^2. Los puntos del espacio para los que r es constante equidistan del eje z y por tanto pertenecen a un cilindro circular (de aquí el nombre de coordenadas cilíndricas).θ.y. P(x.. y = -1:. El número no negativo r representa ahora la distancia del punto P al eje z tal como se indica en la figura.. z se denominan coordenadas cilíndricas del punto P.^2 + Y.dy). contour(z).%Obtiene el gradiente de z en los puntos de la malla [X. hold off 20 18 16 14 12 10 8 6 4 2 2 4 6 8 10 12 14 16 18 20 3.7 Coordenadas cilíndricas Si las coordenadas x e y de un punto P(x.veámoslo en el caso del paraboloide elíptico: x = -1:0.1.dy] = gradient(z.1:1.Y] = meshgrid(x.1).z) del espacio se sustituyen por las coordenadas polares r y θ. [dx.z) φ r z . la terna r.Y].%representa los vectores (dx. quiver(dx. % ¡Truco! z = X. 1:2.4 0.cartesianas x=r cos θ Las coordenadas cilíndricas son muy convenientes para representar cilindros y superficies de revolución en general. r=1. cylinder(r) .8 0.6 0. cilindrícas r= x 2 + y 2 y tgθ= x z=z Paso de c. Cilindro x2 + y2 = a2 coordenadas cartesianas r = a coordenadas cilíndricas.. para las cuales el eje z sea un eje de simetria. Basta crear un vector con los radios de la superficie a intervalos regulares del eje de revolución y utilizar la función cylinder.2 0 4 2 0 -2 -4 -4 -2 2 0 4 Para el cono el vector de radios será variable: r=-2:.cartesianas a c. 1 0.cylinder(rr). ó r=1 en c. cylinder(r)%cilindro x2+y2=1. cilindrícas a c. cilíndricas Por lo que un cilindro de radio 3 lo representaremos con: rr=3.y=r sin θ z=z Paso de c. Cono x2 + y2 = z2 coordenadas cartesianas r = z coordenadas cilíndricas Generar superficies de revolución es muy fácil con MATLAB. axis equal . θ.cartesianas a c. esféricas a c.3. esféricas r = x2 + y2 + z2 cosθ = y x2 + y2 z x + y2 + z2 2 θ r cos φ = La esfera x2+ y2+ z2 = a2 en coordenadas esféricas es φ = a En MATLAB puedes dibujar la esfera de radio 1 simplemente con: sphere. θ es el ángulo polar. φ es ángulo.y. que forma el semieje positivo z con la semirrecta de origen el de coordenadas y que contiene a P. 0 ≤φ ≤π r P z Paso de c. cartesianas x=rsin φ cos θ y= r sin φ sin θ z=r cos φ Paso de c.8 Coordenadas esféricas Un punto P(x. φ) de modo que: r es la distancia del origen al punto P.z) del espacio se representa en coordenadas esféricas mediante la terna (r. Representa la elipse de ecuaciones x2 y2 cartesianas.-b). como la temperatura de un objeto que esta siendo calentado etc. y ) = −∇v( x. y ) = q 4πε 0 ( 1 1 − ) r+ r− siendo: r+ = ( x − a ) 2 + ( y − b) 2 r− = ( x + a ) 2 + ( y + b) 2 Sabiendo que el campo eléctrico y el potencial verifican la relación: E ( x.La función y(t) = 1-e-bt. Investiga el efecto del parámetro b en la función y(t). el potencial eléctrico es: v ( x..-Las ecuaciones paramétricas de una elipse son: x = a cos t y = b sin t donde a y b son los semiejes.Un dipolo eléctrico consiste en dos cargas opuestas separadas por una distancia d. Si una de las cargas q está en la posición (a. representando y para varios valores de b en la misma gráfica. y ) → . 2. describe muchos procesos de ingeniería. pasándola previamente a ecuaciones paramétricas y obtén en 9 16 la misma gráfica la hipérbola x y = 1 para obtener una aproximación de los punto de corte de ambas cónicas. donde t es el tiempo y b>0.b) y la otra –q en (-a. ¿Al cabo de cuánto tiempo y(t) alcanzara el 98% de su valor asintótico?. + = 1 . 3.. El potencial eléctrico en un punto es la suma de los potenciales de cada carga.4 Problemas 1. Elegir adecuadamente a. b] en n partes iguales. El vector x tiene n + 1 componentes a las que llamamos a = x0 < x1 < x2 < .5.-1. 3..Representa gráficamente unos cuantos elementos de las sucesiones siguientes: an = sen(nπ/2) bn = (1+1/n)n cn = (-1)n Elige un estilo de trazado que deje los puntos aislados . .Representa las siguientes funciones en tres dimensiones junto a sus curvas de nivel: a) z = x2 .5). obtén un vector x cuyas componentes sean los extremos de los intervalos obtenidos al dividir [a.Representa la función (x(t). Crea una gráfica que exprese la relación entre la presión y el volumen para tres masas de aire de 1Kg. la masa m y el volumen V de un gas: pV = mRT donde R es la constante del gas. y=4*cos(t).utiliza los comandos de MATLAB gradient. sinh t).y(t))=(cosh t. kg y 7 kg con 20 ≤ V ≤ 100. Pon títulos a los ejes ¿Cuál es la temperatura a la esquina correspondiente a x = y = 0?. producido por dos cargas opuestas 1 = 9x109.7 (Newton metro/ kilogramo grados Kelvin) si estamos en una habitación a 20ºC = 293º K.Una placa cuadrada de metal se calienta a 80º C en la esquina correspondiente a x = y = 1. 6 Soluciones Problema 1 t=0:.. b y n para obtener representaciones gráficas de los valores en x de las siguientes funciones: a) f(x) = sen x d) f(x) = 1/x b) f(x) = sinh x e) f(x) = 1/(1+x2) c) f(x) = log x f) f(x) = 1/(1-x2) 6. . < xn = b. para el aire 286.1:2*pi. La temperatura se distribuye según la función: 2 2 T = 80e − ( x −1) e −3( y −1) Obtener la superficie y curvas de nivel para la temperatura.La ecuación de los gases perfectos nos da la relación entre la presión P. en la posición (1. y quiver para calcular y representar el campo eléctrico y las curvas de nivel del potencial...Dados dos números a < b. 7. de 2x10-6 C y k = 4πε 0 4.5) y (-1. m3. 5. ¿Qué tipo de asíntotas presenta esta función? 8. .1. x=3*sin(t)..y2 b) z = (x + y)2 c) z = x2y3 d) z = sen x sen y 9..5. la temperatura absoluta T. ^(-1)).-b.^(-1)-rn.Ey]=gradient(-V. [X.9]) Problema 2 for b=1:4 t=0:.0.98 de donde t ≅ 4/b. %ara representar una gráfica hemos de tener en cuenta los valores que nos interesa dar a la variable independiente./xh. a=1.'o').-a.num2str(b)]) hold on end title('Proceso de calentamiento de un cuerpo') hold off Al aumentar b. Problema 3 q=2e-6.0. Ex=Ex.y).1:2. V=q*k*(rp.^2+(Y-b).y). más rápido es el proceso.b.^2). i=find(V<-5000).1:-0.%normalizamos el vector E para que %flechas que lo representan sean del mismo orden.Ex.-b. y=x.1.Y. yd=1.y(11).Y]=meshgrid(x.1). plot(x.V(i)=-5000*ones(length(i). y=1-exp(-b*t).xd=0. La función tiene un comportamiento asintótico en y = 1.yi=1.'o'. x=-10:1:10.^2+(Y+b).V(i)=5000*ones(length(i).b. [Ex.Ey) hold off El campo (flechas) y el potencial de un dipolo 10 8 6 4 2 0 -2 -4 las .1). contour(X.1).'+'.y. E=sqrt(Ex.-9*16. quiver(X. k=9e9. rn=sqrt((X+a).1./E.^2).'-').1:5.Y.5./xi.^2+Ey. plot(t. b=-1. i=find(V>5000).xi.-a.yi) Así tienes una aproximación de los puntos de corte que en este caso se pueden obtener fácilmente con la instrucción: roots([16.1:./E. plot(a. rp=sqrt((X-a).xd. Ey=Ey.^2).5.xi=-5:.yd.text(1. por lo que para llegar al 98% tendremos: y = 1-e-bt ≅ 0.V) title('El campo (flechas) y el potencial de un dipolo') axis ('square') hold on plot(a.['b ='. Observa que la dirección del campo eléctrico es siempre perpendicular a las curvas de nivel del potencial. . porque no acaba en 2*pi t=0 : pi/200 : 2*pi .Y.^2 -Y. x=r*cos(t)..y) Z = -X.dX.Y.^2 %la función que sea [dX.y).txt [09/03/2008 13:49:10] .axis equal tiene un hueco a la derecha. quiver(X.Z) COORDENADAS CILINDRICAS: ej: r = -2:2.dY] = gradient(Z).01 : 2*pi .25 : 1.Y]=meshgrid(x. plot(x. %con quiver se representa en cada punto un vector con las componentes que se le diga.dY) %ahora se pueden superponer los contornos hold contour(X.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%203/notas. seria lo correcto PARA HACER EL GRADIENTE! : x = -1: 0.. y=r*sin(t).txt ADVERTENCIA: t=0 : 0.%20Matematicas/Primer%20Cuatrimestre/Practica%203/notas. r=1 . con cylinder(r) COORDENADAS ESFERICAS: las polares en 3D file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/. y=x [X. sin más que resolver dos sistemas triangulares. El elemento (i. Obtenido y.k) de la matriz L. Ux = y. El conocimiento de la descomposición de una matriz A en factores triangulares LU facilita la resolución de posteriores sistemas de ecuaciones lineales con la misma matriz A y distintos términos independientes.. El proceso de eliminación. utilizamos [L. se reducen finalmente a resolver un sistema de ecuaciones lineales. el flujo de tráfico en una red de calles y la distribución de la temperatura en una barra en estado estacionario. La matriz de esta permutación se obtiene junto con los factores L y U de [L.. mientas que la eliminación sobre la matriz completa ha costado del orden de n3 operaciones. sino sólo sobre los nuevos términos independientes (mediante la sustitución progresiva en Ly=b). Ejemplo 1 Dada la matriz del calor A=matcalor(3) . se resuelve el segundo sistema Ux=y. Este es uno de los problemas centrales del Álgebra Lineal. pues no hay que repetir los pasos de la fase de eliminación sobre toda la matriz. utilizando akk como pivote.U]= lu(A) En el caso general. por sustitución regresiva. si funciona sin dificultades. con lo que resolvemos varios sistemas de una vez. Si la eliminación tiene lugar sin intercambio de filas. resolvemos dos sistemas triangulares Ly = b . Las operaciones elementales de la eliminación pueden aplicarse simultáneamente a varios términos independientes.P]= lu(A) verificándose la relación PA = LU. por ejemplo un sistema triangular. puede resolverse conociendo estos factores. Ilustramos su importancia mediante tres ejemplos: un circuito eléctrico sencillo. Esta transformación se interpreta matricialmente como una descomposición de la matriz del sistema en dos factores triangulares. Un caso particular interesante es el cálculo de la inversa de una matriz A. mediante la función lu. Los métodos directos para sistemas lineales consisten en transformar el sistema en otro equivalente más sencillo de resolver. MATLAB proporciona también la descomposición LU de una matriz.. junto con el cálculo de valores y vectores propios.U. de modo que cualquier sistema con la misma matriz. Estos factores contienen toda la información relevante. genética. En lugar de resolver el sistema de matriz A. etc. con i>k. que puede interpretarse como la resolución de n sistemas lineales de matriz A y términos independientes. ingeniería. Así se ahorra trabajo.4 Aplicaciones de los sistemas lineales (I) Muchos problemas en ciencias sociales. El coste de resolución de estos sistemas triangulares es del orden de n2 operaciones. es el multiplicador usado para eliminar la variable xk de la ecuación i-ésima. produce además de la matriz triangular superior U otra matriz triangular inferior unidad L tal que A = L·U. hay que efectuar una permutación de filas de A para poder factorizar. las columnas de la matriz identidad de orden n. Consideramos una barra conductora del calor cuyos extremos están a temperatura conocida Ta y Tb. ordinarias o en derivadas parciales.1 Ecuación del calor El problema del calor es un ejemplo de obtención de sistemas lineales por discretización de problemas continuos...0000 1.. aunque aquí daremos una justificación intuitiva de las ecuaciones planteadas... En el estado estacionario.. Queremos hallar la temperatura a lo largo de la barra en estado estacionario. al tiempo que en cada ecuación sólo aparecen unas pocas... consideramos un número finito de puntos a lo largo de la barra. La discretización consiste en sustituir las derivadas por cocientes en diferencias en ciertos puntos del dominio. x1. x2..5000 0. 4. Tn.. T2. Así se obtienen sistemas de ecuaciones que se caracterizan por tener un elevado número de incógnitas. dividimos la longitud en n+1 partes iguales.. . Modelo Matemático Matriz Asociada T0 T1 . Tn Tn+1 Para resolver numéricamente problemas de este tipo. tomando n puntos equiespaciados llamados nodos. Al imponer esta condición a cada nodo obtenemos un sistema de ecuaciones lineales.6667 0 -1. suponemos que la temperatura en cada nodo es la media de las temperaturas de los nodos adyacentes. T1. xn y estimaremos la temperatura de estos puntos. . respectivamente.0000 1.. Los valores de la temperatura en los extremos pasan al segundo miembro constituyendo los términos independientes. normalmente formulados en términos de ecuaciones diferenciales o en derivadas parciales.5000 0 -1. por ejemplo.. .A = 2 -1 0 -1 2 -1 0 -1 2 lu(A) Con la función lu nos proporciona la descoposición LU de la matriz A ans = 2..0000 0.3333 Los sistemas lineales surgen a menudo de la discretización de problemas de frontera de ecuaciones diferenciales lineales. Las matrices de estos sistemas se denominan matrices dispersas y son de gran importancia en las aplicaciones.. Las diagonales se numeran a partir de la principal. En nuestro caso hacemos: n = 5. Se trata de una matriz tridiagonal simétrica. v = ones(n-1. los elementos de la diagonal principal valen 2 y los de las diagonales situadas inmediatamente por encima y por debajo de la diagonal principal –1  2 -1     -1 2 -1    -1 2 O   O O -1   -1 2    Ejemplo 2 Construimos esta matriz utilizando la orden diag(v) de MATLAB. En general la diagonal k esta formada por los elementos aij 4.diag(v. calor = 2*eye(n) . que es la diagonal 0.2 Red de calles El flujo de tráfico en una red de calles se modeliza mediante un sistema de ecuaciones lineales. Supongamos una zona de la ciudad formada por calles que se cruzan .-1) .T1 = (T0 + T2 )/ 2 T2 = (T1 + T3 )/ 2 T3 = (T2 + T4 )/ 2 M Tn = (Tn-1 + Tn+1 )/ 2 La matriz de este sistema tiene unas características especiales que aprovecharemos para su resolución. que sitúa en una diagonal determinada los elementos del vector v.diag(v.1) calor = 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 El segundo argumento de diag indica en que diagonal hay que colocar los elementos de v.1). La 1 esta situada justo encima de la principal y la –1 justo debajo. . o bien x4 + x6 – x7 = 600.. Así obtenemos x4 + x6 = 600 + x7. 300 500 A x3 400 x4 x1 B 200 x2 C x5 100 600 D x6 E x7 F 450 350 600 400 Tratamos de ver si se puede cortar la circulación de las calles 6 y 7 para realizar obras sin afectar el tráfico ajeno a la zona considerada. Suponemos que el tráfico no se acumula en las intersecciones. con 7 incógnitas. pues en la zona no se crean ni se almacenan vehículos. Formularemos el problema mediante un sistema de ecuaciones lineales. Junto a cada cruce aparece el número de vehículos que entran o salen por hora de la zona estudiada. La teoría de sistemas lineales responderá estas cuestiones. Las calles son de sentido único de circulación indicado por las flechas. Denotamos el flujo de tráfico entre los cruces por las variables xi.perpendicularmente en los puntos A. Al haber menos ecuaciones que incógnitas. como se muestra en la figura. el tráfico que entra en cada cruce debe ser igual al que sale.. . 7. Entonces.. tal vez se puedan añadir condiciones adicionales como el cierre de las calles 6 y 7.. x7 + 600. una por calle. según el mapa.. El análisis de cada cruce proporciona el siguiente sistema: +x 3 x1 +x 4 x1 .. B. Ejemplo 3 El tráfico que llega al cruce E es.x 2 -x 5 x2 +x 6 x3 + x 6 -x 7 x4 x5 x7 = = = = = = 800 200 500 750 600 -50 Es un sistema lineal de 6 ecuaciones. . Las hipótesis del modelo sugieren que la suma de los términos independientes ha de ser cero. 2. F. i = 1. Comencemos analizando la estructura de la matriz del sistema. El tráfico que sale es x4 + x6. una por cruce. 4)=–1. aparece un 1 por cada calle que 'sale' de ese cruce y un –1 por cada calle que 'entra' en el mismo.–750. los cruces. hay un 1 en la posición del cruce donde 'empieza' la calle y un –1 en el lugar del cruce en que 'termina' la calle.6)=1.3)=–1.7)=1.2) =1. A(3. en la columna de cada calle. A(4. En cada columna hay un 1 en la fila del vértice inicial del arco y un 1 en la fila del vértice final.5)=1. A(4. Un grafo dirigido está formado por un conjunto de vértices.600. Edita también los términos independientes.3) =1.1)=–1. y un conjunto de arcos uniendo determinados pares de vértices.4) =1. pero tiene muchos ceros.6)=–1. lo cual debería ser aprovechado para simplificar los cálculos. En cada columna hay 2 elementos no nulos. A(6. En la fila correspondiente a un cruce. poniendo una fila por vértice del grafo y una columna por arco. Recíprocamente.1) =1. A(5.7)=–1 .4. A(5.5)=–1. A(2. A(6. A(2.50] La matriz construida se denomina matriz de incidencia. A(1. A(1. por lo que la matriz puede ser muy grande.–200.–500. La matriz de incidencia de un grafo dirigido se construye como en el caso de la red de calles. La red de calles es un ejemplo de grafo dirigido. A(3. A(2.3 Matriz de incidencia Calle 1 C r u c e A B C D E F 1 -1 0 0 0 0 2 0 1 -1 0 0 0 3 1 0 0 -1 0 0 4 0 -1 0 0 1 0 5 0 0 1 0 0 -1 6 0 0 0 -1 1 0 7 0 0 0 0 -1 1 Las filas de la matriz corresponden a los cruces y las columnas a las calles que los conectan. A(5. b=[800.2)=–1. 0.0.-1.0.0.0.50] b = 800 -200 -500 -750 600 50 calculamos el rango de la matriz A rank(A) ans = 5 y ahora calculamos el valor de la matriz ampliada para ver si el sistema es compatible.-500 .1.1.0.1] A = 1 -1 0 0 0 0 0 1 -1 0 0 0 1 0 0 -1 0 0 0 -1 0 0 1 0 0 0 1 0 0 -1 0 0 0 -1 1 0 0 0 0 0 -1 1 Editamos los términos independientes b=[800 .b]) ans = 5 Como el rango de la matriz A es igual al rango de la matriz ampliada A|b entonces el sistema es compatible 4.0.0.0.0.1.1.0.0.0.0.1.0. A=[1.4 Red eléctrica a R1 b R1 R1 R1 V I1 R2 I2 R2 I3 R2 I4 R3 d c R4 R4 R4 R4 .0.-1.-750 .0.0.0.-1.0.0.0.600 . rank([A.Ejemplo 4 Editamos la matriz que denominanos A por calles.-1.0.0.-1.-1.-200 . definiendo los elementos no nulos de cada columna en las filas correspondientes a los cruces.0.0.1.0.0. El sistema de ecuaciones resultante es el siguiente: 12I1 -10I 2 =10. Ley de las mallas: la caída de potencial a lo largo de un camino cerrado del circuito es nula. 10I3 -13I4 =0. De este modo reducimos el número de incógnitas. sino sólo de las conexiones entre los mismos. Como el cable bc es común a dos mallas. Así. Resolvamos el siguiente problema del circuito sí V=10V. R4.Consideremos un circuito eléctrico con sólo resistencias y fuentes de potencial como el de la figura. Suponemos conocidos el voltaje V y los valores de las resistencias R1. Repitiendo este proceso para cada malla. la corriente I1 circula sobre el circuito cerrado abcd. Determinaremos las intensidades en cada rama del circuito mediante un sistema de ecuaciones lineales que se obtiene aplicando las leyes de Kirchhoff y la ley de Ohm. en la figura. 10I1 -22I2 +10I3 =0. la corriente que circula por él es I1–I2. R1 = R3 = R4 = 1 kΩ y R2 = 10 kΩ. Aplicando esta ley al resto de las ramas de la malla y sustituyendo en la ecuación anterior queda R1I1+R2(l1-l2) R4I1 = V. Las intensidades en cada rama se obtienen inmediatamente como suma algebraica de las intensidades que circulan por las mallas de las que forma parte. Ejemplo 5 . 10I2 -10I3 +10I4 =0. siendo V el voltaje de la fuente. en lugar de a los arcos. En el caso de resistencias. Estas leyes no dependen de los elementos físicos del circuito. . R2. R3. Ley de los nudos: la suma algebraica de las intensidades que concurren en un nudo es cero. por su resistencia: V = I·R Aplicamos implícitamente la ley de los nudos al considerar que las intensidades están vinculadas a las mallas. su influencia queda establecida mediante la Ley de Ohm: La caída de potencial en cada rama es el producto de la intensidad que circula por ella. se obtiene un sistema de ecuaciones lineales cuya solución son las intensidades en cada malla del circuito. Aplicando la ley de las mallas a abcd tenemos Vab + Vbc + Vcd = V La ley de Ohm para el cable que conecta b y c establece que Vbc = R2(l1-l2) donde R2 es el valor de la resistencia que conecta b con c. diag(v.5993 -0. n = 5. pero MATLAB la trata como matriz dispersa la orden . donde la matriz es A=[12 -10 0 0. La función sparse declara dispersa la matriz A. MATLAB dispone de funciones específicas para estas matrices. Ejemplo 4 Dada la matriz del calor del Ejemplo 2 veremos algunas de las funciones de MATLAB. Estas matrices son además de gran tamaño. matriz con relativamente pocos elementos no nulos. A = 2*eye(n) . Por ello. Por ejemplo. con n elementos no nulos sobre un total de n2 elementos.Este sera el sistema A*x=b. Así. n=3.9363 4.1). es decir. La función spy(A) muestra gráficamente las posiciones no nulas de la matriz A. 0] b = 10 0 0 0 luego encontramos los valores de la corriente I I=A\b I = 0. full(A) convierte en llena una matriz declarada previamente dispersa. en oposición a dispersas) supone un despilfarro innecesario. v = ones(n-1. 0 . En contraste con eye(n) que es la identidad de orden n considerada como matriz llena.5 Matrices Dispersas Los sistemas lineales que aparecen en las aplicaciones suelen tener matriz dispersa.0 0 10 -13] A = 12 10 0 0 -10 -22 10 0 0 10 -10 10 0 0 10 -13 y los términos independientes b= [10 . 0 . la propia matriz identidad es dispersa.2809 -1.0 10 -10 10. por lo que almacenarlas y tratarlas como matrices normales (llenas. sólo se almacenan y se opera con sus elementos no nulos.A=speye(n) define la misma matriz.diag(v.-1) . Al listar una matriz dispersa obtenemos una serie de filas con un par que indica la posición de un elemento no nulo seguido del valor de este elemento.10 -22 10 0.1) A = .2172 -0. 2) (2.5) (5.2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 A=matcalor(10) A = 2 -1 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 % Matriz ecuación del calor 0 0 -1 2 -1 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 -1 2 -1 0 0 0 0 0 0 0 0 -1 2 a=sparse(A) a = (1.1) (2.2) (2.3) (3.2) (3.5) % La convierto en dispersa 2 -1 -1 2 -1 -1 2 -1 -1 2 -1 -1 2 full(a) ans = 2 -1 0 0 0 -1 2 -1 0 0 0 -1 2 -1 0 % Vuelve a ser llena 0 0 -1 2 -1 0 0 0 -1 2 issparse(A) ans = 0 % Para saber si es dispersa issparse(a) ans = 1 .4) (5.4) (4.4) (4.1) (1.3) (4.3) (3. [E.i+1) si i = j   i (n − j + 1) si i < j  c j.m. Ahora daremos algunos ejemplos: 1.v]=find(A) % Gráfico elementos no nulos % Lo mismo % Fila. Sea H(n)=hilb(n). la matriz de Hilbert de orden n. cij = E= n+ 1 a) Genera la matriz E con un fichero. 10 .j.v) % Lo mismo que sparse(A).i si i > j  b) Sea b el vector b = [1:n]'. Sea E la matriz de orden n 1 C .spy(A) spy(a) [i. columna y valor de % los elementos no nulos de A sparse(i.15 de dos modos diferentes: a) Directamente b) Observando que (HtH)-1= H-1(H-1)-1 c) Compara con la solución exacta que es invhilb(n)*(invhilb(n))'.C]=matrix(5)  i(n. Resuelve el sistema Ex = b b=[1 2 3 4 5]' x=E\b 2. Solución: n=5 H=hilb(n) H' .j. Halla la inversa de H(n)tH(n) para los valores de n=5. Considera las matrices como dispersas y como llenas. 4.1].X=H. i = 0.h) . 3. 15. 30.1. a y b. Sea A la siguiente matriz de orden n:  a b 0 ___ 0 0     b a b ___ 0 0   0 b a ___ 0 0     _ _ _ ___ _ _   0 0 0 ___ a b    0 0 0 ___ b a     -1 2 k Se puede probar que (I-A) = I + A + A + ⋅⋅⋅ + A + ⋅⋅⋅. 1+x+x2. 1+x. 40. 1+x+⋅⋅⋅+x10} y sean los vectores x56x3+2. ⋅⋅⋅ .. converge si a+2b<1. La segunda derivada de una función u(x) se puede aproximar por la fórmula u(x + h) + u(x . a) Halla las coordenadas de estos vectores en la base B resolviendo 3 sistemas de ecuaciones lineales. 1. 10 y aproximando la segunda derivada de u. x9-1. Considera el siguiente problema de frontera definido en x∈[0. -u''(x) = 4π2sen(2πx) u(0) = 0 u(1) = 0 a) Tomando h = 0. Experimenta la fórmula descrita para varios valores de n..'*H inv(X) invhilb(n)*(invhilb(n))' Analogamente hacemos lo mismo para n=10. .. 2.1*i). con a = b = 1/4 y c el vector formado por 1s. Resuelve Ax = c siendo A la matriz del ejercicio 5. b) Resuelve el sistema anterior considerando las matrices como llenas y dispersas.2u(x) u''(x) ≈ 2 h para h pequeño.m que permita encontrar la inversa de una matriz usando el método de Gauss-Jordan. para los valores n = 20. Problemas 1. Considera la base en P10 B={1. ui = u(0. c) Compara la solución con la solución exacta que es u(x) = sen(2πx). Compara los resultados y el número de operaciones efectuadas. Escribe en MATLAB un fichero. 5. obtén un sistema de ecuaciones 9×9 cuya solución aproxime la solución exacta del problema. x10-x6+x2+1. 50. compara los resultados y el número de operaciones. . b) Considera las matrices como dispersas y repite el apartado a). d) Repite el apartado c) considerando las matrices como dispersas. e) Compara el número de operaciones efectuadas. . c) Resuelve el apartado a) con la factorización LU (Observa que se trata de resolver 3 sistemas de ecuaciones simultáneamente). Analizaremos también el grado de precisión que se tiene al resolver resolver un sistema por un método directo ya que al trabajar en precisión finita.5 Aplicaciones de los sistemas lineales (II) Vamos a seguir mostrando en este tema diversas aplicaciones de los sistemas de ecuaciones lineales tales como la distribución de temperatura en una placa. La pivotación parcial consiste en elegir como pivote el elemento de mayor valor absoluto en la columna a eliminar. los errores de redondeo se van acumulando de un paso a otro. Planteando estas condiciones para cada nodo del interior de la placa. En todo caso. Aunque las operaciones se realicen en modo exacto. en los nodos de una malla de celdas cuadradas. podemos obtener por medios algebraicos sencillos una solución aproximada. por ejemplo si se han obtenido de medidas experimentales. el resultado puede verse muy afectado. como el número de operaciones puede ser muy grande (del orden de n3. Es importante conocer de qué modo afecta la incertidumbre de los datos al resultado final. es de vital importancia para controlar el error. la temperatura en cada nodo es la media las temperaturas en los cuatro nodos adyacentes. no cuesta mucho más buscarlo siempre con la condición de tener valor absoluto máximo. Suponemos además. Veremos que hay sistemas que amplifican el error durante la eliminación. . Aunque el error de cada operación es pequeño. los sistemas mal condicionados. Este objetivo sólo es alcanzable si somos capaces de obtener una solución analítica. pues un pivote pequeño provoca un aumento del error. lo cual no es frecuente en las aplicaciones. Dado que a veces hay que buscar un pivote no nulo. para que el problema esté determinado. es "continuo" en el sentido de que queremos conocer la temperatura en todos los (infinitos) puntos de su superficie. el problema de interpolación numérica que da lugar a un sistema con matriz asociada la matriz de Van der Monde y un caso de integración numérica que se resuelve mediante un sistema lineal con la matriz de Hilbert como matriz asociada. En cambio. se obtiene un sistema de n·m ecuaciones lineales con n·m incógnitas. mientras que otros lo mantienen dentro de ciertos límites.1 La ecuación del calor en una placa El problema de la distribución de temperatura en una placa. que la temperatura de los nodos de los bordes de la placa es conocida. si nos conformamos con conocer la temperatura en un número finito de puntos de la placa. al final. 5. y con ello se minimiza el error de la eliminación. los bien condicionados. seguir alguna estrategia al elegir los pivotes de la eliminación. Para controlar este crecimiento se aplica la estrategia de pivotación parcial. Consideramos pues (n+2)·(m+2) puntos regularmente distribuidos en la placa. evitando tomar pivotes muy pequeños durante la eliminación. siendo n el tamaño del sistema). Suponemos que en el estado estacionario. puede que los coeficientes del sistema sean imprecisos. Los elementos de la diagonal principal valen 4. 1 n+1 2n+1 … … (m-1)n+1 2 n+2 2n+2 … … (m-1)n+2 3 n+3 2n+3 … . –1.. excepto algunos ceros correspondientes a los nodos de los bordes superior e inferior de la malla (k = n. cuyo valor pasa al término independiente. Los nodos del borde tienen alrededor tres nodos incógnita y uno conocido. Para n = m = 3 si suponemos que en los bordes superior e inferior la temperatura es de 50 ºC. 2n+1).. La matriz del sistema es dispersa con elementos no nulos agrupados en cinco diagonales: la principal. ·. el nodo k está relacionado con los nodos k–1 y k+1 de su columna.. (m-1)n+3 : : : ·. (m-1)n nm Con esta ordenación. lo que establece una ordenación de las ecuaciones e incógnitas del sistema. las dos adyacentes y las dos situadas a distancia n de la principal. y con los nodos k–n y k+n de su fila. y los de las otras diagonales no nulas. Los nodos de las esquinas tienen dos vecinos incógnitos y dos conocidos.Numeramos los nodos por columnas. La ecuación correspondiente al nodo k se puede poner como: –Tk–n – Tk–1 + 4Tk – Tk+1 – Tk+n = 0 En cada ecuación aparecen a lo sumo cinco coeficientes no nulos. 2n. que corresponden en la malla a las columnas anterior y siguiente al nodo k. : n 2n 3n . en el lado izquierdo 0 ºC y en el derecho 100 ºC la situación es la siguiente: 50 50 0 T1 T4 0 T2 T5 0 T3 T6 50 50 y el sistema de ecuaciones tiene la forma: 50 T7 100 T8 100 T9 100 50 . n+1. como indica el esquema adjunto.. Proceso: % cálculo de las diagonales 1 y –1.1) b(n:n:n*m) = 100*ones(m.diag(v. 4u1   − u1    − u1          − u2 4u 2 − u2 − u2 − u3 − u3 4u 3 − u4 − u5 − u6 4u 4 − u4 − u4 − u5 − u6 − u5 4u 5 − u5 − u6 4u 6 4u 7 − u8 4u 8 − u8 − u7 − u8  T1   50       T2   0   T   50   3     T4   50   T  =    5   0  − u 9  T6   50       T7  150  − u 9  T8  100      4u 9  T9  150      En MATLAB construimos la matriz por diagonales mediante un fichero.diag(v. 2n. end % cálculo de las diagonales n y –n.diag(w.-1). v = ones(1. p = n*m.p-1). Como hemos dicho la temperatura en los bordes de la placa es conocida. v(k) = 0. Ejemplo 1 Comprueba la estructura de la matriz del sistema en el caso de tomar 9 puntos en la placa. ….p-n).diag(w. Salida: A matriz del sistema. salvo el inferior que se calienta a 100 ºC.3) .-n). supongamos que los lados de la placa se mantienen a 0 ºC. Como los nodos vecinos al lado inferior ocupan los lugares n. for k = n:n:p-n. A = calor2D(3.1) .n) .1) . w = ones(1.m Programa para generar la matriz (calor2D) Entrada: n. calculamos los términos independientes b del modo siguiente: b = zeros(n*m. % Matriz del sistema A = 4*eye(p).m dimensiones de la matriz. Solución: basta ejecutar la función anterior. 5681 80 60 40 20 0 5 4 3 2 1 1 2 3 4 5 6 .1).6606 29.4385 25.b(n:n:n*m) = 100*ones(m.0649 17.4385 46. n = 5.0679 14.6219 70.m) 3.6503 64.5947 40.6503 40.5443 25.4811 70.0649 8. x = A\b.6219 47. b = zeros(n*m.4811 b) Representamos gráficamente los resultados con surfl(placa) 6.3802 3.3802 7.Ejemplo 2 a) Halla la temperatura final en estado estacionario tomando 30 puntos en el interior de la placa.5947 24. flops Reordenamos la columna de resultados en filas y columnas según la disposición rectangular de la malla inicial: placa = reshape(x.6120 14.5443 29.n.8213 47.6120 6.0679 24.8437 7. Solución: a) resolvemos un sistema de matriz A y término independiente b que incluye la condición de frontera dada. Visualizamos la estructura de la matriz con spy(A) 0 5 10 15 20 25 30 0 nz = 128 5 10 15 20 25 30 Resolvemos el sistema y hallamos el coste: flops(0).5681 64.1) .8437 8. b) Representa gráficamente los resultados. c) Calcula el número de operaciones realizado obteniendo el ahorro que supone trabajar con matrices dispersas. visualiza la estructura de la matriz del sistema. m = 6.8213 46.1510 14.1510 17.m).6606 14. A = calor2D(n. 0001. el primer sistema resulta incompatible y el segundo indeterminado. sx = sA\sb. flops Obtenemos el mismo resultado a un coste diez veces menor. Estos sistemas se llaman mal condicionados .5 2 load E:\asig\1\matemati\laborato. En la representación gráfica vemos dos rectas cuya intersección está claramente situada. sb = sparse(b). 1 x+ y= 2  x + 1. Para obtener la gráfica hay que ponerlo primero en forma normal: x = full(sx) surfl(reshape(x.0001 está bien condicionado. Cambiando el coeficiente de x en la segunda ecuación a 1. Observa que el resultado no es disperso.2 Condicionamiento de una matriz Hay sistemas en los que un pequeño cambio en los coeficientes provoca un gran cambio en la solución. y = 2. El punto de intersección cambia mucho al mover poco una de las rectas.0001 x + x+ y = 1. obtenemos dos rectas que se cortan formado un ángulo muy pequeño.0001  y= 2 2 tiene solución exacta x = y = 1.04\practi04 who . En cambio.0002 0 0 0. pues la solución es poco sensible a los errores de los datos.c) El coste se reduce operando con matrices dispersas: sA = sparse(A).5 1 1.0001 y = 2.n. el sistema 0.rio\practica. Si cambio el término independiente de la segunda ecuación a 2. Esto indica que el sistema es muy sensible a los errores de redondeo y su solución poco fiable. 5 2 la solución cambia a x = 0. Por ejemplo.0002.0001 y = 2. 5 1 1. Si representamos gráficamente las ecuaciones del sistema.m)) 5. flops(0). el sistema x+ y= 2  x + 1. Nota: para realizar todos los ejemplos y ejercicios de este apartado te puedes ahorrar introducir las matrices cargándolas de la carpeta practica04 con la instrucción load. 2 1 00 0. si quieres probar con rcond obtendrás un valor muy pequeño ya que se trata de una matriz casi singular.1210 x 3 = -2. buscamos de nuevo la orden X=A\b y observaras que se tienen soluciones muy distintas. obtén el numero de condición de la matriz inicial para establecer conclusiones al respecto. Podemos decir que rcond mide lo cerca que está una matriz de ser singular. aunque en general una matriz casi singular tendrá determinante pequeño. MATLAB dispone de medidas numéricas del condicionamiento.7140 x 2 + 6.2750.7140 x 2 + 6. En efecto. La solución. Inversamente.4070   sólo tienes que hacer A(2. correspondiendo los próximos a cero a matrices mal condicionadas y los valores próximos a 1. Ejemplo 4 . la función rcond toma valores de 0 a 1. Ejemplo 3 Resuelve el siguiente sistema de ecuaciones lineales y compara la solución con la que resulta al variar ligeramente a22 a 4. como puedes comprobar con el siguiente ejercicio.1550 x 3 = 8.0210 x1 + 2.9130 x 3 = 12.0210 x1 + 2.0840 x1 -5. El criterio teórico de singularidad. por tanto no es muy fiable.1210  5.2750 ya que el resto de elementos son iguales. como era de esperar.Para sistemas de más de dos ecuaciones no es fácil analizar gráficamente su condicionamiento.1210  5.0840 x1 -5. Cuanto mayor es cond.4. pues.2750 x 2 + 1. hallamos la condición de la matriz del sistema: cond(A) y vemos que es muy elevada. Las funciones de MATLAB cond y rcond miden la sensibilidad al error al invertir una matriz o resolver un sistema con dicha matriz.0310 x1 . a matrices bien condicionadas. la anulación del determinante. Para conocer la fiabilidad de la solución.0310 x1 . Algorítmicamente. 3. La función cond toma valores de 1 a infinito.6480   1.9130 x 3 = 12.8320 x 2 + 9.2)=-4. el recíproco no es cierto.2730 x 2 + 1.1550 x 3 = 8. el mal condicionamiento se puede observar por el pequeño tamaño de los pivotes.4070   Solución: Llama A a la matriz del sistema A=malcon1 y b al vector de términos independientes b=ti1 ejecuta en Matlab X=A\b y se tiene la solución exacta x = y = z = 1.4.6480   1. peor es el comportamiento de la matriz.1210 x 3 = -2. entre otras cosas depende de la escala.8320 x 2 + 9. no es válido para estudiar la casi singularidad. para obtener el sistema 3. 5.3 Interpolación polinómica. Por ejemplo. c=cond(M) El mal condicionamiento de un sistema es difícil.1 xi = 1 i=1. Sin embargo.0001 x + y = 1.0001  −9999 y = −9999  El empeoramiento es debido a que el pivote utilizado. Prueba ahora con la resolución de un sistema formado por dos rectas paralelas y otra secante a ellas. se trata de una matriz casi singular pero muy bien condicionada ya que su número de condición es 1.9999 y = 0. El remedio obvio será intercambiar las dos ecuaciones antes de eliminar. aunque MATLAB muestra una advertencia. La función A\b que usamos para resolver sistemas con MATLAB aplica pivotación parcial. 0. obtiene la solución más aproximada en sentido mínimo cuadrático. Solución: Es muy fácil obtener un sistema incompatible basta pensar por ejemplo en dos planos paralelos: 2x – y + z = 4 2x – y + z = 1 El sistema no tiene solución pues mientras la matriz del sistema es de rango 1 la ampliada es de rango 2. .9999  que sigue siendo bien condicionado.Considera el siguiente sistema de 10 ecuaciones con 10 incógnitas 0. queda el sistema x+ y= 2  0.1*eye(10). pero hay que tener cuidado para no arruinar un sistema bien condicionado aplicándole un algoritmo de eliminación deficiente. sin embargo al hacer x=A\b se obtiene solución al problema. d=det(M)..1 por lo que su determinante es 10-10 . Solución: La matriz de los coeficientes es 10x10 con todos los elementos nulos excepto la diagonal principal que son 0. Matriz de van der Monde . Lo que esta ocurriendo es que cuando el sistema es incompatible se nos da la solución “menos mala” como veremos en el tema 10. M=0. a11. que es diez mil veces menor que el coeficiente a eliminar.. ¿Qué ocurre?. si elimino x+ y = 2 normalmente x en la segunda ecuación.0001  está bien condicionado. obtengo un sistema casi singular. Al tomar 1 como pivote. En el caso de sistemas incompatibles. 10. si no imposible de resolver. Ejemplo 5 Piensa en un sistema de ecuaciones incompatible que no sea cuadrado e intenta resolverlo con MATLAB. Comprueba que aunque el determinante de la matriz es muy pequeño el sistema está bien condicionado. hemos visto que el sistema 0.0001 x + y = 1. se trata también de un sistema incompatible en el que MATLAB nos da la solución sin mostrar en este caso ninguna advertencia. a21.. p(x)) por los pares dados.x(length(x))). (xn+1. (3. (x1.0) y (4. yy) title('Polinomio de interpolación') .1.En general. yn).1). yy=polyval(p. pasa un único polinomio Pn(x) de grado no superior a n.xx). Tres datos se interpolan con un polinomio de segundo grado...'*'.. En la interpolación lineal. (2. plot(x.. yn+1).0. consiste en determinar un polinomio de grado n que pase por n+1 puntos dados. obteniendo un sistema de ecuaciones lineales 1 1  8 4  27 9   64 16 1 1 a1   0      2 1 a2   1  = 3 1 a3   0      4 1 a4   1  Vp=y donde p denota la columna de las incógnitas.1). Decimos que V es la matriz de van der Monde asociada al vector de abscisas. x. Se eligen los polinomios porque son fáciles de evaluar y por el hecho fundamental de que por n+1 puntos de abscisa distinta. gráficamente una parábola que pasa por esos tres puntos.. xx=linspace(x(1).0]. (xn. la función se sustituye por la recta que pasa por dos puntos. es la llamada interpolación cuadrática. p = V\y Analicemos la estabilidad del sistema: cond(V) % da 1. V = vander(x) La solución del sistema se obtiene con y = [1.y. y1). y es la columna de ordenadas de los puntos dados y V es la matriz del sistema. Ejemplo 6 : Para hallar el polinomio de grado 3 p(x) =a1x3 + a2x2 + a3x + a4 que pasa por los puntos (1. la interpolación polinómica. sustituimos (x.1710e+003 el mal condicionamiento nos llevará como veremos en el capítulo 10 a buscar distintas expresiones para los polinomios de interpolación. xx.. a4 .. a1.. Ejecuta en MATLAB x = [1 2 3 4].0). 1 v v 2 .4 0.. b) ¿Cómo la obtendrías en MATLAB a partir de la instrucción Vander? c) Comprueba los apartados a) y b) para v=(1..8 0. Observa que la matriz de Van der Monde es otro ejemplo de mal condicionamiento. v1 n −1    n −1 1 v 2 v 2 2 v2    . realiza una función en i< j MATLAB que calcule el determinante a partir de esta expresión y comprueba que obtienes el mismo resultado que directamente en MATLAB con det(Vn).  . ( Sin utilizar la orden vander ). c)v=1:4. vn) la matriz de Van der Monde de orden n puede definirse formalmente del siguiente modo: 1 v1 v1 2 . end b) Con V=vander (v) se obtiene la matriz volteada basta pues hacer V=fliplr(V).2 0 -0. .2 1 0.    ..6 0.V1=mivander(v).i)=v.3. .. .V2=vander(v). v n −1  n n n   a) Edita una función en MATLAB para generarla.2. . . .C=cond(V1) V1 = 1 1 1 1 2 3 1 4 9 1 8 27 .4).v2. V2=fliplr(vander(v)). d) Fácilmente se comprueba que el det(Vn)= ∏ (v j − vi ) .5 2 2.Polinomio de interpolación 1.5 4 Ejemplo 7 Dado un vector v=(v1.5 3 3. Solución: a) function V=mivander(v) for i=1:length(v) V(:.  Vn=  . .^(i-1)'.2 1 1. . . f) Escribe la matriz de Hilbert de orden 9. 3 0 1 siendo f(x) una función dada. d=1.1. ¿qué componente del vector solución cambia más? Solución: a) Teniendo en cuenta que la matriz de Hilbert es simétrica evitamos recorrer todos los elementos: Hn= H(i. Imponiendo las condiciones obtenemos otro sistema lineal cuya matriz asociada es: 1/ 2 1/ 3 1/ 4 1/ 5 1/ 3 1/ 4 1/ 5 1/ 6 1/ 4  1/ 5 1/ 6  1/ 7  denominada matriz de Hilbert y se obtiene en MATLAB con hilb(4).. H9.1.1.4 Integración numérica.1]T.1. detvander(v) 5. n.1710e+003 d) function d=detvander(v) % nota que el parámetro de entrada es el vector v %a partir del que se genera la matriz de Van der Monde. end end det(V1). Luego incrementa la primera componente del lado derecho en un 1%. for j=1:n-1 for i=j+1:n d=d*(v(i)-v(j)). k = 0.V2 = 1 4 16 1 4 9 16 64 1 8 27 64 1 1 1 2 1 3 1 4 ans = 1. 1.1. 2. Matriz de Hilbert Imagina ahora que queremos determinar los coeficientes del polinomio p(x) de modo que cumplan ∫  1  1 / 2 1 / 3  1 / 4  1 0 x k p ( x) dx = ∫ x k f ( x) dx..1. ¿Cuál es su número de condición? g) Resuelve H9 x =[1. esta matriz es un caso clásico de mal condicionamiento. Eemplo 8 La matriz de Hilbert de orden n puede definirse formalmente del siguiente modo: 1 i..j)= Con formato . i + j −1 e) Edita una función en MATLAB para generarla.1. j = 1. vamos a ver en que consisten: 5 x1 − 2 x2 − x3 = 1 Dado el sistema x1 − 3x2 − x3 = −2 2 x1 − x2 + 4 x3 = 1 basta despejar de la primera ecuación x1. Existe otra alternativa para hallar la solución del sistema. y diremos que hemos llegado a la solución aproximada del sistema por el método de Jacobi. 2.0. sustituimos estos valores en las expresiones anteriores y obtenemos los nuevos valores de nuestras incógnitas: 1 2 1 x1= . de la segunda x2 y de la tercera x3. . H=mihilb(9). xn= H\b . x=H\b. H(j. Vamos a estudiar el caso más general generando una función que obtenga los términos independientes según las condiciones de contorno en los cuatro lados. cond(H) c) b= ones(9. observamos que la solución varía mucho.j). b(1)=1.. por ejemplo (0.En el ejemplo de la distribución de temperaturas en una placa hemos supuesto que la temperatura de los nodos de los bordes de la placa es conocida.01.i)=H(i. x2= . en el lateral derecho 100 ºC y en el izquierdo 0ºC. Ello es debido al mal condicionamiento de la matriz de hilbert. x3= 5 3 4 Repetimos este proceso las veces que consideremos oportuno y vamos obteniendo distintos valores de las incógnitas. end end b) format rat. Halla las temperaturas de la placa para n=5 y m=6 en el caso de que la temperatura en los bordes superior e inferior sea de 50 ºC. con ello tendríamos: 1 x1= (1 + 2 x 2 − 3x3 ) 5 −1 x2= (− 2 − x1 + x3 ) 3 1 x3= (1 − 2 x1 + x 2 ) 4 tomamos ahora una estimación inicial para x1.function H=mihilb(n) for i=1:n for j=i:n H(i..1). 6 Problemas 1. Realiza los cálculos en MATLAB.0). cuando veamos que la diferencia entre una terna de valores y la siguiente es muy pequeña pararemos.Los métodos que vimos en el tema 4 para resolver sistemas de ecuaciones lineales se llaman directos. son los llamados métodos iterativos. x2 y x3.j)=1/(i+j-1). Calculando abs(x-xn) obtenemos que la componente x7 es la que más se altera. . con la solución exacta que es c) Compara invhilb(n)*(invhilb(n))'. Si la matriz de Hilbert de orden n tiene la solución [1. este nuevo método iterativo es el de Gauss-Seidel.En el problema resuelto 2 se puede hacer una mejora. puede utilizarse utilizarlo para calcular x2n en la misma iteración.λ). de manera que la mitad inferior del exterior del tubo está a una temperatura de 0º C. La superficie superior del tubo se mantiene a 100º C. Utiliza una malla con nudos cada 10 cm. La sección interior mide 4 cm. n = 5. b)Resuelve el sistema del apartado a) para valores crecientes de n. de lado y la exterior 10 cm. .1.2) b) Halla X mediante A-1B. 6.. estudia el ahorro que ello supone en el número de operaciones. Escribe las fórmulas para realizar nuevas iteraciones con este método aplicadas al mismo ejemplo y comprueba que se llega a la solución con menos iteraciones.λ) la matriz cuadrada de orden n con λ en la diagonal principal y 1s en la diagonal por encima de la diagonal principal. Se supone que la temperatura en los laterales varía linealmente entre los 0º de la parte superior de hielo y los 100º de la cara superior... El tubo está parcialmente sumergido en hielo. Comprueba el número de operaciones efectuadas en los apartados a) y b). Registra la magnitud del mayor error como una función de n. 20. 30. Cuenta el número de operaciones. 4.a)La matriz de Hilbert es bien conocida por estar mal condicionada. 15. Estudiar la distribución de la temperatura en una sección transversal del tubo.Sea H(n) = hilb(n). Calcula el número de condición de AtA.Por un tubo de secciones interior y exterior cuadradas circula un líquido a temperatura de 200º C.. la matriz de Hilbert de orden n. (La matriz invhilb(n) proporciona la inversa exacta de la matriz de Hilbert). 10.Utiliza el comando spdiags para definir directamente como matriz dispersa la matriz del problema del calor en un rectángulo con las condiciones dadas en el problema resuelto 1.. ¿El elemento del vector solución que tiene el mayor error es siempre el mismo?. 10. 1] .. 15 de dos modos diferentes: a) Directamente.3)  y B = J (5. 25. (A dichas matrices se les llama bloques de Jordan).  J (5. 8.. Sea X J (5. 7. a) Edita una función cuyas entradas sean n y λ y la salida sea J(n. Describe la relación con el ejercicio 3. siendo A la matriz de Hilbert de orden n. Halla la inversa de H(n)tH(n) para los valores de n = 5.5) Sean las matrices por bloques A =   O la matriz (única) tal que AX = B O   J (5. . consiste en que una vez has obtenido x1n el nuevo valor de x1.1)  O O   . b) Observando que (AtA)-1 = A-1(A-1)t. y a su vez utiliza x1n y x2n para obtener x3n.. 5.Sea J(n. ¿cuál debe ser el vector de términos independientes?.3. Halla estas matrices contando el número total de operaciones necesarias. Halla Xi utilizando \. 9. % temperatura en el lado izquierdo .td. b(n)=tiz+ti.U V  c) Sean U. d) Si Ai es el vector i-ésimo columna de A. 7 Soluciones 1.function b=tin(n.Discretiza el problema de frontera d2 u = sen ( 2 x).y) = y(1-y) por discretización con h = 0.. y∈[0. W. b((m-1)*n+1)=ts+td.y) = u(1.05 .1] d x2 u(0) = 0 u(1) = 1 sustituyendo la derivada por el cociente de diferencias centrales u ( x i −1 ) − 2u ( xi ) + u ( x i +1 ) d2 u ( xi ) ≅ d x2 h2 Toma h = 0. W y Z. Cuenta el número de operaciones. Z cuatro matrices de orden 5 de modo que X =   .hemos de sumar las temperaturas b(1)=tiz+ts.1] . W. V.tiz) % n*m nodos distribuidos en n filas y m columnas %ts temperatura en el borde superior %ti temperatura en el borde inferior %td temperatura en el lado derecho %temperatura en el lado izquierdo %En las cuatro esquinas entra calor por dos lados. x ∈ [0. x∈[0. b(n*m)=td+ti. V. e) Halla los vectores columna de U.1] ∂ x2 ∂ y2 u(x.m. V.1. Xi es el vector i-ésimo columna de X. Bi es el vector i-ésimo columna de B.ts. 0) = u(x.ti. entonces AXi=Bi. Resuelve la ecuación en derivadas parciales ∂2 u ∂2 u + = 0 . Z resolviendo los sistemas correspondientes. Escribe W Z  las ecuaciones que verifican U.1) = 0 u(0. % términos independientes . donde se veía que la placa recibía calor por el borde inferior y se iba calentando hacia arriba.m). para contar el número de iteraciones..4495 20.2614 72.2614 65.9405 81. x2=x2n. Este es llamado método iterativo de Jacobi. Basta que ejecutes estas tres instrucciones las veces que consideres conveniente.0043 60.9957 45. x2n=-1/3*(-2-x1+x3). Calculamos los nuevos valores de las incógnitas con las expresiones: x1n=1/5*(1+2*x2-3*x3).4909 60.3043 54. quizá hasta que obtengas una solución similar a la que te proporciona el comando \..Inicialmente tomamos x1=0. + i=1..7386 46..m que resuelva estos sistemas y devuelva la posición de la componente donde se alcanza el error máximo.5505 79. % temperatura en el borde superior b(n+1:n:(m-2)*n+1)=ts.9983 34...9957 53.2793 20.0017 65.5091 39.1] = b ' con 1 1 1 b(i ) = + + . Actualizamos los valores de las incógnitas: x1=x1n.2401 46.x3=0 y ponemos iter =0 ..9405 72.0043 54.1. function pos=er3t5(n) %problema resuelto 3 for i=2:n H=hilb(i).4909 67. x3n=1/4*(1-2*x1+x2) hacemos iter=iter+1 para contar el número de iteraciones.m) placan = 27.4495 39. b=b'. xn=A\b. 3 Los términos independientes serán H n ∗ [1.. 2.5091 32.b(2:n-1)=tiz.6957 45. A = calor2D(n.n.. observa que el elemento de la solución que tiene mayor error va cambiando.0595 18.7599 53. m = 6.:)). %matriz del sistema for j=1:i b(j)=sum(H(j..7599 55.5505 surfl(placan) Podemos observar las diferencias de la distribución de temperaturas con los resultados obtenidos en el ejemplo 1. placan = reshape(xn.n.7207 79.2401 44. x2=0. % temperatura en el borde inferior b(2*n:n:(m-1)*n)=ti.7386 34.x3=x3n. % temperatura en el borde derecho b((m-1)*n+2:n*m-1)=td. mejor todo con fórmulas i i +1 n + (i − 1) a) Crearemos una función .0595 27. y repetimos el proceso calculando una nueva iteración. n = 5. %solución del sistema. observa que no siempre es la esperada [1.end x=H\b'.. %error máximo y posición que este ocupa end .pos(i)]=max(abs(x-ones(size(x)))).1...1] %observa la advertencia sobre le mal condicionamiento de la matriz [e. se dirá también que es un valor propio con multiplicidad k.los problemas de valores y vectores propios. podemos describir su acción sobre cualquier vector del espacio de forma relativamente sencilla. Si A es una matriz nxn diremos que un vector no nulo v es un vector propio asociado al valor propio λ si verifica: Av = λ v que podemos escribir como (A. Un vector propio de una matriz se transforma en un múltiplo escalar de sí mismo al multiplicarse por la matriz.λ I) v = 0 de modo que para hallar los valores y vectores propios hemos obtener soluciones no nulas de un sistema homogéneo de ecuaciones lineales con un parámetro indeterminado λ. llamado polinomio característico de la matriz A p(x)= det(A-xI) y la ecuación p(x) = 0 es la llamada ecuación característica. que analizamos aquí. 6. en el estudio de la ley de gravitación y movimiento de los planetas. Desde el punto de vista teórico. como en muchos otros campos de las matemáticas.1 Conceptos básicos: Los vectores sobre los que una matriz actúa de forma especialmente sencilla se llaman vectores propios. o sea. el método de las potencias. es un método elemental que permite obtener valores y vectores propios con gran precisión. Para que un sistema homogéneo tenga solución distinta de la trivial. Formalicemos primero estos conceptos. En este sentido. El objetivo de este tema es el cálculo aproximado de valores y vectores propios de una matriz. tales como aplicaciones de ingeniería que estudian las vibraciones en determinados sistemas mecánicos o circuitos eléctricos. Por lo tanto hallar los valores propios de la matriz A equivale a resolver su ecuación característica. procesos estadísticos representados mediante cadenas de Markov. a hallar las raíces del polinomio característico. . Si conocemos una base formada por vectores propios de la matriz. su matriz debe ser singular (no invertible).6 Valores y vectores propios Los problemas de valores y vectores propios surgen en diversas ramas de la ciencia. los métodos numéricos se hacen imprescindibles. por lo que se debe verificar det((A. por lo que .λ I) =0 El primer miembro de esta ecuación puede escribirse como un polinomio en la indeterminada λ. El factor de escala se denomina valor propio. Si alguna raíz λ tiene multiplicidad k. problemas clásicos de geometría como la clasificación de cónicas y cuádricas. Los métodos teóricos no suelen ser aplicables a ejemplos reales. constituyen la técnica usual de análisis y resolución de ecuaciones en diferencias y de ecuaciones diferenciales lineales. R en reparación y E estropeada. o sea admite una base de vectores propios. al día siguiente está en reparación en el 80% de los casos y sólo en un 20% está en funcionamiento. mientras que en el 10% está ya en funcionamiento. La matriz A no es diagonalizable. Los únicos vectores propios son de la forma (α. hay una probabilidad del 70% de que al día siguiente siga funcionando.1) . Cuando está funcionando. por lo que no hay una base de vectores propios. entonces es diagonalizable. (1 − λ ) 2 = 0. Las matrices que admiten una base de vectores propios se denominan matrices diagonalizables. v2 ) = (α . al día siguiente sigue estándolo en el 90 % de los casos. 2 0  A=   0 −3  La ecuación característica de este sencillo caso será: (2 − λ )(−3 − λ ) = 0 con lo que los valores propios son claramente los elementos de la diagonal. Para calcular los vectores propios resolveremos el sistema:  0 0   v1   0  ( A − 2 I )v = 0. Las probabilidades de pasar de un estado a otro vienen dadas por: . 0). α ∈ R  0 −5   v2   0  Análogamente el otro vector propio será cualquier múltiplo del vector de la base canónica e2 = (0. si está estropeada.     =   . Ejemplo 2 La matriz  1 1 A=  0 1    tiene un valor propio λ = 1. que es raíz doble de la ecuación característica. Vamos a modelizar el problema de forma que se pueda predecir el estado de la máquina en un futuro. Si la máquina se encuentra en reparación. Ejemplo 3 Una máquina se inspecciona cada día para comprobar si está funcionando (F). siendo D la matriz diagonal con los valores propios de A en la diagonal.Ejemplo 1 Halla los valores y vectores propios para la siguiente matriz diagonal. estropeada (E) o está siendo reparada (R). del 20% de que esté estropeada y 10% de que esté siendo reparada. Las reparaciones son laboriosas de manera que. es invertible y verifica A = S D S−1. α ∈ R . La máquina puede estar F funcionando. La matriz S cuyas columnas son tales vectores. 0). Los siguientes resultados de álgebra concernientes a valores y vectores propios nos van a ser muy útiles: Teorema Si una Matriz Anxn tiene n valores propios distintos.(v1 . Ek)t en función del estado el día anterior Dk-1 = (Tk-1. D2 = AD1 D3 = AD2 = A2 D1 D4 = AD3 = A3 D1 .2 0. Ek-1)t puede expresarse de la forma:  Fk   0.7 0 .2 0.1 0 . Rk-1.7 0.7 0  Rk −1   E   0.8  E   k   k −1  Por recurrencia podemos expresar el estado de un día cualquiera del mes en función del primer día del mes . la solución a nuestro problema será k  λ1 −1  Dk = SD k −1 S −1 D1 = S  0  0  0 λ k −1 2 0 0   0  S −1 D1 λk −1  3   c1    como S D1 es un vector constante..1 0.2 0 0   0 .2 0 0 R 0.2  Fk −1        Rk  =  0.Estado actual F E R F 0.8 0.1    A =  0 . Para el caso particular en que A sea diagonalizable el resultado se simplifica de forma notable. Dk = ADk −1 = Ak −1 D1 Por tanto el problema se reduce a calcular potencias de la matriz A. si k es elevado calcular Ak-1 requiere un gran número de operaciones.8 0 .2 0. Por lo que hallar el estado del proceso en este caso en el que la matriz de transición sea diagonalizable queda del siguiente modo: A = SDS −1 Ak −1 = SD k −1S −1 Dk = Ak −1 D1 = SD k −1S −1 D1 Con lo que denotando S= (v1..2 0 ... Rk.9 y la matriz de transición de estados de un día al siguiente es:  0 .9    con lo que el estado de un día Dk = (Fk.1 Estado futuro E 0.1 0. .7 0.1 0. v2. v3) los vectores propios. lo denotamos c = S −1 D1 =  c 2  c   3 -1 tenemos . son las masas en las posiciones x1 y x2 y ki i = 1. donde los coeficientes dependen de las potencias k-1 de los valores propios. k2=10 kN/m y k3= 15 kN/m quedará -w2x1 + 15 x1–-10 x2 = 0 -w2x2 – 10 x1 +25 x2 = 0 que expresado en notación matricial nos proporciona un problema de valores propios: x  15 −10   x1  2 1   x  = w  x   −10 25   2   2 Kx = λ x con  15 -10  K =  kN/m  -10 25  y λ = w2 . F = -K x. 3 las constantes recuperadoras. λk −1v 2 . Supongamos una solución armónica cada coordenada xi(t) = . λk −1 ) c 2  = c1λ1 −1v1 + c 2 λk −1v 2 + c3 λk −1v3 2 3 2 3 c   3 Así pues el estado de la máquina en un día cualquiera k se ha obtenido como una combinación lineal de los vectores propios asociados a la matriz de transición de estados. c1    k k Dk = (λ1 −1v1 . 2.2. que expresa que la fuerza de reacción elástica es proporcional al desplazamiento y de sentido contrario a él. donde w es una constante que corresponde a la frecuencia de la oscilación. x1 m1 k1 k2 m2 k3 x2 La ecuación de movimiento F=m a junto a la ley de Hooke. De esta forma derivando dos veces tenemos &&i = − w 2 Ai sin( wt + φ i ) = − w 2 xi x y sustituyendo en el sistema ya con los valores de m1=m2=1 kg. k1=5 kN/m. Ai la amplitud y φi la fase de la oscilación. m2. Ejemplo 4 La siguiente figura corresponde a un sistema mecánico de masas y resortes.Ai sin (wt + φi) i=1. nos proporcionan las ecuaciones de movimiento para el sistema: m1 &&1 + (k1 + k 2 ) x1 − k 2 x 2 = 0 x m2 &&2 − k 2 x1 + (k 2 + k 3 ) x 2 = 0 x donde m1 y. 8 u = [0. 1.1111. 1] y repetir los siguientes pasos: 1. 0. 0.1. 1.2 0 0. El problema se complica aún más al intentar resolver el sistema lineal homogéneo para un valor de λ que no llega a hacerlo "singular". El método de las potencias es una técnica iterativa para obtener de forma aproximada valores y vectores propios de una matriz. 0.0012.2 0 0   0. 1]' λ = 1.  0. los valores propios de una matriz se pueden obtener resolviendo la ecuación característica p(x) = 0.0340]' = 1. a partir de ellos. en las iteraciones 9 y 10 tenemos λ = 1.0020 y λ = 1. pues existen sólo fórmulas para casos con n < 5.1111. 1. 1]' A*u = [0. En MATLAB puedes realizar este proceso iterativo de una manera muy simple Inicializamos A=[.1    A =  0.8 .1]' A* u = [0.9    u = [1 1 1]' A*u = [1. La idea es calcular primero los vectores propios y.0340 * [0.556.0444]' = 1.6. ya que se verifica A*u = λ *u.1]' λ = 1. no obstante si queremos mayor precisión podemos seguir iterando.. y posteriormente los vectores propios resolviendo el sistema lineal asociado. 0.556. Las técnicas numéricas de búsqueda de raíces tampoco son de gran ayuda en este caso. Esto hace que los errores de redondeo afecten mucho a la estimación de los valores propios.9].0444 * [0. 0. Comenzamos por elegir un vector inicial u = [1.8 * [0. Repite los pasos 1 y 2 hasta que el cambio en el factor de normalización sea despreciable. si su grado es elevado. 0. los valores propios. sobre todo en el caso de raíces múltiples.1064. Normaliza el vector resultante dividiendo cada componente entre la de mayor valor absoluto. 1.0340 vemos que el valor de λ se va estabilizando. Por tanto λ es una estimación de un valor propio ya que A*u = λ*u. Los métodos no son sencillos. 0. por ejemplo. porque la localización de las n raíces (reales o complejas) de un polinomio es muy sensible a las variaciones de los coeficientes del polinomio..4894. además.1111. 2.4894.8]' = 1.2 Método de las potencias Teóricamente.4638. el factor de normalización es una aproximación a un valor propio y el vector resultante un vector propio. que ilustramos con la matriz asociada al proceso de Markov del Ejemplo 2.0444 u = [0.0979.2.2 0.2 . En este momento. Multiplica A*u. 0. En la práctica p(x) es difícil de obtener y.7 . MATLAB obtiene las raíces de un polinomio hallando los valores propios de una matriz de la que es polinomio característico. pero son tan eficaces que.7 0.4486. 3.5111.1 .8 0. la determinación analítica de las raíces es difícil o imposible. Recurrimos pues a métodos numéricos alternativos que eviten tener que determinar y resolver explícitamente el polinomio característico. 1]' λ = 1.0947.1 0. .1064. 4 Métodos iterativos La técnica general para resolver un problema por un método iterativo es la siguiente: 1.0444 1. es muy fácil de programar ya que se realiza un proceso muy sencillo.5 1 0. Se obtiene una estimación inicial x1 de la solución.0000 1.0206 1. Si ejecutas paso 2 y 3 hasta 10 veces obtendrás k = 10 lambda = Columns 1 through 7 1.0340 1. aunque no es muy rápido. paso 2: [mx.8000 Columns 8 through 10 1. n y u a partir de los anteriores.0050 1. lambda = [].u=[1.0031 1. .0020 1.k=1.%Localizar componente de mayor valor absoluto lambda = [lambda v(i)] % v(i) es a nueva estimación del valor propio % Normalizar v u = v/v(i) % Nueva estimación del vector propio k=k+1 % vamos a realizar una nueva iteración paso 3: Actualiza las instrucciones del paso 1 y paso 2 para ir obteniendo nuevos valores de v. En ella se resume la información previa de que disponemos.0127 1. hasta llegar al valor propio n y su correspondiente vector propio con la precisión que desees.5 0 2 4 Iteración 6 8 10 Este método.i] =max(abs(v)). 1. 1]'.0079 2 Estimación del valor propio Método de las potencias 1. 6. paso 1: v=A*u. 2. el error será seguramente inferior a tol. detenemos el algoritmo suponiendo que hemos alcanzado la precisión requerida. Para obtener el tipo de convergencia en el Ejemplo 2. 3. Si este número se supera. y cuanto más próxima a cero más rápida. que converjan a la solución x* . por lo que se define el error en cada iteración como el incremento entre dos iteraciones consecutivas e k = xk +1 − xk Si esta cantidad es suficientemente pequeña (menor que un argumento de entrada al que llamaremos tol). estamos subestimando el error. obteniendo valores nuevos a partir de los anteriores. si converge rápidamente. x3. en previsión de que el algoritmo diverja. en nuestro caso. procedemos del siguiente modo e = abs(diff(lambda)). y la convergencia es cuadrática si los cocientes k +21 se ek ek aproximan a un valor constante y ek +1 < 1 .En el caso de cálculo de valores propios posiblemente no tengamos información inicial. 2. x2. al contrario. Se dice que la convergencia es lineal si los cocientes valor constante y ek +1 tienden a estabilizarse en un ek e ek +1 < 1 . .. Tendremos en cuenta que si el método converge lentamente. A xk lo denominaremos estimación k-ésima y el error de esta aproximación viene determinado por εk = xk − x* . m = length(e).. 3. como es obvio. . exigiremos que las iteraciones varíen poco. normalmente se toma el vector columna de tantos unos como columnas haya en la matriz A. Refinamos iterativamente la aproximación. e Cuando la tasa de convergencia k +1 tiende a cero se dice que la convergencia ek superlineal. x4. en ambos casos cuanto más próximo a 1 es ek 2 el cociente mas lenta es la convergencia. Tipos de convergencia Para determinar la rapidez con que el método iterativo alcanza la solución se estudia la sucesión de incrementos {e k } k = 1. Llamaremos maxiter al máximo número de pasos que permitimos realizar a un algoritmo iterativo. Dependiendo del problema que se resuelva.. Establecemos un criterio de parada. no se conocerá el limite x* y no se podrá calcular εk. Conviene también limitar el número máximo de iteraciones. oscile indefinidamente o converja muy lentamente.. % ek = |xk+1 . detenemos las iteraciones aunque no se haya alcanzado la convergencia y emitimos un mensaje advirtiendo de este hecho. o bien xk − x* si x es un vector aunque generalmente.xk| .. La hipótesis de la simetría puede parecer muy restrictiva.. Por lo que la convergencia del método depende de los siguientes factores: • Elegir el vector x1 inicial de forma que c1 ≠ 0.. se encuentra el valor propio mayor en valor absoluto y su vector propio correspondiente. ... ...+ cn vn si multiplicamos por la matriz A. en la realidad. Sin embargo. tiene un valor propio dominante y es diagonalizable existen vectores n propios v1. Teorema espectral Una matriz Anxn real es simétrica si y sólo si A es diagonalizable mediante una matriz ortogonal. todos los demás coeficientes de la combinación lineal son muy pequeños en relación con λi y la convergencia será muy rápida. aparece asociada una matriz simétrica. cosas que en principio generalmente se desconocen.+ cn A vn = c1 λ1 v1 + c2 λ2 v2 + . vn que forman una base de R n n. • Si otro valor propio tiene el mismo valor absoluto que λi o un valor parecido no habrá convergencia o será muy lenta. tendremos que cualquier vector x1 se expresará como combinación lineal de ellos x1 = c1 v1 + c2 v2 + . v2. v3. tendremos x2 = A x 1= c1 A v1 + c2 A v2 + . Convergencia del método de las potencias Analicemos en primer lugar la base teórica del método de las potencias..+ cn λnm vn Por lo tanto si el valor propio λi es mayor en valor absoluto que todo el resto. en muchas aplicaciones prácticas.. −1 T Una matriz Anxn compleja se dice que es unitaria si A = A .r = e(2:m). Una matriz Anxn real se dice que es ortogonal si verifica A-1 = AT../e(1:m-1) % rk = ek+1/ek Los cocientes incrementales tienden a 0. es decir existe una matriz ortogonal P tal que PTAP es diagonal. Por tanto el método de las potencias tiene la desventaja de que sólo es efectivo si la matriz posee un valor propio dominante y elegimos adecuadamente el vector inicial..+ cn λn vn al multiplicar m veces por A se obtiene xm+1 = Am x1 = c1 λ1m v1 + c2 λ2m v2 + . como puede verse en el Ejemplo 3. del mismo modo si el vector inicial es casi paralelo al vector asociado al valor propio dominante λi. como vi son vectores propios con valores propios asociados λi verifican A vi = λi vi.62 luego tenemos convergencia lineal. Si una matriz Anxn. para ver que si el proceso es convergente. basta con que x1 no sea perpendicular al vector propio asociado a λi. al hacer m suficientemente grande todos los demás sumandos serán despreciables A m x1 → ci λm vi i que es algún múltiplo del vector propio vi con factor de normalización λi si c1 ≠ 0.. Recordemos los siguientes resultados de Álgebra. while crea un bucle que se repite mientras se cumpla determinada condición. maxiter. . lo indicará mediante un mensaje. se produce un salto hasta la orden que sigue al end. u1 calcule el valor propio asociado construyendo una sucesión de iterados (en realidad. un vector finito) hasta detectar si hay convergencia o no. obtendremos la estimación final tanto del vector propio como del valor porpio asociado. incr = uk +1 − uk y contamos el número de iteraciones. la estimación inicial u1.m que. tol y el número máximo de iteraciones. También interesa conocer la distancia entre los últimos iterados y el número de iteraciones realizadas. while e if permiten programar las iteraciones mencionadas. Los argumentos de entrada de potencias serán la matriz de la que queremos obtener el valor propio mayor en valor absoluto. a partir de una estimación inicial de un vector propio. Su sintaxis es while condición instrucciones no while condición sí instrucción instrucción end end Las instrucciones que contiene el while se repiten mientras se verifica la condición. Si el programa termina por haber superado el máximo de iteraciones sin alcanzar la convergencia. Si esta no se verifica. Crearemos un fichero potencias. Como resultado. Las iteraciones u = A u y posterior normalización del vector para hallar el nuevo valor de u y lambda constituyen el núcleo del algoritmo. la precisión con la que deseamos obtener la solución. Repetimos el proceso mientras se cumplan dos condiciones: que la variación sea mayor que la tolerancia: incr > tol que no se supere el máximo de iteraciones: k < maxiter La instrucción de MATLAB que veremos a continuación. k. En esta parte del programa controlamos la variación de un iterado al siguiente.Programación del método de las potencias Tratamos ahora de programar el método de las potencias en MATLAB. utilizaremos una bifurcación condicional para avisar que no ha habido convergencia si. su sintaxis es if condición instrucciones end las instrucciones se realizan si la condición se verifica. No debe sorprendernos a estas alturas que lo haga vectorialmente. no if condición sí instrucción instrucción end Otra estructura de control útil es la bifurcación condicional.Para que el bucle no sea indefinido. las instrucciones del while modifican los términos de la condición. se produce un salto hasta la orden que sigue al end. Si ésta no se verifica. En el programa potencias. La instrucción elseif es una abreviatura de else if. asociándoles el valor 1 si son verdaderas y el valor 0 si son falsas. Veamos algunos detalles sintácticos útiles para formular condiciones que aparecen en la definición de un bucle o una bifurcación condicional. la distancia entre los últimos iterados es mayor que la tolerancia.m. de modo que en algún momento deje de verificarse y entonces el bucle se termina. MATLAB reconoce expresiones lógicas. . La orden if proporciona bifurcaciones condicionales. al finalizar el bucle. La instrucción else permite introducir instrucciones que se ejecutan si la condición es falsa. Las instrucciones que contiene el if se ejecutan si se verifica la condición. La sintaxis en este caso es if condición instrucciones cierta else instrucciones falsa end Se pueden anidar varios if. Para combinar varias condiciones utilizamos los operadores lógicos: Conjunción: A&B Es cierta cuando A y B lo son. no necesariamente 0 ó 1. Utilizamos comparaciones en los métodos iterativos para comprobar que la distancia entre iterados es grande. tol la tolerancia. para distinguirla de la asignación. que usa un solo 'igual'. Efectuamos iteraciones mientras se cumplen simultáneamente los dos requisitos. Prueba a a a a a = [-1 0 1]. todo valor no nulo se considera verdadero y viceversa. u el vector inicial. Negación: ~A Es cierta cuando A es falsa. A y B pueden ser valores cualesquiera. La desigualdad se denota con el signo 'igual' precedido de la 'tilde'. > 0 >= 0 == 0 ~= 0 % devuelve 0 0 1 % devuelve 0 1 1 % devuelve 0 1 0 % devuelve 1 0 1 Notamos que la igualdad se denota con dos signos 'igual'. por lo que la condición que controla el bucle será la conjunción: (incr > tol) & (k < maxiter) Algoritmo potencias Entrada: A la matriz. que se obtiene con la combinación de teclas [Alt]+126. En este caso. incr>tol. O exclusiva: xor(A. maxiter nº máximo de iteraciones. y que no se ha alcanzado aún el tope de iteraciones.if condición no sí instrucción instrucción instrucción instrucción end Las comparaciones entre dos variables se codifican de forma natural mediante los signos de desigualdad e igualdad.B) Es cierta cuando ambas o ninguna lo son. . Disyunción: A|B Es cierta cuando alguna de las dos lo es. k<maxiter. inténtalo primero con un número pequeño de iteraciones de forma que no se alcance la convergencia. tol =0.u. u=[1 1 1]'. incr= tol+1.2 . Calcular el error o incremento incrementar el contador de iteraciones fin mientras Si al salir del bucle no se ha alcanzado la tolerancia deseada escribir un mensaje indicando que se necesitan más iteraciones fin del condicional Ejecuta la función potencias para hallar un valor propio de la matriz del Ejemplo 2.9]. maxiter=4..maxiter) Todavía no se alcanza la solución.k]=potencias(A. el último valor será la aproximación al valor propio de mayor valor absoluto.u. probamos otra vez u=[1 1 1]'. [lambda.u.maxiter) Observas que el programa da la solución que ha obtenido hasta ese momento advirtiendo que no se alcanza la tolerancia deseada ya que muestra el mensaje de que se necesitan más iteraciones. %hacemos el error mayor que la tolerancia para que entre en el bucle Mientras no converja o no hayamos llegado a maxiter Multiplicar A*u.1. 4 1 0.u. u=[1 1 1]'.8 .001.u. [lambda.maxiter) Se tiene el valor propio λ =1.  −4 3 2  B = 4 1 0     0 3 −1   B=[-4 3 2. k nº de iteraciones realizadas. Fíjate que el contador de operaciones esta a 5.1.k]=potencias(B.tol. [lambda. . Proceso: Inicializar lambda = [].2 0 0. 0.001. A=[.. Normalizar el vector resultante dividiendo cada componente entre el mayor en magnitud.7 .tol.1 .u. u vector propio asociado. tol de una milésima y un máximo de 30 iteraciones.1]' .tol. luego lo aumentas y estudias el tipo de convergencia que se produce. k=1.0012 y el vector propio asociado u = [ 0.tomando el vector u = [1. tol =0.. ¿cómo explicas esto si maxiter es 4? Probamos ahora u=[1 1 1]'.0776. 0 3 -1].k]=potencias(B. maxiter=30. Ejemplo 5 Aplica el método de las potencias a la matriz B. 1] en 11 iteraciones.Salida: lambda sucesión de iterados. maxiter=20.3871. maxiter=40. 000.tol. concretamente será el menor en valor absoluto.[lambda.5831 en la iteración 6 como valor propio de A-1.2 0 0. para tolerancia de una milésima.8 . maxiter=30. u=[1 1 1]'. vamos a profundizar un poco más para poder obtener cualquier valor propio. veamos ahora como obtener los valores propios con un valor absoluto intermedio entre estos./e(1:m-1) Método de las potencias inverso Como hemos visto en los ejemplos previos el método de las potencias obtiene el valor propio mayor en valor absoluto. -0.8417].1.u.u.9].tol.5831 que puedes obtener valor propio -0. tomamos la matriz desplazada A-kI que tendrá un valor singular muy cerca de cero y por tanto la inversa de esta matriz desplazada tendrá un valor propio mucho mayor en .1 .maxiter) Se obtiene -31.maxiter) Observa que se necesitan 30 iteraciones. [lambda.0317 y vector u = [ -0.7. el de A será -1/31.7 . Si A tiene un valor propio λi y es una matriz no singular entonces la matriz A-1 tiene el valor propio 1/λi . para ello vamos a hacer uso de la siguiente propiedad. esto ratifica que la convergencia es lenta.k]=potencias(B. la razón de convergencia esta cerca de 0.2 .k]=potencias(inv(A).u.158.será el menor valor propio en valor absoluto para la matriz A. r = e(2:m).. el vector propio correspondiente es el mismo.. A=[.001. 1/lambda(6) Desplazamiento con el método de las potencias Ya sabemos como obtener los valores propios de mayor y menor valor absoluto. Por lo que si en el método de las potencias trabajamos con A-1 obtendremos el valor propio mayor en valor absoluto λi y por tanto 1/λi .u. tol =0. 1. m = length(e). e = abs(diff(lambda)). Utilizamos ahora la siguiente propiedad Si A tiene un valor propio λi entonces la matriz A+kI tiene el valor propio λi +k Con lo cual si suponemos que se desea obtener un valor propio muy cercano a un valor k. no requiere cambios ya que A-1v =λi v multiplicando por A v = λi A v multiplicando por 1/λi 1 v=Av es decir v es también vector propio de A asociado al valor propio 1/λi λi Ejemplo 6 Vamos a obtener otro valor propio de la matriz A del Ejemplo 2. 1] Como hemos hecho notar. entonces habrá precisamente k valores propios en esta unión.magnitud que cualquier otro lo que hará que la convergencia sea mucho más rápida..tol.. -0.012 + -0. tol =0.n esto es.u. cada valor propio está. por lo menos en uno de los discos con centro aij y con radio ri.0669 en la iteración 11 con lo que el correspondiente valor propio de A será 1/lambda(11)+d Así pues el valor propio de A que nos faltaba es 0. % matriz des plazada u=[1 1 1]'.6317 y el vector propio asociado u = [-0... Ejemplo 7 En la matriz del Ejemplo 2 hemos obtenido ya los valores propios 1. y deshaciendo los cambios tendremos el valor propio λi que buscábamos. Esta información nos la proporciona el siguiente resultado que establece que los valores propios se encuentran en círculos cuyos centros están en los elementos de la diagonal aii con radio igual a la suma de los valores absolutos de los otros elementos de la fila i.k]=potencias(inv(Ad). para obtener el valor propio que nos falta que será un valor intermedio podemos hacer un desplazamiento de la matriz restando el punto medio de estos valores y proceder como hemos indicado.0317)/2 %punto medio de los valores propios ya obtenidos Ad=A-d*eye(3). maxiter=30.012 y -0. los valores propios estarán en los círculos -4 ± 5.maxiter) Obtenemos el valor propio 7. (Notemos que podríamos obtener este valor propio de forma inmediata ya que la suma de los tres valores propios coincide con la traza de la matriz) d= (1.0317.7595. Es obvio que este teorema será útil si la matriz presenta fuerte dominancia en la diagonal.u. 1 ± 4 y -1 ± 3. esta técnica de desplazamiento del método de las potencias también puede utilizarse para acelerar la convergencia del proceso. para poder realizar el desplazamiento hacia ellos. Ejemplo 8 Vamos a intentar acelerar la convergencia en el Ejemplo 3. pero para ello necesitamos tener información sobre en torno a que números se encuentran lo valores propios. [lambda. aunque la matriz no es diagonal dominante.2405. b) Si la unión de cualesquiera k de estos círculos no intersecta a los n-k restantes. Teorema de Gerschgorin a) Todo valor propio λ de Anxn satisface al menos una de las siguientes desigualdades: λ − aii ≤ ri en donde ri = ∑ aij j =1 j ≠i n i=1.001. lo hacemos desplazando primero por -4 . [S.0 -3]. r=roots (P) nos daría las raíces de P y por tanto los valores propios de A.. Bd= B+4*eye(3).k]=potencias(inv(Bd). Si A es una matriz nxn. 0 3 -1].2 .1). lambda=eig(A) y los vectores propios [S. u=[1 1 1]'. D] = eig(A). en otros temas trataremos la descomposición QR de una matriz y la descomposición de Shur. [lambda. maxiter=40.u.8 . P = poly (A) proporciona los coeficientes del polinomio característico de A. D] = eig(A) Comprobemos los resultados que hemos obtenido en el Ejemplo 2 con el método de las potencias utilizando ahora los comandos de MATLAB. r=eig(A) nos da directamente los valores propios de A. [V. ahora bien . es decir generan el mismo subespacio propio./V(:.1.u. especialmente útil para la compresión de datos.1 . puedes comprobar que los vectores propios obtenidos asociados al mismo valor propio son proporcionales. puedes ver la proporcionalidad haciendo S(:. vamos a ver ahora la descomposición de una matriz en valores singulares. los parámetros de salida son dos matrices.B=[-4 3 2.2 0 0. V es qxq unitaria. y ortogonal y ∑ es pxq y "diagonal" ya que .maxiter) Para encontrar el valor propio de B 1/lambda(14)-4 hemos reducido el número de iteraciones a la mitad. La primera columna de S correspondía al valor propio cercano a 1 que en V se encuentra en al tercera columna. la primera tiene por columnas los vectores propios de A y la segunda es una matriz diagonal con los valores propios de forma que A = S D S-1. Valores y vectores propios en MATLAB Existen funciones incorporadas a MATLAB que nos permiten calcular tanto el polinomio característico de una matriz A. tol =0. En el Ejemplo 1 para tener los valores propios basta hacer A=[2 0. Teorema: a) Toda matriz real A...001.9]. A=[. pues inicialmente había necesitado 30 iteraciones y ahora lo obtiene en 14. pxq puede descomponerse como A = U ∑ V T .3) Apéndice: Descomposición en valores singulares La descomposición de una matriz empleando matrices unitarias u ortogonales es muy útil para diversas aplicaciones.D]=eig(A) V*D*inv(V) %comprobamos que obtenemos A Notemos que las matrices V y S no coinciden pues los vectores propios no son únicos. 4 1 0.tol. en donde U es pxp unitaria y ortogonal. como sus valores y vectores propios. en cada caso se han obtenido de formas diferentes.7 . ∑ij = 0 para i ≠ j. por ejemplo al enviar fotografías desde el espacio. Más importante aún es que se puede usar para analizar los distintos rangos que puede tener la matriz si sus elementos estuvieran sometidos a errores ( por ejemplo de medición o modelado) que podrían ocasionar creer que el rango es mayor de lo que en realidad puede ser.. Por ejemplo si hacemos un sobre la foto un cuadriculado de 1000 ×1000 tendremos que mandar a la Tierra 1. para un r < k . lo que supone un ahorro de más del 99%. y así reconstruir la foto en la Tierra. y vi y los r valores singulares. Valores singulares y rango La descomposición en valores singulares se puede usar para determinar el rango de una matriz. puede enviarnos miles de fotos. Teorema: a) El rango k de A es igual al número de valores singulares de A diferentes de cero.000 inicial. la matriz Ar de rango r que hace mínimo a A − A ' 2 entre todas las matrices pxq. se verifica que σ i 2 son los valores propios de AHA (quizá agregando algunos ceros) y los vectores propios asociados son las columnas ui de U. puede ser útil en la compresión de datos. A'. de rango r viene dada por Ar = σ 1u1v1T + σ 2u2 v2T + .000.. y las columnas de U y V se denominan vectores singulares derecha e izquierda de A. Fijémonos que por ejemplo si r = 5 para reconstruir la foto es suficiente con el envío de 2 × 5 × 1000 + 5 = 10005 datos por foto e vez del 1..q} b) Los números σ i se llaman los valores singulares de A. es decir Avi = σ i ui para 1 ≤ i ≤ s . de rango k.2 y 3. + σ r ur vr T y el mínimo es A-A r 2 = σ r +1 La capacidad de la descomposición en valores singulares para obtener aproximaciones de bajo rango de una matriz dada. b) Si A es una matriz real pxq.000. .. esta descomposición contiene gran información sobre la matriz A. El problema es que esto son muchos datos si tenemos a su vez gran cantidad de fotos.. y ∑ii = σ i ≥ 0 siendo σ 1 ≥ σ 2 ≥ . + σ r ur vr T representa adecuadamente la imagen. Ejemplo 9 Vamos a practicar el método de comprensión de datos que acabamos de exponer con un ejemplo sencillo en el a partir de la siguiente imagen discretizada de la foto de una X se obtienen las aproximaciones de grado 1. Necesitamos pues un método para comprimir datos con el objetivo de transmitir menor cantidad. ésta se transmitiría a la Tierra en la forma de los 2r vectores ui.. En la práctica. ≥ σ s donde s=min {p. Un método es utilizar la descomposición en valores singulares de la matriz 1000 × 1000 A y ver si una aproximación de bajo rango Ar = σ 1u1v1T + σ 2u2 v2T + .000 de enteros para cada foto. Una cámara de un satélite fuera de la Tierra. Supongamos que para realizar el envío se discretiza o digitaliza la foto dividiendo la imagen en muchos cuadros pequeños y asignando un tono de un mismo color a cada uno de ellos. el cálculo de una descomposición en valores singulares se hace con técnicas de programación. S=diag(S) Observamos que A es de rango 10 ya que los valores singulares son σ 1 = 5.8.-1)+diag(d1. a=diag(dp)+diag(d1.20).19). con el que se obtiene la matriz de datos A de 20x20.6 σ 10 =0.6 σ 5 =2.U]=svd(A). b=fliplr(a).6 σ 4 =3.3 σ 3 =4. Calculamos la descomposición en valores singulares de la matriz A.4 σ 8 =1.b). function A=fotox dp=ones(1.3 σ 9 =0.m. σ 2 =5. [V. Af=A+1.5 σ 6 =1. image(Af) colormap flag A=fotox.3 y los otros σ i ≈ 0 .S.2 4 6 8 10 12 14 16 18 20 2 4 6 8 10 12 14 16 18 20 20 2 4 6 8 10 12 14 16 18 20 2 4 6 8 10 12 14 16 18 a) Imagen discretizada b) Aproximación de grado 1 2 4 6 8 10 12 14 16 18 20 2 4 6 8 10 12 14 16 18 20 2 4 6 8 10 12 14 16 18 20 2 4 6 8 10 12 14 16 18 20 c) Aproximación de grado 2 d) Aproximación de grado 3 La imagen discretizada se crea con el siguiente fichero. d1=ones(1.8 σ 7 =1.1). A=max(a. 1)'. la de grado 2 ya nos proporciona una idea muy próxima de la foto inicial con sólo 82 datos y la de rango 3 se puede decir que es muy buena ya que con 123 datos se aprecia la foto inicial. image(round(A1)+1) colormap flag T T L aproximación de rango 2 será A2 = σ 1u1v1 + σ 2u2 v2 y A-A 2 2 = σ 3 = 4. d) Obtén la descomposición de A de la forma A = S D S-1.0] averigua el estado al cabo de una semana y al finalizar el mes. image(round(A2)+1) colormap flag T T T L aproximación de rango 3 será A3 = σ 1u1v1 + σ 2u2 v2 +σ 3u3v3 y A-A 3 2 = σ 4 = 3.a)Aplica el método de las potencias para calcular el valor propio dominante de la matriz A. Plantea el problema como una sucesión de 4 estados..T La aproximación de rango 1 será A1 = σ 1u1v1 y A-A1 2 = σ 2 = 5. obtén la matriz de transición de un paso a otro como en el ejemplo 2. siendo D la matriz diagonal con los valores propios de A en la diagonal e) Compara los resultados obtenidos utilizando los comandos de MATLAB 2. ¿Crees qué se puede determinar el estado a largo plazo?.  3 0 −5     1 −1 0  A= 5   1 1 −2    b) Obtén con el método inverso el valor propio de menor valor absoluto y un vector propio asociado. que contenía información de 400 datos.3)'.2)'. . 3.6 A2=A1+S(2)*U(:. D1 = [1.Una red de comunicaciones transmite dígitos binarios. X2 el dígito binario registrado después de la primera transición y así sucesivamente.. así como un vector propio asociado. Si X1 denota el dígito binario que entra al sistema. c) Utiliza los círculos de Gerschgorin y la técnica de desplazamiento para acelerar la convergencia del método. Al pasar por la red.0. image(round(A3)+1) colormap flag Observamos que la aproximación de grado 1 no es satisfactoria.1)*V(:..3)*V(:. existe una probabilidad q de que el dígito que se recibe en la siguiente estación sea incorrecto.Utiliza el comando eig de MATLAB para resolver el Ejemplo 2.6 A3=A2+S(3)*U(:.3 A1=S(1)*U(:. suponiendo que inicialmente la máquina está en perfecto estado. para analizar la validez de la transmisión a largo plazo.2)*V(:. 0 ó 1. 7 Problemas 1. la inicial de tu nombre o de alguno de tus apellidos. 6. y (t ) = C (t ) x(t ) + D(t )u (t ) dt donde A es una matriz variable de. y es un vector variable m-dimensional y u es un vector variable r-dimensional. x es un vector variable n-dimensional. Por ejemplo el vector característico correspondiente al valor característico menor de la matriz persimétrica de 4× 4  2 −1 0 0     −1 2 −1 0  A=  0 −1 2 −1    0 0 −1 2  da la respuesta impulsiva de un canal de energía-unidad para una secuencia de error dada de longitud 2 y subsecuentemente.Resuelve el Ejemplo 3 correspondiente a un sistema mecánico de masas y resortes con los datos que en el mismo figuran. Utiliza el método de las potencias y sus variantes para obtener el menor valor característico de la matriz A y su vector propio correspondiente. n. el peso mínimo de cualquier secuencia de error posible. Para que el sistema sea estable..5 −7 4    0 0 −5     −1 1 0 0     0 −2 1 0  b) A(t ) =  0 0 −5 1     −1 −1 −2 −3  7.. n y j = 1.Un sistema dinámico lineal puede presentarse por las ecuaciones dx = A(t ) x(t ) + B (t )u (t ). Para ello debes obtener una foto discretizada de la letra mediante una matriz de 20 × 20 y realizar la descomposición en valores singulares de esta matriz para obtener las aproximaciones de rango mínimo que permitan identificar la foto inicial.. Determina la estabilidad del sistema en los siguientes casos: 2 0  −1  a) A(t ) =  −2. Una matriz persimétrica es una matriz que es simétrica alrededor de ambas diagonales. una matriz variable de.4. C es una matriz variable de.. 5-. y realiza el proceso seguido en el apéndice del tema para comprimir datos. todos los valores característicos de la matriz A deben tener una parte real no positiva para toda t....Elige una letra del abecedario. es decir A = (aij ) nxn es persimétrica si aij = a ji = an +1−i n+1-j ∀ i = 1. ... Muchos problemas de la teoría de la comunicación tienen soluciones que involucran a los valores y vectores propios de matrices persimétricas. B es una matriz variable de... 1)+c(2)*D(2.A=[.2 0 0. K=[15 -10.8 .3)^6*S(:. la probabilidad de que este estropeada es sólo del 5% y en el 68% de los casos la máquina está siendo reparada.. al cabo de 15 días tendremos  c1    15 15 15 15 D15 = (λ115−1v1 .6842 Es decir.2)^6*S(:.-Para resolver el problema de valor propio    x  = w  x  hallaremos los  −10 25   2   2 valores propios de La matriz K.2)^29*S(:. c(2)*D(2.2)+c(3)*D(3.3) y los otros dos sumandos son prácticamente nulos.7 . λ2 −1v2 .-10 25] K = 15 -10 .1)^29*S(:.D]=eig(A) supongamos que el primer día del mes la máquina esta en perfecto estado. x  15 −10   x1  2 1 4. en este caso :dicho estado estacionario será: c(3)*S(:. c=inv(S)*D1.9].2) c(1)*D(1.3) ans = 0. D7=c(1)*D(1. [S. que coincide con un vector propio del valor propio λ = 1 .3) A largo plazo podemos simplificar el resultado ya que existe un valor propio dominante c(3)*D(3. λ3 −1 )  c2  = c1λ115−1v1 + c2λ2 −1v2 + c3λ3 −1v3 c   3  c1    con c = S −1 D1 =  c 2  y λi los valores propios de A c   3 D1=[1 0 0]'.2632 0.1) Por lo que a largo plazo el proceso alcanza un estado estacionario sin importar el estado inicial del que partimos.1)+c(2)*D(2.1)^29*S(:.3)^29*S (:.1.3 ) y al finalizar el mes D30=c(1)*D(1.1)^6*S(:.8 Soluciones 2.1 .2)+c(3)*D(3. independiente de cómo se encuentre la máquina un determinado día al cabo de un tiempo la probabilidad de que este funcionando es aproximadamente del 26%.2 .2)^29*S(:.3)^29*S(:..0526 0. 6 0.2 -0./w A = -0.1791 Y por tanto queda determinado el movimiento que representamos a continuación: t=0:0.9698 5. Análogamente se obtiene A2. x1=-A(1).[x1.5 4 4. . A=-1.4 0 0.*sin(w(1)*t).5839 λ ′ A partir de estos valores e imponiendo las condiciones iniciales x1 (0) = 0 y x1 (0) = 1 obtenemos las ecuaciones de movimiento: x1 (t ) = − A1 sin( wt + φ1 ) x1 (0) = − A1 sin(φ1 ) = 0 de donde A1 = 0 o bien φ1 = 0.01:5.8197 31.x2+0.8 0.5]) 1 0.5 3 3. Para ′ determinar A1 utilizaremos x1 (0) = 1 ′ x1 (t ) = − wA1 cos( wt + φ1 ) Para t = 0 tendremos 1= .2 0 -0.5 1 1.5 2 2.2.4 0.-10 25 lambda=eig(K) lambda = 8. plot(t.3367 -0. supongamos este caso.1803 y finalmente w = w=sqrt(lambda) w = 2.5 5 .*sin(w(2)*t).9698 A1 por lo que A1 = -1/w1. x2=-A(2). pero como el teclado no esta ne griego. ejerce el cambio independientemente a cada componente del punto. 3. proyeccion en un plano. % la matriz actua anteponiendose al punto sobre el cual actua %ej: proyeccion en plano XY A = [1 0 0. dicha matriz (A) viene dada por A = S * D * inv(S) % donde S es una matriz formada por los vectores propios %la forma numerica de calcular dicha matriz no tiene nada que ver con la teoria % basicamente hay 2 procedimientos file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6. % Obviamente e suna forma mas sencilla de representar la matriz %PAra llegar a esta forma se utilizan los valores y vectores propios %los valores propios coinciden precisamente con los elementos de la diagonal %Definicion: % Sea A (n*n) % v (!= 0) es vector propio de A si: A*v = hv (h un numero real) % normalmente se escribe como lambda. referida a esa base tiene forma diagonal % ademas. 0 0 0]. x1 = [2. x2 = A*x1 x2 = 2 3 0 clear %lo ideal seria que la matriz fuera diagonal. 4]. usare la h. .txt diary on % ---------------------------------------------------% VALORES PROPIOS Y VECTORES PROPIOS % ---------------------------------------------------% Se tiene una aplicacion lineal representable mediante una matriz % ej: giro en el plano.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.. entonces la matriz de la A. 0 1 0.txt (1 of 10) [09/03/2008 13:49:16] .. L. reduciendo enormemente la dificultad de aplicar la matriz a un punto %si la aplicacion lineal se representa mediante una diagonal. que 'se parece' :) % si tenemos una base del espacio formada por vectores propios. h2. hi que van en la matriz diagonal D luego se buscan los vectores para cada h y de ahi se puede escribir la matriz S... cada uno de ellos requeire n operaciones el total es n^3 operaciones cada vez que se multiplica una matriz por otra ahora bien. durante los cuales se pueden obtener los vectores propios ¿Que hace matlab para calcular las raices de un polinomio? no os lo podeis ni imaginar construye una matriz cuyo polinomio caracteristica sea el polinomio obtiene los vectores y valores propios de esa matriz y el resultado de los valores propios se los asigna a las raices del polinomio --.txt % . 0. [0.txt (2 of 10) [09/03/2008 13:49:16] .. . [x1.Aplicacion interesante de valores propios que ademas nos da la idea del metodo nuemrico que vamos a utilizar es: -----------------------------------------------------:::: El calculo de potencias de una matriz :::: -----------------------------------------------------que ventaja tiene trabajr con valores propios para hallar las potencias? pues muy sencillo para elevar al cuadrado una matriz hay que determinar n^2 elementos.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6. para multiplicarla bastarian solo n operaciones (cada elementos de la diagonal) file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6. si la matriz fuese diagonal. pero numericamente el proceso tiene dificultades Numericamente lo que se hace es obtener D mediante usa serie de procedimientos a partir de la matriz A. = h . >> % a31 a32 a33-h] x3] 0] se busca que el sistema trenga infinitas soluciones por lo tanto se busca que el determinante sea cero al calcular el determinante se obtiene un polinomio con h se calculan las raices de dicho polinomio y se obtienen las h1. >> >> % [a11-h a12 a13. x2. y el registrro de dichas transformaciones da lugar a la matriz S de los vectores propios >> % El procedimiento analitico para obtener valores y vectores propios es totalmente opuesto >> % se plantea el problema como un sistema de ecuaciones lineales >> % AX=hX >> >> %que queda como. con los vectores propios en las columnas A nosotros este sistema no nos sirve de mucho la construccion del polinomio e sun poco incomoda y sobre todo la obtencion de las raices esta sujeta a error y encima si quiero resolver el sistema no homogeneo con solucion no trivial Analiticamente esta todo perfecto. >> % a21 a22-h a23.uno consiste en transformar la matriz en diagonal mediante una serie de transformaciones. 0.7 0.. %contador de iteraciones %PROCESO v = A*u v= 1.txt (3 of 10) [09/03/2008 13:49:16] .7 0.. lamda = [].txt Procedimiento: .1 0.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.Diagonalizar la matriz .2 0.8].9000 1. u = [1 1 1]' %hace la traspuesta para ser mas rapido.0000 u = v/v(1) %para conseguir el primer elemente igual a 1 file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.2.1 0.Elevar a la potencia que se requeira si se tiene A = S D inv(S) A^2 = (S D inv(S) S D inv(S) = S D^2 inv(S) luego ya solo queda deshacer el cambio para obntener el resultado en los terminos iniciales sirve para cualquier potencia A^k = S D^k inv(S) La potencia de matrices es muy util para ver lo que ocurre en diversas situaciones a la larga (procesos de MARKOV) Ejercicio: Aplicar lo que veamos hoy al primer problema que hicimos -------Ejemplo: -------ver ejemplo en las transparencias de la practica 6 estado de una maquina en uan fabrica al cabo de k dias D2 = A D1 D3 = A D2 = A^2 D1 Dk = A Dk-1 = A^(k-1) D1 --------EN MATLAB --------A = [0. %valores propios k = 1.1000 0.2 0. 0. plot(u.'r').'r').9091 u = v/v(1) u= 1. hold on end file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.7727 0.8696 plot(u.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.7391 0. for i = 1:10 v = A*u. u = v/v(1).9091 plot(u) hold on %volvemos a repetir los pasos v = A*u v= 1.txt u= 1.0455 0.8182 0.0000 0. plot(u. plot(u.0000 0. v = A*u. u = v/v(1).'g') %vamos a repetir este procedimientoi hasta cansarse v = A*u u = v/v(1).txt (4 of 10) [09/03/2008 13:49:17] .'r'). k]=potencias(A.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6. loq ue se haria es calcular la 'norma' de la diferencia %como las cosas pueden ir mal y nunca se llegara a esa tolerancia se utiliza un maximo de iteraciones % mas o menos se tiene como hacer el algoritmo en las transparencias %procedemos con el fichero --------------------------------------------------------------------------------------------------------------------------------------------------------------function [lambda.u. %guardamos en un vector los coeficientes de normalizacion file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.maxiter) % POTENCIAS para calcular valor propio de A % Inicializar el grafico plot(u) pause hold on % Inicializar k = 1.xk| < tol o k >= maxiter % si xk+1 y xk fueran vectores.txt %llega un momento en el cual aunque siga se queda igual % hemos obtenido UN VECTOR PROPIO de valor propio = 1 % ya que la imagen de si mismo da si mismo! %con muy poco mas tendremos le metodo iterativo: el poco mas es automatizar los pasos y dar un criterio de convergencia %el criterio de convergencia: |xk+1 .txt (5 of 10) [09/03/2008 13:49:17] .tol. %devuelve cual es el maximo y en que posicion se encuentra u = v/v(i). %para que no ocurra nada al comprobar lambda(k-1) la primera vez incr = tol+1. lambda(1) = 1. %medimos el incremento lambda(k) = v(i). u. %normalizamos el vector (dividir por la mayor componente) [mx. % Iteraciones while incr>tol & k<maxiter %contar las iteraciones k = k+1. v = A*u.i]=max(abs(v)). >> [lambda.40) No ha convergido % el vector propio es el 1 0.6667 0. la convergencia es MUUUUUY lenta.20) No ha convergido file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.[1 1]'. k]=potencias(A. k]=potencias([1 2 .8333 k= 16 plot(lambda. plot(u) pause end hold off close % Aviso no convergencia if incr>tol disp('No ha convergido') end --------------------------------------------------------------------------------------------------------------------------------------------------------------[lambda.tol.txt incr = abs(lambda(k)-lambda(k-1)).1e-5.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6. k]=potencias([1 -1 . u.txt (6 of 10) [09/03/2008 13:49:17] .maxiter) u= 1.[1 1]'. u. 1 1].0000 0. u.1e-5. '*') ----------PROBLEMAS QUE PUEDEN SURGIR ---------->> [lambda. 0 1].u. e.xk| Convergencia lineal cuando ek+1 / ek --> cte < 1 (si tiende a cero.txt (7 of 10) [09/03/2008 13:49:17] .file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6. %Tasa de convergencia La funcion queda como: ----------------------------------------------------------------------------------------------------------------------------function [lambda. lambda(1) = 1. %vector con lambda 2-lambda1.. u.txt %se puede ver porque si se quita el hold on %lo que ocurre es que los vectores van ciclando y no converge nunca ------------MEJORAS DEL ALGORITMO ------------Rapidez de convergencia Tipos de convergencia Error del paso k (Diferencia entre sucesivas aproximaciones) ek = | xk+1 . k../e(1:end-1). converge muy rapidamente) (el peor de los casos seria que la cte tiende a 1. lambda3 .lambda2. etc. file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6. mas rapida el error entre pasos es cada vez menor) incluyamos la velocidad de convergencia sabiendo que diff(lambda) da u n vector con las diferencias entre elementos sucesivos %Analisis de la convergencia e = diff(lambda).maxiter) % POTENCIAS para calcular valor propio de A % Inicializar el grafico plot(u) pause hold on % Inicializar k = 1.r]=potencias(A.tol. r = e(2:end). %para que no ocurra nada al comprobar lambda(k-1) la primera vez incr = tol+1. en cuyo caso el error se reduce muy lentamente) Convergencia cuadratica cuando ek+1/ek^2 --> cte < 1 (es mejor que una convergencia lineal.u. r = e(2:end)./e(1:end-1).9164 Columns 6 through 10 1.40) lambda = Columns 1 through 5 1. %medimos el incremento lambda(k) = v(i). v = A*u.0000 2.7521 1..7520 1.7519 file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.lambda2. %devuelve cual es el maximo y en que posicion se encuentra u = v/v(i). u.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6. k. %Tasa de convergencia hold off close % Aviso no convergencia if incr>tol disp('No ha convergido') end ------------------------------------------------------------------------------------------------------------------------------------------- >> [lambda.i]=max(abs(v)). plot(u) pause end %Analisis de la convergencia e = diff(lambda).e.txt (8 of 10) [09/03/2008 13:49:17] .txt % Iteraciones while incr>tol & k<maxiter %contar las iteraciones k = k+1.1e-5.7519 1. lambda3 . etc.ones(10. %vector con lambda 2-lambda1.1). %guardamos en un vector los coeficientes de normalizacion incr = abs(lambda(k)-lambda(k-1)).7577 1.9290 1.7819 1.. r]=potencias(hilb(10).7530 1. %normalizamos el vector (dividir por la mayor componente) [mx. 1950 Nuestro metodo lo que obtiene es lamda.6090 0.1345 -0.9290 -1.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.txt u= 1.1957 0.1799 Columns 6 through 8 0.1957 0.0659 -0.1920 0. tal que >> hilb(10)*u-lambda(end)*u %da cero dentro de la tolerancia elegida ans = 1.0047 Columns 6 through 9 -0.4531 0.0450 file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.0534 -0.1923 0.5249 0.0e-005 * -0.2116 0.1956 0.1759 k= 10 e= Columns 1 through 5 1.1331 -0.0009 -0.0869 -0.txt (9 of 10) [09/03/2008 13:49:17] .0748 -0.3653 0.2667 0.0002 -0.2358 0.0242 -0.0589 -0.3078 0.1329 0.0125 -0.0488 -0. cuyo limite es el valor propio dominante y un vector u.0000 r= Columns 1 through 5 -0.0000 -0.1044 -0.0000 0. 0001 0.3429 1.0025 0.0357 0.0000 0. funciona peor o no funciona -----------------------------------METODO DE LAS POTENCIAS INVERSAS -----------------------------------Calcula el menor valor propio (el mas proximo a cero) Es generalmente mas rapido que el anterior Permite calcular el valor propio mas proximo a donde se quiera file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.0000 0.0000 0.7519 ----------------------------nuestro metodo de las potencias lo que ha calculado es el mayor valor propio (llamado dominante) (el de mayor valor absoluto) si no hay tal valor propio dominante.txt (10 of 10) [09/03/2008 13:49:17] .txt -0.0000 0.0418 ------------------------>> eig(hilb(10)) ans = 0.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%206/practica6.0000 0. Basta con aplicar el metodo de las potencias a la matriz inversa.0000 0..r]=potencias2(hilb(3).5560 0. es decir.... u.1e-5. con un valor propio (1/h) haciendo el método de las potencias a inv(A) proporciona el mayor valor propio de inv(A). Si tenemos: A*v = h*v v = h * inv(A) * v inv(A) * v = v/h = (1/h) * v para la matriz inv(A) el vector propio es el mismo. el mayor (1/h).file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat.[1 1 1]'. el elemento que interesa es lamda(end) >> [lambda.er%20Cuatrimestre/Practica%206%20-%202/practica6-2.txt (1 of 6) [09/03/2008 13:49:17] . ¿Cómo nos acercamos a OTROS valores propios? ej: los valores propios d euna matriz son (en la recta real): |-----------x-------x---------------x---0 ^ el ultimo es el que se encuentra mediante el metodo de las potencias. que es igual al menor valor propio (h) de A.atematicas/Primer%20Cuatrimestre/Practica%206%20-%202/practica6-2.3909 --------------------------------------------Que comparando con los obtenidos mediante eig.10). (AL aplicar el metodo de las potenicas.4083 >> u %el vector propio u= 1.e.txt El algoritmo de potencias converge al valor propio máximo de una matriz. file:///E|/Documentos/Estudios/Documentacion%20Asignat. k. >> lambda(end) %el valor propio ans = 1. k.1587 file:///E|/Documentos/Estudios/Documentacion%20Asignat.e.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat.0027 0 0 0 0.1151 >> 1/lambda(end) ans = 0.txt (2 of 6) [09/03/2008 13:49:17] .1277 0. El vector tb es igual (hay que normalizarlo) >> S/S(2.8270 0.[1 1 1]'.0000 -0.1e-5.7137 -0.6887 -0.1) ans = -0.10).r]=potencias2(inv(hilb(3)).3233 D= 0..0027 >> u u= -0.4599 -0..9649 vemos que el valor es igual.5283 0..6490 0.er%20Cuatrimestre/Practica%206%20-%202/practica6-2..4083 -----------------------------------------------corresponde al ultimo de lso valores propios con su vector propio.txt >> [S.5474 0.atematicas/Primer%20Cuatrimestre/Practica%206%20-%202/practica6-2.1223 0 0 0 1. u.7670 1. >> lambda(end) ans = 372.D] = eig(hilb(3)) S= -0. Si lo aplicamos a la inversa >> [lambda.1789 0.1789 1. k.0000 -0..9093 0.1789 1.0027 >> u u= -0..6443 -0. y añadimos lambda = 1.0000 -0.r]=potinv(hilb(3). -------------potinv.atematicas/Primer%20Cuatrimestre/Practica%206%20-%202/practica6-2.er%20Cuatrimestre/Practica%206%20-%202/practica6-2.9649 -0.4530 ---------------------------------------Como se evita el calculo de la inversa? ---------------------------------------en lugar de pedirle que haga v = inv(A)*u podemos pedirle v = A\u para ser mas estricto aun se podria utilizar la factorizacion LU ya que va a resolver el mismo sistema repetidas veces./lambda ---------------Veamos como funciona >> [lambda..7402 0. u.9649 -------------------------------------------------------file:///E|/Documentos/Estudios/Documentacion%20Asignat.1e-5.m editamos potencias.txt 1..10) >> lambda(end) ans = 0.txt (3 of 6) [09/03/2008 13:49:17] .e.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat.m y cambiamos v = A\u.[1 1 1]'. y a lambda le quitamos el desplazamiento que hemos hecho: que no te lie dçlo de restar y sumar.r]=potinv(hilb(3). --> Valor propio mas proximo a d: ans = 0...0.txt Como encontramos los valores propios intermedios? A*u = h*u si desplazamos la matriz A con la identidad: dI da el desplazado del valor propio (A+dI)*u = (h+d)*u al desplazar la matriz. >> [lambda.1223 file:///E|/Documentos/Estudios/Documentacion%20Asignat.er%20Cuatrimestre/Practica%206%20-%202/practica6-2. lo ponemos ya como supuesto..[1 1 1]'.txt (4 of 6) [09/03/2008 13:49:17] .1e-5.e.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat.20. el valor mas procimo a cero resulta ser el valor mas procimo a d |-----------x-------x---------------x---0 ^ ------------x-----|-x---------------x---0^ Vamos a añadir al algoritmo de las potencias un parametro que sea d y le añadimos el comando: A = A .atematicas/Primer%20Cuatrimestre/Practica%206%20-%202/practica6-2.1). simplemente como el desplazamiento siempre conviene que sea negativo.d*eye(size(A)). k.. u. /S(3.. Hay otra forma de calcular valores propios que numericamente tiene mejores propiedades.8140 1.2) ans = 0.0000 -0.1967 -0.0000 Que es en efecto el valor propio intermedio junto con su vector propio >> S..txt (5 of 6) [09/03/2008 13:49:17] .0611 1.0998 0. puesto que los valores propios pueden estar en C (complejos) -----------------------------------------------Problemas que pueden haber -----------------------------------------------Cuando los valores propios se amontonan El peor caso es cuando hay un valor propio doble..2743 -1.8435 0.4981 La situacion es mas complicada que esto.er%20Cuatrimestre/Practica%206%20-%202/practica6-2.8435 -1.atematicas/Primer%20Cuatrimestre/Practica%206%20-%202/practica6-2..txt --> Vector propio asociado: u= -0. A = S * D * inv(S) -----------------------------------Descomposicion en valores singulares file:///E|/Documentos/Estudios/Documentacion%20Asignat.7086 1.8140 -0.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat. Para hallar los vectores propios independientes. Puedes verlo en la aplicacion colgada en la web. Puede solo existir un vector propio. son unos escalares Las filas (porq esta traspuesta) de V* son elemntos de una base en el espacio de partida |Rn ----> |Rn ver .txt (6 of 6) [09/03/2008 13:49:17] .txt -----------------------------------A(mxn) = U(mxm) S(mxn) V*(nxn) U y V unitarias (V* significa traspuesta conjugada) S 'diagonal' (puede no ser cuadrada) Las columnas de U son una base en el espacio de llegada Las sigmas.. >> A = fotox. que forman la diagonal de S..doc Vamos a discretizar la X...file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat. file:///E|/Documentos/Estudios/Documentacion%20Asignat.er%20Cuatrimestre/Practica%206%20-%202/practica6-2.atematicas/Primer%20Cuatrimestre/Practica%206%20-%202/practica6-2. al proceder de datos experimentales. sólo disponemos generalmente de un conjunto discreto de valores del integrando. el eje de abscisas y las ordenadas de los extremos del intervalo. bien porque es difícil de calcular o bien porque el integrando sólo se conoce en un número finito de puntos. la función Gamma de Euler Γ( x) = ∫ e−t t x−1dt . Un aspecto clave de la integración numérica es la estimación del error de las fórmulas de cuadratura. como sen(x)/x. y los valores asignados a los pesos caracterizan las distintas fórmulas utilizadas. llamados nodos. En la práctica además. Ésta integra exactamente polinomios de primer grado. lo que facilita su aplicación a datos experimentales. El método iterativo de trapecios evalúa eficientemente la integral al tiempo que proporciona una estimación del error. MATLAB incorpora métodos de cuadratura adaptativa. bajo ciertas condiciones. Damos fórmulas teóricas que acotan este error. centros de gravedad y momentos de inercia. 0 ∞ x>0 . La forma de elegir estos puntos. Los métodos que tratamos aquí toman nodos equiespaciados. Exigiendo que la fórmula integre exactamente polinomios de segundo grado se obtiene la regla de Simpson.1 Integral definida: Cálculo Los métodos numéricos de integración se basan en la interpretación de la integral definida como medida del área entre la gráfica de la función. Las fórmulas de cuadratura numérica se reducen finalmente a una suma ponderada de valores de la función en determinados puntos del intervalo de integración. cuya primitiva no tiene una expresión analítica finita. áreas y volúmenes.7 Integración Numérica (I) La integral definida de una función de una variable aparece en muchas aplicaciones geométricas y físicas. aunque en la práctica lo estimamos comparando valores aproximados de la integral obtenidos con distinto número de intervalos. según el llamado método de extrapolación de Richardson. Hay funciones relativamente sencillas. Una regla de integración numérica sencilla es la de trapecios. proporciona fórmulas de precisión teóricamente tan alta como se quiera. Constituyen la alternativa a la Regla de Barrow cuando no se dispone de la primitiva. por lo que hay que buscar una alternativa numérica a la evaluación de la integral. que toman más o menos nodos según el comportamiento de la función en cada parte del intervalo de trabajo. Aquí obtenemos esta fórmula mediante el análisis del error de la fórmula de los trapecios. lo que limita la aplicabilidad a recintos de geometría simple. como el cálculo de longitudes. por ejemplo. Para resolver analíticamente estos problemas necesitamos una expresión explícita del integrando y que ésta admita una primitiva sencilla. 7. Muchas funciones de gran importancia en las aplicaciones se definen mediante integrales de este tipo. La aplicación reiterada de esta técnica da lugar a la integración de Romberg que. f (a) + f (b) 2 (b − a)3 ET = − f ′′(ξ ). pues muchos de ellos requieren nodos en cantidad y posición fijas. ∫a f ( x) dx ≅ p1 f ( x1) + p2 f ( x2 ) + . En el caso de integrandos procedentes de datos experimentales. b] . lo que es difícil de conseguir experimentalmente.2 Formula de los Trapecios La fórmula de los trapecios simple se obtiene al aproximar el integrando f en [a. es razonable que esta derivada aparezca en la expresión del error. Esto limita los métodos aplicables. de la primitiva. Se supone generalmente que los errores producidos al efectuar una medida experimental siguen la distribución normal.o la función de error..b] por la recta que une los puntos (a. f(b)). 7. obviamente. Dicha área es b p1 + p2 +L + pn = b − a IT = (b − a) El error de la fórmula depende de lo curvada que sea la función entre a y b. Como la derivada segunda mide la curvatura. o distribución de Gauss. + pn f ( xn ) La suma de los pesos debe ser igual a la longitud del intervalo. erf ( x) = 2 π ∫0 x e−t dt 2 que está relacionada con la distribución de probabilidad normal. De aquí el nombre del método. además de no disponer. conocemos los valores de la función sólo en un número finito de nodos.. Numéricamente. En consecuencia. aproximaremos la integral mediante una suma ponderada de valores de la función en ciertos puntos del intervalo de integración llamados nodos. 12 para cierto ξ ∈[a. Los coeficientes de la fórmula se llaman pesos. la fórmula será exacta para funciones con derivada segunda nula. La integral de esta función de grado 1 es el área del trapecio rectángulo de bases f(a) y f(b) y altura b-a. polinómicas de primer grado. f(a)) y (b. o sea. que los extremos del intervalo son nodos de integración) en la que los nodos interiores tienen peso h y los extremos peso h/2 cada uno. Algoritmo de Trapecios • Entrada: a. lo que significa que al duplicar el número de subintervalos. b: intervalo n: número de subintervalos • Salida: I: estimación de la integral por la fórmula de los trapecios • Proceso: Calcular el paso. h IT [h] = ( y0 + 2 y1 + 2 y2 + L + 2 yn−1 + yn ) 2 h2 ET = − (b − a) f ′′(ξ ). 12 para cierto ξ ∈[a.m con el siguiente algoritmo. aplicamos la fórmula de trapecios simple a cada subintervalo y sumamos los resultados. En MATLAB construimos fichero. obtenemos la fórmula de trapecios compuesta. b] Si la derivada segunda no varía mucho. Se puede suponer que el error es proporcional a h2. h=(b-a)/n Crear el vector de nodos. Esta suposición no es válida si la derivada segunda no está definida en algún punto del intervalo. x=a:h:b . dividimos el intervalo en subintervalos y aplicar la fórmula de trapecios en cada subintervalo. esperamos que el error se divida por 4.Función Trapecio f(a) f(b) a b Fórmula de los Trapecios Simple Para disminuir el error.b] en n subintervalos iguales de longitud h=(b-a)/n. Si dividimos [a. El error de la fórmula de los trapecios se expresa en función de la derivada segunda de f en un punto del intervalo. Así obtenemos la fórmula de trapecios compuesta. Se trata de una fórmula cerrada (es decir. 2) y = i = 1. 4 y 8 intervalos.b. 2 1] Evaluar la formula de los trapecios: I=p*y' Ejemplo 1 Considera la integral ∫0 π 2 sen x x dx Evalúa la integral por el Método de los Trapecios con 2. n1 y n2 y tomamos la diferencia entre los resultados como estimación del error. .a+eps.5708 0. h=(b-a)/n n = a = b = h = 2 0 1. p=h/2*[1 2 2 . Define la función en x=0 para evitar la indeterminación. y=f(x) Construir un vector con los pesos.7854 Definimos una función.3498 i=trapecio('f'.6366 Lo mismo para n=4.3498 0. . introducimos la mínima cantidad posible de nodos nuevos. b=pi/2. se pueden reutilizar los nodos ya calculados. Si el n2 es múltiplo de n1. aplicamos la fórmula con distinto número de subintervalos.a. En su lugar. n=2. 0. 8. damos los valores del intervalo y calculamos para el primer valor de n y obtenemos h.Calcular el vector de ordenadas.b.0000 1. Duplicando cada vez el número de intervalos. La acotación del error de la fórmula de los trapecios no es práctica pues requiere el cálculo de la derivada segunda.a=0.m senxx y calculamos el valor de la integral i=trapecio('senxx'.9003 Caslculamos la integral para evitar que se indetermine en x=0. .2) i = 1. Ejemplo 2 . E[h / 2] ≅ IT [h / 2] − IT [h] Algoritmo de iterativo de Trapecios • Entrada: a. Denotamos por IT[h] la integral de f en [a. construiremos un algoritmo de trapecios iterativo que va duplicando el número de subintervalos hasta que la variación entre dos evaluaciones consecutivas sea menor que la tolerancia exigida. b: intervalo n: número de subintervalos tol: precisión maxiter: tope de iteraciones • Salida: I: estimación de la integral por la fórmula de los trapecios incr: estimación del error iter: número de iteraciones efectuadas • Proceso: Calcular la estimación inicial de IT[h] por trapecios con paso h Inicializar incr y el contador de iteraciones. iter Mientras incr >tol y iter < maxiter Hallar los nosdos nuevos. + y(2n-1)/2) = = IT[h]/2 + h/2(y1 + y3+.. + 2yn-1 + yn) + + h/2 (y1/2 + y3/2 + y5/2 + . x3/2.. De este modo sólo realizamos las operaciones estrictamente necesarias y obtenemos de propina la estimación del error. IT[h/2] = h/4 (y0 + 2y1/2 + 2y1 + 2y3/2 + 2y2 +. agrupando los términos correspondientes a la integración de paso h. por la fórmula de los trapecios con paso h = (b – a)/n y nodos a = x0 < x1 < x2 < … < xn–1 < xn = b.Con el mismo trabajo que costaría considerar un nodo más. incrementar iter Dividir h por 2 Actualizar IT[h].+yn-1) Mediante esta relación.. h/2.. Introducimos ahora nodos intermedios. Veamos la relación entre dos evaluaciones de la fórmula de los trapecios.. .. .. obtenemos una precisión cuatro veces mayor. x=[x1/2. a + h/2 = x1/2 < x3/2 < … < x(2n–1)/2 = b – h/2 quedando 2n subintervalos de longitud mitad.. + 2y(2n-1)/2 + yn) = = h/4 (y0 + 2y1 + 2y2 + ... Evaluamos la fórmula de los trapecios con paso h/2 y. una con doble número de subintervalos que la otra.b]. obtenemos la nueva integral en términos de la anterior y de los valores de f en los nuevos nodos. xn-1/2] Calcular el vector de ordenadas y=f(x) Refinar la estimación IT[h/2]=IT[h] + h/2*sum(y) Calcular incr. Aplicamos la función . x0 y x1 en el intervalo [a.3 Regla de Simpson La fórmula de los trapecios integra exactamente los polinomios de primer grado utilizando dos nodos.. ξ ∈ [a.3707 iter = 5 incr = 6. Los pesos se determinan sustituyendo f por un polinomio de grado 2 y resolviendo el sistema lineal resultante. 10^-6. En el caso particular de x1 = a. Añadiendo un nodo más.4. esperamos que para ciertos pesos a determinar. queda la regla de Simpson simple.b].m llamada trapiter y resolvemos el siguiente aopartado del ejemplo anterior. ∫ b a f ( x)dx ≅ I S = b−a ( f (a) + 4 f ( a+b ) + f (b) ) 2 6 La característica más destacable de esta fórmula es que resulta exacta para polinomios de tercer grado.m trapiter [sol. b] 2880 .pi/2.1037e-005 Sol: n=4*2^(iter-1)=64 7.0. x2 = (a+b)/2.iter. ¿Cuántos intervalos serían necesarios para obtener una precisión del orden de 10−4? Para obtener una precisión de ese orden tol vale 10^-3 porque si ponemos nos sale una precisión de 10^-5.100) sol = 1. mientras que en su construcción sólo se exigía la exactitud para grado 2..incr]=trapiter('senxx'.Definimos una función .1e-4. . x3 = b. la fórmula I = p0f(x1) + p1f(x2) + p2f(x3) sea exacta para polinomios de segundo grado. El error cometido al aproximar la integral de una función cualquiera con derivada cuarta continua viene dado por la fórmula (b − a )5 IV ES = I − I S = − f (ξ ). Así obtenemos la regla de Simpson compuesta. . cuyo error es de orden h4. Desarrollando las integrales que aparecen en la fórmula de Richardson. Este truco se denomina extrapolación de Richardson. 2 4 1] Evaluar la formula de los trapecios: I=p*y' La fórmula de Simpson es de orden 4. el error se divide por 24 = 16. Algoritmo de Simpson-Richardson . . eliminamos el término de orden 2 del error y obtenemos una estimación más precisa de la integral. si la derivada segunda del integrando no varía mucho en el intervalo de integración. El error de la fórmula de los trapecios es aproximadamente proporcional a h2. al menos en teoría. el error se divide por 24. b: intervalo n: número de subintervalos ( ha de ser par ) • Salida: I: estimación de la integral por la regla de Simpson • Proceso: Calcular el paso. se comprueba que esta estimación es precisamente la Regla de Simpson con paso h/2. dando lugar a fórmulas de integración de precisión tan alta como queramos. Simpson simple Función Función Parábola Parábol Simpson compuesta a (a+b)/2 b x0 x1 x2 x3 x4 Algoritmo de la regla de Simpson Compuesta • Entrada: a. y=f(x) Construir un vector con los pesos. x=a:h:b Calcular el vector de ordenadas. h=(b-a)/n Crear el vector de nodos. este procedimiento se generaliza fácilmente. lo que significa que al duplicar el número de intervalos. con lo que se obtiene al menos una cifra decimal exacta más en el resultado. lo más fácil es tomar h y h/2.Para reducir el error. En la práctica esto supone que cada vez que el paso se divide por 2. Vamos a obtener la regla de Simpson por un procedimiento alternativo que proporciona directamente estimaciones del error. Evaluando esta fórmula para dos valores de h (como hemos visto. subdividimos el intervalo [a. y aplicar trapecios iterativo).b] en partes iguales antes de aplicar la regla de Simpson. p=h/3*[1 4 2 4 2 . Además. . IS[h/4]. y así sucesivamente. b: intervalo n: número de subintervalos dobles • Salida: I: estimación de la integral por la regla de Simpson • Proceso: Calcular el paso. El tercer paso comienza con la estimación IT[h/4]. por trapecios iterativos. y de ambas. Obtenemos una segunda estimación con paso h/2.m simpson la cual aplicamos para calcular la integral del Ejemplo 1 por la Regla de Simpson con 2. 4 y 8 intervalos. Ejemplo 3 Definimos una función . una estimación de Simpson IS[h/2]. IT[h].4 Integración de Romberg La aplicación sistemática de la extrapolación de Richardson se conoce con el nombre de Integración de Romberg. da lugar a otra estimación de Simpson. El proceso se puede continuar hasta alcanzar la precisión requerida.Entrada: a.0. 42 I S [ h 2 ] − I S [h] I≅ = IR [ h 2 ] def 42 − 1 Análogamente. que junto con IT[h/2]. La fórmula de los trapecios para cierto h proporciona la primera estimación de la integral. dos estimaciones de orden 6 proporcionan una estimación de orden 8. De las dos estimaciones disponibles de Simpson se obtiene la primera de Romberg: IR[h/4].pi/2.3713 7.2) n = i = 2 1. h=(b-a)/n Calcular IT[h] por trapecios Calcular IT[h/2] como en trapecios iterativos Calcular IS por la formula IS=(4*IT[h/2]-IT[h])/3 • La idea de Richardson que proporciona la integral de Simpson (de orden 4) a partir de dos estimaciones de trapecios (de orden 2) se puede aplicar también a dos estimaciones de Simpson para obtener una estimación de mayor orden (6). i=simpson('senxx'. 3708 1.i. directa en la primer fila y por refinamiento iterativo en las siguientes. • Entrada: a. Los restantes elementos de la fila.3695 1. se obtienen por la fórmula de Romberg adecuada.Diseñamos un procedimiento de MATLAB que devuelva una matriz con las estimaciones calculadas por el método de Romberg. El primer elemento de cada fila se obtiene por la fórmula de los trapecios.100) sol = 1. El while interno recorre una fila y el externo crea una fila nueva.1 % Primer elemento Inicializar j Mientras Incr > tol y j < k % Resto de la fila k Calcular Ikj por la fórmula de Romberg Incrementar j Incrementar k Si incr > tol mensaje de error: no logragada convergencia Aplicamos ahora el Método de Romberg Ejemplo 4 Definimos una función .3704 1. k Mientras incr >tol y k < maxiter Evaluar Ik1 refinado Ik-1.pi/2. [sol. El programa contiene dos bucles while anidados. Evalúamos la integral del Ejemplo 1 por el método de Romberg.3707 incr = 0 1. hasta la diagonal.3708 0 0 1.8.0.k]=romberg('senxx'.incr. b: intervalo n: número de subintervalos tol: precisión maxiter: tope de iteraciones • Salida: I: Tabla de Romberg incr: estimación del error k: número de iteraciones efectuadas • Proceso: Calcular I11 por trapecios con n intervlos Inicializar incr.3708 .1e-4. partiendo de trapecios simple con un máximo de 8 subintervalos.3708 i = 1.m romberg. mientras que el primero era bastante preciso? 3. halla el campo en x por integración de Romberg con tolerancia 10−6. En teoría de campos eléctricos se prueba que el campo magnético inducido por una corriente en una espira circular de alambre es H ( x) = ∫ π 2 0 x I − ( r ) 2 sin 2 θ dθ donde I es la intensidad de la corriente. El área de un círculo de radio 1 se obtiene integrando su ecuación explícita en [-1.4353e-009 k = 2 7. Halla la longitud de una elipse de semiejes 2 y 1. r el radio de la circunferencia y x la distancia del centro al punto donde se calcula el campo. 4. 16 y 32 intervalos. cuyo valor aproximado es 3'832. (Examen de Septiembre de 1998). La longitud de una curva de ecuación y=f(x). La función de Bessel de orden 0 está definida por la ecuación J 0 ( x) = 1 π cos( x sin θ ) dθ x ∫0 Halla J0(1) por la fórmula de Simpson 3/8. viene dada por la integral ∫a b 1 + y′2 dx .b]. 4.3.1]: π = 2∫ 1 −1 1 − x 2 dx a) Aproxima esta integral por el método de Romberg. r=120 y x=84. El resultado exacto con cuatro decimales es 1'6858. para x variando en [a. Si I=15. . a partir de valores de trapecios con 2. ¿Por qué tiene tanto error este resultado. 8. Halla K(17π/36). La integral elíptica completa de primera especie es π 2 K (θ ) = ∫ 0 dx 1 − sin 2 θ sin 2 x Calcula K(π/6) utilizando la regla de Simpson con cuatro intervalos. 2. 4. Explica por qué la estimación obtenida por trapecios no mejora sustancialmente al aplicar Romberg.5 Problemas 1.7. Utilizaremos para ello el cuadrado (de lado √2) y los polígonos regulares de 8. Es fácil comprobar que el área del polígono regular de 2n lados es A2n = nxn/2. 16.m elaborados para ello. la longitud del lado se divide aproximadamente por 2.6 Soluciones . (Indicación: modifica el algoritmo de Romberg para que en lugar de calcular la primera columna por trapecios. Compara los resultados con los del apartado a). la admita como argumento de entrada) 7. Escribe los comandos o archivos. siendo xn el lado del polígono regular de n lados (la mitad). c) Comprueba numéricamente que la diferencia entre el área del círculo y la del polígono es proporcional al cuadrado del lado. 32 y 64 lados. ¿Cuál es el coeficiente de proporcionalidad? d) Suponiendo que al tomar el doble de lados.El área del círculo puede aproximarse mediante el área de polígonos inscritos. aplica el algoritmo de Romberg a las áreas halladas para obtener una mejor estimación de π. También es fácil obtener una relación algebraica entre los lados de estos polígonos: 2 2 x2 n = 2 − 4 − xn b) Halla las áreas de los polígonos mencionados. --------. Conviene dividir el trapecio en trapecios mas pequeños (ver apuntes a mano) ------ file:///E|/Documentos/Estudios/Documentacion%20Asignatu.txt Métodos para calcular la primitiva ---------------------------------FORMULA DE LOS TRAPECIOS -----------------------Aproximar el area bajo una curva mediante una figura mas sencilla pero similar.a)^3 E = .txt (1 of 2) [09/03/2008 13:49:20] . otros por debajo para saber si el error es negativo o positivo depende del tamaño de las zonas por encima o por debajo.cas/Primer%20Cuatrimestre/Practica%207/Practica%207. en los cuales el error es cero Nota: f''(e) indica si la funcion es concava o convexa.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%207/Practica%207.b] 12 Nota: f''(e) = 0 para polinomios de primer grado. Nota: (b-a)^3 puede ser un numero muy grande. indicando si el error es positivo o negativo (sobreestimado o subestimado) Nota: Si la funcion no es ni fu ni fa.. algunos trozos por encima.f''(e) para cierto e E [a. El area del trapecio (que se puede convertir en un cuadrado cortando un trozo y poniendola arriba) viene dada como f(a)+f(b) (b -a)--------2 El error en esa aproximacion viene dada por: (b .. 99987148622292 0.99999949800591 0.1e-8.5.99999987450149 0.99176176875473 0. incr = 5.99996787217507 0.99999996862537 0.0.k] = trapiter('cos'.incr.20) I= Columns 1 through 2 0.pi/2..00000339222090 file:///E|/Documentos/Estudios/Documentacion%20Asignatu.99999196808247 0...99999799202304 0.99176176875473 0.99999999803909 >> (4*I(2)-I(1))/3 ans = 1.99794298635436 0.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Primer%20Cuatrimestre/Practica%207/Practica%207..99999999215634 0.cas/Primer%20Cuatrimestre/Practica%207/Practica%207.99794298635436 .99948590524853 0.txt (2 of 2) [09/03/2008 13:49:20] ..882744735785650e-009 k= 12 >> I' ans = 0.txt >> [I. Para k = 0. n − 1 . Los pesos se determinan resolviendo el sistema lineal que se obtiene al imponer las condiciones requeridas.1. La idea de los métodos de integración de tipo interpolatorio consiste en determinar los pesos p1 . consistente en aplicar estas fórmulas a subintervalos de tamaño variable que se determina en función del error estimado en cada subintervalo. p2 . 2. Se obtienen así las llamadas fórmulas de Newton-Cotes. K . En la sección siguiente abordamos una estrategia complementaria más sofisticada.8. K . la condición es integrar exactamente funciones de primer grado y en la de Simpson funciones de segundo grado. Métodos de Newton-Cotes Los métodos numéricos de integración vistos hasta ahora se basan en dividir el intervalo de integración en subintervalos iguales a los que se aplica una fórmula simple que satisface ciertas condiciones y sumar los resultados de cada subintervalo. Integración numérica (III) 8. a base de exigir que integren exactamente polinomios de mayor grado. K . b]. 1. al exigir que la fórmula integre exactamente xk en [a. f(x2) f(x1) f(x3) f(xn) a x1 x2 x3 ···· xn b Figura 1: Nodos y valores de la función en el intervalo de integración. para que la fórmula I n −1 ( f ) = p1 f ( x1 ) + p 2 f ( x 2 ) + K + p n f ( x n ) (8. Es lo que se llama integración adaptativa. xn . b] queda I n −1 ( x k ) = ∫ x dx k a b k k p1 x1k + p 2 x 2 + K + p n x n = b k +1 − a k +1 k +1 (8. aunque en este caso resulta exacta para polinomios de tercer grado incluso. puntos dados de dicho intervalo llamados nodos. La alternativa que examinamos en esta sección consiste en lograr fórmulas simples más precisas. siendo x1 . x2 . El aumento de precisión de estos métodos se consigue aumentando el número de subintervalos.2) . que engloban las anteriores como caso particular. pn . En el caso de la fórmula de los trapecios.1) integre exactamente polinomios de grado inferior a n en el intervalo [a. 4845 0. se ha de verificar: ∫ 1 dx = b − a = p 1 a 1 b de donde se obtiene la fórmula ∫ f ( x) dx ≅ (b − a) f (a) a b que se denomina fórmula del extremo izquierdo y que. que no tratamos aquí. x. dado que son aplicables a la integración de datos experimentales.1 integre exactamente polinomios de grado 0.0000 1. hemos de tomar más nodos. x.2742 0.^2.0000 0 0 0 0 1. eligen los nodos de manera que se consiga la mayor precisión posible. Los nodos resultan no equiespaciados.6169 0. en la práctica. constantes.1484 1. La matriz del sistema tiene en la fila k los valores de x k −1 en los nodos.7854 0. o sea. Lo más habitual es considerar nodos uniformemente repartidos en el intervalo. aunque a continuación vemos un ejemplo elemental dónde no es así. Ejemplo 1 Si consideramos un solo nodo situado en el extremo izquierdo del intervalo y exigimos que la fórmula 8. por lo que el integrando debe poder evaluarse en ellos.8758 6. Este es el caso de las fórmulas de Newton-Cotes.3805 1.4674 3.La matriz del sistema resultante es de tipo Vandermonde. lo cual es un inconveniente grave en las aplicaciones prácticas. utilizando una fórmula interpolatoria de máximo grado. La calidad de la fórmula resultante depende en gran manera de los nodos. A = [x. x 0 π /6 π /4 π /3 π /2 sin x 0 1/ 2 2/2 3/2 1 En primer lugar creamos un vector para los nodos y otro para los valores del integrando. Ejemplo 2 Supongamos que queremos integrar la función seno entre 0 y π 2 a partir de los valores de la tabla adjunta.0966 1.2026 1.0752 1.5236 0.^4] A = 1. x.0000 0.0472 1. garantiza la existencia de solución y. por construcción resulta exacta para polinomios de grado 0.0881 El término independiente de la ecuación k-ésima es π 2 (π 2)k x k −1 dx = k 0 ∫ . x = [0 pi/6 pi/4 pi/3 pi/2] y = [0 1/2 sqrt(2)/2 sqrt(3)/2 1] Como hay 5 nodos.^3.0000 0. x.0000 1. Casi siempre se eligen los nodos dispuestos simétricamente en el intervalo. en teoría.5708 2.1435 0. Las fórmulas de integración de Gauss. la fórmula debe integrar polinomios de grado 4. la inestabilidad del resultado. lo que.^0. Para obtener una fórmula más precisa. q.^5/5] b = 1. 1] o [-1.^4/4. q.3562 1 +  dθ = 2 0  2 4 ∫ ∫( ∫ ) ∫ ∫ Se trata de aproximar esta integral por la fórmula del Ejemplo 2. es conveniente normalizar el intervalo y utilizar los pesos calculados para el intervalo normalizado.2337 1.o sea q =pi/2.0603 0. basta multiplicar los pesos por 2 y escalar los nodos en la misma proporción.1440 1.0000 Nota: La obtención de la matriz del sistema puede abreviarse con MATLAB usando A = rot90(vander(x)). A menudo. Éste intervalo suele ser [0. Para aplicar una fórmula válida en un intervalo normalizado a una integral sobre un intervalo cualquiera [a.5220 1.5708 1. basta tomar los nodos adecuados en éste intervalo y multiplicar los pesos por el cociente entre la longitud del intervalo de integración y el normalizado. π ] .2919 1.5 1 π 1 + cos 2θ  1 + 2 cos θ +  dθ = 2 0  2  180 0 π 1  1 3π ≅ 2.^3/3.0603 -0.1440 Multiplicando por los valores y sumando se obtiene la integral aproximada: y*pesos ans = 1.^2/2. En este caso. No es difícil obtener el resultado analíticamente 90 2 1 π 2 1 π 2 120 60 (1 + cos θ ) dθ = A= ρ dθ = 1. q.8378 1.9126 Resolvemos el sistema para hallar los pesos pesos = A\c pesos = 0.5 2 0 2 0 π 1 1 150 30 1 + 2 cos θ + cos 2 θ dθ = 2 0 0. . c = [q. Ejemplo 3 Vamos a calcular el área de la cardioide de ecuación polar ρ = 1 + cosθ en el intervalo [0. b]. q. y sobre todo cuando se trabaja con nodos equiespaciados. 1]. 0327 8. tomando sus n+1 extremos como nodos de integración y determinando los pesos de la fórmula 8. Supongamos que tenemos la fórmula normalizada ∫ f ( x) dx ≅ p f ( x ) + p f ( x ) + K + p f ( x ) α 1 1 2 2 β n n y hemos de evaluar la integral Buscamos un cambio de variable de la forma t = mx + n que transforme el intervalo [a. 2.nodos = 2*x. Se obtiene al tomar como nodos los extremos del intervalo.2 queda : . para k = 1. Los nodos de las fórmulas de Newton-Cotes son puntos equiespaciados en el intervalo de integración que se obtienen dividiéndolo en partes iguales y tomando los extremos de los subintervalos resultantes.1.1. por lo que suelen preferirse a las de n impar.^2/2. b] en [α . Las fórmulas de Newton-Cotes se denominan fórmulas cerradas o fórmulas abiertas. un grado más de lo esperado. Ello se consigue para los valores de m y n siguientes βa − αb b−a m= . Las fórmulas basadas en un número impar de nodos (n par) son exactas para polinomios de grado n+1. a b ∫ g (t ) dt ≅ q g (t ) + q g (t ) + K + q g (t ) . n . a 1 1 2 2 b n n donde q k = mp k y t k = mx k + n . según consideren o no como nodos los extremos del intervalo inicial. β ] .1. K.1. Transformación de intervalo Si la adaptación no es obvia. n= β −α β −α La fórmula de integración adaptada al nuevo intervalo es ∫ g (t ) dt . El sistema 8. se efectúa una transformación lineal que aplique un intervalo en otro. y*pesos2 ans = 2.1 para que integre exactamente polinomios de grado n. Ejemplo 4 La fórmula de los trapecios simple es la fórmula de Newton-Cotes cerrada de orden 1. y = (1+cos(nodos)).3889 El error cometido es 3*pi/4-ans ans = -0.1 Fórmulas de Newton-Cotes cerradas La fórmula de Newton-Cotes cerrada de orden n se obtiene dividiendo el intervalo en n subintervalos iguales. pesos2 = 2*pesos. 8. 2 La fórmula obtenida es la regla de Simpson simple: b  b−a a+b f ( x) dx ≅  f (a) + 4 f   + f (b) . el cálculo corresponde a la fórmula de Newton-Cotes de orden 4. x = 0:pi/4:pi y = (1+cos(x)). y x2. 2 Vamos a obtener la fórmula de Newton-Cotes cerrada de orden 2.^5/5] pesos = A\c . q. 3 3 Para que los pesos sean aplicables a un intervalo cualquiera [a.2 queda entonces p1 + p 2 + p 3 = 2 − p1 + p3 = 0 2 p1 + p3 = 3 de donde 1 4 p1 = p3 = . Imponemos que la fórmula 8. t 2 = . q1 = q3 = m = 3 6 3 6 y los nodos a+b t 1 = a.^3/3. q.   6  a  2   ∫ Ejemplo 6 En el Ejemplo 3 calculamos el área de media cardioide mediante una fórmula basada en 5 nodos no equiespaciados. q. Tomando los nodos equiespaciados. El sistema 8. b]. = 2 β −α βa − αb a + b n= = .1 integre exactamente los polinomios 1.^2/2 A = rot90(vander(x)) q = pi. q.^4/4. p2 = . x. 2 β −α Los pesos quedan 1 b−a 4 b−a . 1] como intervalo de integración. realizamos el cambio de intervalo (3) con α = −1 y β = 1 : b−a b−a m= . q2 = m = 4 . Para simplificar los cálculos elegimos [−1.^2/2. t 3 = b.p1 + p2 = b − a p1a + p2b = b2 − a 2 2 y los pesos son p1 = p2 = dando la fórmula de Trapecios simple: IT ( f ) = Ejemplo 5 b−a 2 b−a ( f (a) + f (b) ) . c = [q. es más aproximado que el del citado ejemplo. Por ejemplo. La determinación numérica de los pesos se ve afectada por el mal condicionamiento del sistema lineal resultante. cuando lo exigido era de grado n. b a+b f ( x) dx ≅ (b − a ) f ( ). los errores de redondeo limitan la precisión de los pesos que se obtienen. las fórmulas con un número impar de nodos (n par) son exactas para polinomios de grado n+1.3736. y x2. que pueden dar lugar a “cancelaciones catastróficas”. El hecho de que en las fórmulas abiertas no intervengan los valores del integrando en los extremos del intervalo permite aplicarlas a integrales impropias en que presentan valores infinitos en los extremos.1. los nodos son –1/2. lo que se traduce al aplicar la fórmula en substracción de cantidades grandes. tomando [−1. porque éste es el único nodo de integración. Otro inconveniente de estas fórmulas al aumentar n es que aparecen pesos de gran valor absoluto y distinto signo. ∫ Ejemplo 8 La fórmula de Newton-Cotes abierta de orden 2 se obtiene dividiendo el intervalo en 4 partes y considerando como nodos los extremos interiores de los subintervalos. 0 y 1/2. En contrapartida. 1] como intervalo de integración.y*pesos El resultado obtenido. las fórmulas abiertas presentan mayor error que las cerradas del mismo orden.2 Fórmulas de Newton-Cotes abiertas La fórmula de Newton-Cotes abierta de orden n se obtiene dividiendo el intervalo en n+2 partes iguales. por lo que éstas son más utilizadas en general. 8.1 para que integre exactamente polinomios de grado n. 2 a Esta fórmula supera las expectativas de precisión al integrar exactamente polinomios de grado 1 y no sólo los de grado 0 para los que está diseñada. por lo que hay que recurrir a métodos analíticos para su determinación. tomando como nodos los n+1 puntos de división y determinando los pesos de la fórmula 8. conviene analizar previamente la convergencia de la integral y estimar de algún modo el error. Para n elevado.0175. x. Como en el caso de las fórmulas cerradas. Ejemplo 7 La fórmula de Newton-Cotes abierta correspondiente a n=0 es la llamada fórmula de punto medio. 2. pues el error es de −0. Exigiendo que la fórmula 8. se obtiene el sistema: p1 + p 2 + p3 = 2 1 1 − p1 + p3 = 0 2 2 1 1 2 p1 + p3 = 4 4 3 de donde .1 integre exactamente los polinomios 1. En este caso. la solución obvia es dividir el intervalo de integración en pequeños subintervalos iguales y aplicar a cada subintervalo la correspondiente fórmula. K. x 2 . = 2 β −α βa − αb a + b = n= . pero el procedimiento es completamente general. q.4 2 .3169 y el error de 0. De este modo se obtienen las fórmulas de Newton-Cotes compuestas.0393. q. x1 . q1 = q3 = m = 2 3 3 3  3 y los nodos a+b a + 3b 3a + b t1 = . h = pi/6 x = 0+h:h:pi-h y = (1+cos(x)).  3   a      p1 = p3 = ∫ Ejemplo 9 Comparemos la precisión de las fórmulas abiertas y cerradas estimando el área de media cardioide por medio de la fórmula de Newton-Cotes abierta de orden 4. q.^3/3. t2 = . b]. x m . 2 β −α Los pesos quedan 4 b−a b−a  2 . c = [q.^5/5] pesos = A\c y*pesos El resultado obtenido es 2.3 Fórmulas de Newton-Cotes compuestas El error de las fórmulas de Newton-Cotes depende de una potencia del tamaño del intervalo. 3 3 Para que los pesos sean aplicables a un intervalo cualquiera [a. p2 = − . Conviene pues que el intervalo de integración sea pequeño. Si no lo es. realizamos el cambio de intervalo (3) con α = −1 y β = 1 : b−a b−a m= . Por regularidad y precisión.1. b] se obtiene dividiendo el intervalo en m subintervalos y tomando como nodos los puntos medios de los mismos. Son conocidas las fórmulas los Trapecios y la de Simpson.^2/2 A = rot90(vander(x)) q = pi. 8.^4/4. t3 = . . que es mayor que el de la fórmula cerrada. siendo la de punto medio la única abierta que suele usarse en versión compuesta.^2/2. 4 2 4 La fórmula obtenida es: b b − a   3a + b  a+b  a + 3b   f ( x) dx ≅   2 f  4  − f  2  + 2 f  4  . son más usuales las de tipo cerrado. Ejemplo 10 La fórmula de punto medio compuesta en [a. dando lugar a fórmulas compuestas de orden cualquiera. q 2 = m −  = − . q. que es 1. Podemos obtener una estimación mejor de la integral siguiendo la idea de Romberg: 4I − I 2 IR = 3 = 1./x.2. El valor del cociente I3 − I2 ≅ 0. Integración adaptativa Los métodos de integración vistos hasta ahora son independientes del comportamiento del integrando en el intervalo. Sin embargo.4177 Aplicando un método compuesto con distintos valores de h podemos estimar el error y su orden. obteniendo I 1 = 1. 3. h= m Ejemplo 11 Para estimar la integral sin x dx x 0 utilizando un método cerrado. donde h es la longitud de los subintervalos: b−a . evitamos calcular la función en 0 y se puede aplicar directamente la fórmula de integración. a+h/2 : h : b-h/2. La diferencia entre ambos. al dividir el paso h por 2. La fórmula queda I M [h] = h( f ( x1 ) + f ( x 2 ) + f ( x m ) ).25 I 2 − I1 indica que el error estimado se divide por 4.41815 . Ejemplo 12 Evaluamos la integral anterior por la fórmula de punto medio con 25 y 50 intervalos. % Nodos de integración sin(x). usando un método abierto. respectivamente. b = 2*pi. porque si evaluamos directamente la función.41813 . Concluimos que el error es proporcional a h2.Se evalúa la integral por punto medio en cada subintervalo. multiplicando su longitud por el valor de la función en el nodo correspondiente y se suman los resultados. ∫ 2π a h x y I = = = = = 0. m = 25. estimemos esta integral por el método de punto medio con 25 subintervalos.41805 . La estrategia para reducir el error consiste en aumentar el número de subintervalos o el orden del método utilizado. h*sum(y) I = 1. (b-a)/m. Estos métodos pueden tener dificultades si el integrando varía bruscamente en unas zonas del intervalo y suavemente .41773 e I 2 = 1.1 ⋅ 10 −4 es una estimación aproximada del error. da una indeterminación. 3 8. El resultado de la fórmula con 100 intervalos es I 3 = 1. hay que definir explícitamente el valor del integrando en 0. Por ejemplo. aunque quad necesita más evaluaciones de la función. los extremos del intervalo de integración. cuya idea es trabajar más allí donde sea necesario y ahorrar operaciones donde el integrando se comporte mejor. Para tratar estos casos. se utiliza un error relativo de 10−3.0. la tolerancia y un quinto parámetro que causa la representación gráfica de los valores del integrando utilizados en la evaluación. comienzan aplicando un método determinado. quad8 tiene mayor error). se toma un paso muy pequeño para aproximar bien las variaciones bruscas.^2). el número de subdivisiones realizadas puede ser distinto. dependiendo del comportamiento del integrando en el mismo. runge. Utilizamos quad con tolerancia 10-2: quad('runge'. se definen los métodos adaptativos. ambas producen un error del mismo orden (en este caso. trapecios por ejemplo. 10] mediante quad. .m. Ejemplo 13 Para integrar la función de Runge en el intervalo [0.en otras. Con la misma tolerancia. hay que definir previamente un fichero. primero con uno y luego con dos subintervalos. 0 1 2 3 4 5 6 7 8 9 10 Si ejecutamos estas funciones omitiendo el parámetro de la tolerancia. Si la diferencia entre las estimaciones es mayor que la tolerancia establecida. se representan los valores usados en la estimación de la integral. La figura adjunta muestra las abscisas de dichos valores./(1+x.1) ans = 1.47115451163704 Los argumentos son: el nombre del fichero con el integrando. La adaptabilidad del método consiste en que en cada subintervalo. Los nodos se acumulan entorno al origen que es donde la función presenta la variación más acusada. El proceso de subdivisión prosigue hasta alcanzar la precisión requerida o un nivel máximo de recursión que se establece para que el algoritmo no cicle indefinidamente. Las funciones quad y quad8 de MATLAB son métodos adaptativos basados en el método de Simpson y en método de Newton-Cotes cerrado con 8 subintervalos. respectivamente. con la función a integrar: function y=runge(x) y=1. Se observa la acumulación de los mismos en las zonas más críticas de la función. En el mejor de los casos.10. Introduciendo un parámetro adicional en la llamada a estos métodos. Para ello.1e-2. se repite el procedimiento con cada uno de los dos subintervalos considerados. lo que trae consigo un elevado número de operaciones que no se necesitan en la zona de variación suave. 2*pi) ans = 1. .eps.1).0.[].1e-2.0.0./x.0.10. La figura se obtiene con el código siguiente: subplot 221 quad8('runge'. title('QUAD8 con tol por defecto') subplot 224 quad('runge'. title('QUAD8 con tol=1e-2') subplot 222 quad('runge'.m con la expresión y = sin(x).10. title('QUAD con tol por defecto') Ejemplo 15 Evaluamos la integral del Ejemplo 11 mediante quad('sinc'.1).1e-2.41815007017436 donde sinc es un fichero.1).1).10.10.Ejemplo 14 El gráfico adjunto compara los nodos utilizados para integrar la función de Runge con ambas funciones y distintas tolerancias. title('QUAD con tol=1e-2') subplot 223 quad8('runge'.[]. Justifica la magnitud del error. 3/8. (Valor exacto con 4 decimales: 1. Evalúa la integral 2 π ∫ sin x 0 2 dt aplicando la fórmula de Newton-Cotes compuesta cerrada de orden 4 y estima el error cometido. c) Compara la precisión de ambas fórmulas al integrar la función 1/x entre 1 y 2.6858). Escribe un fichero. 1]. 1 2 Considera la integral k (θ) = ∫ π/2 dφ 1 − sin 2 (θ) sin 2 (φ) 0 a) Trabajando siempre en radianes.75 0. 1] son 1/8.5596 1 0. (Valor exacto con 3 decimales: 3. 6 La función densidad de probabilidad de la distribución normal es 1 −t 2 2 f (t ) = e 2π . 1]. b) Evalúa dichas fórmulas para estimar el recorrido. Problemas a) Comprueba que los pesos de la fórmula de Newton-Cotes cerrada de orden 3 en el intervalo [0. en comparación con el del apartado anterior. calcula k(30º) por la fórmula de Newton-Cotes abierta de orden 3.9162 0.4055 Se trata de hallar el espacio recorrido por el móvil.6931 0. b) Calcula k(85º) por el mismo procedimiento. 3 4 5 Halla el número de condición del sistema planteado para determinar los pesos de la fórmula cerrada de Newton-Cotes de orden 6 en el intervalo [0. Observa cómo cambia el número de condición al tomar el intervalo [−1. integrando la velocidad en [0. abiertas o cerradas que pueden utilizarse con los datos disponibles. Esta fórmula recibe el nombre de regla de Simpson 3/8.5 0.8.8109 0. 1]. b) Comprueba que fórmula de orden 2 integra exactamente los mismos polinomios que la de orden 3.25 s la velocidad de un móvil en m/s obteniéndose los valores siguientes t v 0 0.25 0. comparando los resultados obtenidos para distinto número de subintervalos. El propio fichero debe calcular los pesos teniendo el cuenta lo anterior y aplicar la fórmula de cambio de intervalo.832).3. Se mide a intervalos regulares de 0.m para estimar la integral de una función en un intervalo cualquiera por la fórmula de Newton-Cotes de orden 6. 3/8 y 1/8. a) Indica todas las fórmulas de Newton-Cotes simples o compuestas. a A = 2π ∫ b q y 1 + y ' dx 2 . con x entre 0 y p. ∫ ∫ 7 8 La longitud del arco de la curva de ecuación y = f (x) entre los puntos de abscisa x = a y x = b viene dada por la integral L= ∫ b 1 + f ' ( x) 2 dx a Calcula la longitud de una circunferencia de radio 1 aplicando una fórmula de integración abierta para evitar la singularidad del integrando. al girar entorno al eje OX viene dado por la integral p Halla el área de la superficie de revolución engendrada por la curva y = q x / p . Analiza el error comparando el resultado con la función erf de MATLAB. al girar entorno al eje OX (un plato de antena "parabólica"). Indica el error respecto al valor exacto. para un valor de x determinado. El área de la superficie de revolución engendrada por la curva de ecuación y = f (x) entre los puntos de abscisa x = a y x = b.La probabilidad de que una variable aleatoria X con distribución normal tome valores entre −x y x viene dada por la integral x 2 1 2 x −t 2 2 p( X < x) = e −t 2 dt = e dt = erf ( x) π 0 2π − x Evalúa esta integral por Newton-Cotes de distintos tipos y órdenes. a costa de evaluar la función en un nodo más. En efecto. x = 0:h:1. A = rot90(vander(x)). 1 1 1 1  x 3 dx = =  0 + 4 + 1 4 6 8  0 c) El valor exacto de la integral es 2 1 dx = log 2 1 x Estimándola por Newton-Cotes de segundo orden obtenemos  1 1 2 1  25 3 I 2 =  f (1) + 4 f   + f (2)  = 1 + 4 +  =   6 6 3 2  36 2   y por Newton-Cotes de tercer orden  1 1 3 3 1  111 4 5 I 3 =  f (1) + 3 f   + 3 f   + f (2)  = 1 + 3 + 3 +  =   8 8 4 5 2  160  3 3  Los errores respectivos son log 2 − I 2 ≅ −0. ∫ ∫ .3750 0. obtenemos el sistema lineal que proporciona los pesos:  1 1 1 1  p1   1        0 13 2 3 1  p2   1 2   0 1 4 1  p  =  1  9 9   3   3   0 1 8 1  p   1  27 27   4   4  1 Efectuando los cálculos con MATLAB se obtiene el resultado pedido: h = 1/3. 1/2. Soluciones a) Para obtener la fórmula de Newton-Cotes cerrada de orden 3 en [0. 2 3 y 1. 1]. 1 3 . llamada de Simpson 3/8.0013 y log 2 − I 3 ≅ −0. 1/4]. la fórmula de Newton-Cotes de orden 3 integra exactamente polinomios de tercer grado. 0. b = [1. La fórmula de orden 2 está diseñada para integrar polinomios de grado 2.4. queda ∫ f ( x) dx ≅ 8 ( f (0) + 3 f ( 0 1 1 1 3 ) + 3 f (2 3 ) + f (1)) b) Por construcción. Exigiendo que la fórmula integre exactamente polinomios de grado 3. pero también resulta exacta para los de grado 3.8. dividimos el intervalo en 3 partes y consideramos como nodos los extremos de los subintervalos.1250 0.0006 La fórmula de tercer orden sólo reduce el error a la mitad.1250 La fórmula.3750 0. pesos = A\b pesos = 0. 1/3. b^2/2. n = 5. % Nodos A = rot90(vander(x)). b^4/4].4835 I = 3.832-I ans = 0. x = a+h : h : b-h.6338 Del aspecto de las gráficas se deduce que el comportamiento de la segunda es mucho más variable que el de la primera y esto se traduce en un mayor error al calcular la integral. c = [b. Los pesos se obtienen resolviendo el sistema que resulta al exigir que la fórmula integre exactamente los polinomios de grado 4. a = 0. h = (b-a)/n.6871 10 z=85º 8 6 4 2 z=30º 0 0 1 2 El error es 1. 3 Para calcular los pesos de la fórmula de Newton-Cotes cerrada de orden 6.^2).1982 Y el error 3.7199 0. 2π] en 5 partes iguales. tomamos 7 puntos equiespaciados de 0 a 1 y calculamos la matriz del sistema resultante al imponer que la fórmula integre exactamente polinomios de grado 6. . A = rot90(vander(nodos)). b = pi/2. Los extremos interiores son los nodos de integración. I = y*pesos z = 0.6858-I ans = -0.2 Dividimos el intervalo [0.5236 I = 1./sqrt(1-(sin(z)*sin(x)).7199 a) Evaluamos el integrando en los nodos y aplicamos los pesos para 12 estimar la integral z = pi/6 y = 1.0013 b) Repetimos los cálculos para el ángulo de 85º.0654 0.0654 0. b^3/3. El resultado es ahora z = 1. nodos = 0 : 1/6 : 1. pesos = A\c pesos = 0. b].4863 . disp(cond(A)) 3. 1] se observa que el número de condición se reduce notablemente. % Integral en el subintervalo % Integral en el intervalo total end I = sum(p) I = 0. b].^2). sumamos los resultados de cada trozo para obtener la estimación le la integral en el intervalo total. 1/5]. evaluamos primero los pesos de la fórmula de Newton-Cotes simple cerrada de orden 4 en el intervalo normalizado [−1. 0. nodos = -1 : 0. p(k) = h/2*y*pesos. a = m = x = I = for 0. % Extremos de los subintervalos 0.1556 Para aplicar la fórmula compuesta. Los valores de la función se calculan en nodos equiespaciados en el intervalo [a. que es 2. A = rot90(vander(nodos)).5 : 1. 4 Teniendo en cuenta las observaciones del problema 3. b = 2*sqrt(pi). determinamos los pesos para un intervalo normalizado [−1.7111 0. nodos = -1 : 1/3 : 1. pesos = A\c pesos = 0. 10. 0. h = (b-a)/m. disp(cond(A)) 189.1556 0.6061e+004 Repitiendo los cálculos en el intervalo [−1. 1]. A = rot90(vander(nodos)).7111 0.El número de condición de A es bastante elevado.2667 0.8141 Para utilizar la fórmula de Newton-Cotes en un intervalo cualquiera [a. dividimos el intervalo de integración en m subintervalos iguales y estimamos la integral en cada uno de ellos mediante la fórmula simple multiplicada por el factor de escala. 1/3. que es el cociente entre la longitud h de cada subintervalo y la del intervalo normalizado. % Inicialización de la integral k = 1:m nodos = x(k) : h/4 : x(k+1). y = sin(nodos. Finalmente. a : h : b. c = 2*[1. 1] y los multiplicamos por (b−a)/2. Nodos 0 1/4 Tipo Orden Interv.68525 0.68263 0.6825 −1/3 1/2 1/4 1/2 1/8 1/4 1/4 1/4 1/6 2/3 1/12 1/3 1/6 1/3 7/90 32/90 12/90 32/90 1/2 2/3 1/2 1/4 1/8 1/6 1/12 7/90 .48624731612146. A 2 1 Newton-Cotes C 1 1 Trapecios simple C 1 2 Trapecios compta. Nombre A 0 1 Punto medio simple A 0 2 Punto medio compta. La diferencia entre ambos resultados es una estimación del error de la fórmula I-I2 = 2.Para estimar la precisión.68111 0. C 1 4 Trapecios compta. C 4 1 Newton-Cotes 1/2 Pesos 1 3/4 1/2 2/3 1 Valor 0.67698 0. C 2 1 Simpson simple C 2 2 Simpson compta. obteniendo I2 = 0. repetimos los cálculos con m = 20.6931 0.68235 0.66085 0.68249 0.0972e-005 5 a) La tabla adjunta muestra las fórmulas aplicables con los pesos correspondientes a cada nodo y la estimación que resulta. 9126 >> pesos = A\b % si haces sum pesos tiene que dar b pesos = 0. >> %introducimos la funcion: >> y = (1+cos(nodos)).y) I= 2.0000 1.r%20Cuatrimestre/Practica%207%20-%202/practica%208.99998495997193 --------ejemplo 2 --------- >> %area de la cardioide.txt NEWTON COTES -----------ejemplo del seno >> y = [ 0 1/2 sqrt(2)/2 sqrt(3)/2 1] %se puede hacer y=sin(x) >> x = [0 pi/6 pi/4 pi/3 pi/2].1484 3.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat..5708 1. q^2/2.^3.5220 1.^0. adptando los nodos ya obtenidos >> nodos = 2*x >> pesos = 2 * pesos.0000 1. >> I = dot(pesos.06028752058655 -0.2026 6.06028752058655 0.0327 ---------ejemplo 3 --------->> % cambiar intervalo [0.3805 1.0000 0 0.2337 1.0966 2.. >> A = [x. x..0472 1. q^5/5] b= 1.8758 0 0.^1.1435 0. pi] a [-1.0881 >> q = pi/2.1833 1.83775804095728 1.7854 1.4674 0 0. x.5236 0.0000 1.^2/2.y) I= 0.^4] A= 1.tematicas/Primer%20Cuatrimestre/Practica%207%20-%202/practica%208.4845 1. %Longitud del intervalo >> b = [q.3500 -1..3889 >> (3*pi/4)-I ans = -0. q^4/4. x.txt (1 of 3) [09/03/2008 13:49:23] .6169 1. q^3/3.14398966328953 1.2742 0.^2.0000 1.1] >> pesos = (2/pi)*pesos pesos = 0.2919 1.0667 file:///E|/Documentos/Estudios/Documentacion%20Asignat.0752 0. x.14398966328953 >> format long >> I = dot(pesos.5708 0 0. >> A = rot90(vander(nodos)).5467 >> pi/2 . q.. b = [q.5000 0.y) I= 1. >> A = rot90(vander(x)).file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat..2039 >> pesos = A\b pesos = 0.3354 24.^5/5] b= 3. >> q = pi.he cambiado una cosa) ----------------->> %N-C abierto ----------------->> nodos = 1/6:1/6:(1-1/6).5500 -0.9000 0. >> q=1. q.^2/2..y) I= 5.^4/4. >> I = dot(pesos.5500 >> sum(pesos) %la formula del algodon. >> b = [q.^3/3..3000 -0.1170 0.9000 1.6430 (puede que el resultado este mal. q. >> pesos = A\b pesos = 0.1833 >> nodos = (2/pi) * nodos .I %error cometido ans = 0.^4/4.r%20Cuatrimestre/Practica%207%20-%202/practica%208. q.3333 0 0.0000 >> y = 1.txt (2 of 3) [09/03/2008 13:49:23] . q.tematicas/Primer%20Cuatrimestre/Practica%207%20-%202/practica%208.2443 >> %con estos pesos puedo integrar cualqueir funcion en el intervalo [0 pi] o generalizarlo a cualqueir intervalo mediante el itercambio de coordenadas >> sum(pesos) %comprobacion rutinaria ans = 3.5000 >> I = dot(pesos.7000 1.0000 -0.4189 1.1416 >> y = (1+cos(nodos)).9348 10.0241 ----------------------ejemplo con mas nodos ---------------------->> nodos = 0:pi/4:pi.3523 61.^2/2. q.2443 1.txt 1.7000 0.^2/2.^5/5].^3/3..1 nodos = -1.^2) y= 0.0000 0./(1+nodos.3500 0. file:///E|/Documentos/Estudios/Documentacion%20Asignat.1170 0. q.3333 1.1416 4. q.. >> pesos = pi*pesos pesos = 1./sqrt(x). I= 1.1991 1.r%20Cuatrimestre/Practica%207%20-%202/practica%208. >> I = dot(pesos.9145 >> h = 1/500.3169 -------------------Punto medio compuesta -------------------->> h = 1/50. >> x = h/2: h: 1-h/2.3169 >> 3*pi/4 . >> y = 1. >> y = 1.. >> I = h*sum(y) %en este caso es facil.y) I= 2.0841 -2.7184 >> %tiene mucho error (debiera ser 1) porque hemos elegido pocos nodos >> %y la funcion se comporta mal (tiene asintita en x=0)! ----------------------------otro ej que se comporte mejor la cardioide ---------------------------->> nodos = pi*nodos.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat.7279 >> y = (1+cos(nodos)).txt (3 of 3) [09/03/2008 13:49:23] . >> I = dot(pesos.7279 -2.tematicas/Primer%20Cuatrimestre/Practica%207%20-%202/practica%208.9729 file:///E|/Documentos/Estudios/Documentacion%20Asignat.txt ans = 1 >> y = 1.I ans = 0. porque los pesos son todos iguales y son h.^2/2.1991 4..0393 2../sqrt(x)./sqrt(nodos). >> x = h/2: h: 1-h/2.y) I= 1.. >> I = h*sum(y) I= 1. y utilizarlas en la resolución del problema. i = 1. pues es costosa de evaluar en puntos concretos. Planteando directamente las condiciones anteriores se obtiene un sistema de ecuaciones lineales con solución única. Numéricamente es mucho más útil la forma de Newton del polinomio de interpolación. Otra aplicación de la interpolación es encontrar valores aproximados de una función conocida pero difícil de estimar en determinados puntos. hemos de encontrar una función f(x). su obtención es más estable que por los métodos anteriores. que es el polinomio de grado menor o igual que n que pasa por n+1 puntos ( xi . a partir de unas observaciones. o el tiempo que tardará en llegar a cierto punto un vehículo sabiendo qué tiempo ha tardado en distancias y circunstancias similares. pero generalmente mal condicionado. n + 1 . que verifique todos estos valores. La necesidad de plantear un problema de este tipo deriva del siguiente hecho: En la mayoría de casos.. la evolución de la naturaleza. Aunque no tiene expresión explícita. a partir de éstos podremos deducir. La técnica que nos permite. siendo la base de algoritmos de diseño gráfico. normalmente. yi ). Las calculadoras han arrinconado las tablas. el cálculo de los valores no señalados en las tablas había que obtenerlo por interpolación. selección que recae en la función polinómica.. etc. a partir de una serie de puntos ( xi .1 Introducción En temas anteriores hemos estudiado problemas en los que aparecía una función. dando directamente su expresión en la forma y = f ( x) . también llamados nodos de interpolación. n + 1 . Los polinomios de Lagrange permiten obtener una expresión explícita del polinomio de interpolación cuyo interés es más bien teórico. hallar los valores que toma la función desconocida f(x) se conoce como interpolación.10 Interpolación Polinómica 10. se puede actualizar fácilmente si se añaden nuevos nodos de interpolación. que nos dan la pauta de su comportamiento.2 Interpolación polinómica Ante la diversidad de funciones interpoladoras que se pueden construir.. 10. Para las funciones trigonométricas y logarítmicas ha sido tradicional el uso de tablas. pero los procedimientos siguen siendo válidos. las normas que rigen el comportamiento humano.. es lógico elegir la de cálculo más simple y mejor comportamiento. . podemos estimar la altura de un individuo teniendo en cuenta la nuestra propia y la de nuestros conocidos. es decir. su evaluación no presenta los inconvenientes de los polinomios de Lagrange. o bien los datos necesarios para establecerla. Por tanto el objetivo es la obtención del polinomio de interpolación. entre otros. yi ).. obtenidos de forma experimental. Esto nos permitía realizar un estudio sobre las características y el comportamiento. datos no considerados en el estudio. sólo se dispone de una serie más o menos amplia de valores. y sobre todo.. La importancia de la interpolación sigue vigente.. de métodos de integración aproximada y de evaluación de funciones de matrices. Así. i = 1. no son descritas por una fórmula concreta y conocida.. con un error más o menos controlado. Ahora nos planteamos la situación inversa. y2 ) ). A=[10 1. yg=log10(xg). y los nodos de interpolación .yg. x=[10 100].90).100 1]. Esto justifica el uso de la interpolación lineal para calcular valores de una función tabulada .1) y (100.y. de forma que la gráfica de la función logarítmica y la recta que la interpola en un intervalo muy pequeño prácticamente coinciden.xg. Los puntos de interpolación son (10. y1 ) y ( x2 .8889 Si calculamos con MATLAB log10(90) ans = 1.2]. La utilizaremos si los datos que poseemos son dos puntos ( x1 . o se eligen sólo dos puntos entre varios para calcular la aproximación en un valor intermedio. y=[1.yp.2) calculamos pues la ecuación de la recta que pasa por ellos. yp=polyval(p.'r') Title('interpolación lineal') p90 = 1. a partir de la recta que pasa por dichos puntos.9542 Observamos que el error cometido ans-p90 es considerable ello es debido a que los puntos de interpolación son muy distantes.xg). Calcula por interpolación lineal el logaritmo en base 10 de 90. tremendamente útil por su fácil cálculo y por su error reducido si los puntos están suficientemente próximos. p=A\y. p1 ( x) = a1 x + a2 p1 (10) = 10a1 + a2 = 1 p1 (100) = 100a1 + a2 = 2 Resolviendo el sistema obtendremos los coeficientes del polinomio y podremos evaluarlo en puntos intermedios. el error es mucho menor.'*'. %valor aproximado del log10 90 %Representación de la función f(x) = log10(x) junto al polinomio que la interpola.Interpolación lineal Si el polinomio es de grado 1 hablamos de interpolación lineal. Si elegimos abscisas cercanas. plot(x.1:105. xg=5:. Ejemplo 1 Sabiendo que log10 10 = 1 y log10 100 = 2.y=[1 2]. p90=polyval(p.xg. Imponiendo las condiciones de interpolación (5. y3 ) se determina análogamente resolviendo el sistema. ( x2 .6 log10(x) p(x) 0 20 40 60 80 100 120 Interpolación cuadrática Si disponemos de tres puntos que determinan una parábola tendremos un polinomio de grado 2.8 0. a1 x12 + a2 x1 + a3 = y1 2 a1 x2 + a2 x2 + a3 = y2 2 a1 x3 + a2 x3 + a3 = y3 Ejemplo 2 De un muelle con un extremo fijo colgamos distintas masas obteniendo la siguiente tabla: Masa (kg) 5 10 15 Longitud (cm) 395 620 795 Utiliza la interpolación cuadrática para estimar la longitud del muelle para una masa de 7 Kg. y2 ) y ( x3 .620) y (15. se trata de interpolación cuadrática.395). y1 ).2 1 0.4 1. (10.8 1.interpolación lineal 2. El polinomio de grado dos p2 ( x) = a1 x 2 + a2 x + a3 que pasa por ( x1 .2 2 1.795) tenemos un sistema de ecuaciones lineales cuya expresión matricial es: .6 1. A=vander(x).xn). plot(x. p=A\y p = -1.0000 Representamos el polinomio junto a los puntos de interpolación.15].795].0000 120. cond(A) ans = 1.1:20. 25 5 1  a1   395        100 10 1  a 2  =  620   225 15 1  a   795    3    Observemos que la matriz del sistema es la matriz de Van der Monde.10. yn=polyval(p. polyval(p. xn=3:.0000 620.x) ans = 395.0000 Valor esperado en m = 7 kg v=polyval(p.0000 60.yn) xlabel('Masas') ylabel('Longitudes') Title('Polinomio de grado 2') . que pasa por los puntos dados.y. Esta matriz está mal condicionada para tamaños relativamente pequeños.0000 Por lo que el polinomio de interpolación se tiene la siguiente expresión: p2 ( x) = − x 2 + 60 x + 120 Comprobamos que cumple las condiciones de interpolación.620.'*'. o sea. y=[395. Creamos en MATLAB dos vectores con las abscisas y las ordenadas.1079e+003 Resolviendo el sistema se obtienen los coeficientes del polinomio buscado. respectivamente de los puntos a interpolar: x=[5.7) v = 491. Esto hace desaconsejable la obtención del polinomio de interpolación por este método.0000 795.xn. con lo que se obtiene el siguiente sistema de n+1 ecuaciones con n+1 incógnitas  x1n  n  x2 n  x3   M  xn  n +1 x1n -1 n x2 -1 n x3 -1 M n -1 xn +1 x1n -2 n x2 -2 n x3 -2 M n -2 xn +1 L L L O L 1  a1   y1      1   a2   y 2  1  a3  =  y3      M M   M  1  an +1   yn +1      . ( xn +1 . El hecho de aumentar el grado del polinomio de interpolación no implica que se obtenga mejor aproximación puesto que la coincidencia del polinomio con muchos puntos de interpolación se consigue a costa de grandes oscilaciones en los intervalos entre nodos o puntos de interpolación dados. n + 1.. yn +1 ) . y analizamos si con una interpolación lineal o cuadrática se obtiene una buena estimación o necesitamos un polinomio de interpolación de mayor grado.. Dados n+1 puntos de abscisas distintas ( x1 . Para demostrar este resultado basta expresar el polinomio buscado en forma normal Pn ( x) = a1 x n + a 2 x n-1 + ··· + an +1 e imponer las condiciones de interpolación. obtenidos de forma experimental.. existe un único polinomio de grado menor o igual que n. y1 ).. ( x2 . y2 ). i = 1. La obtención de este polinomio se basa en el siguiente resultado:....Polinomio de grado 2 1000 900 800 700 Longitudes 600 500 400 300 200 2 4 6 8 10 12 Masas 14 16 18 20 Interpolación polinómica en general El problema de interpolación es más general y se adapta mejor a los casos reales si se dispone de una serie de puntos.. cumpliendo las condiciones de interpolación Pn ( xi ) = yi . 2. xn+1] estaremos ante un problema de extrapolación. Este resultado. plot(xg. el método de operar es idéntico pero con riesgo de obtener resultados con errores considerables.xg). es decir x : x1 ≤ x ≤ xn +1 . proporciona también un método de cálculo que. xn+1 ) = 1≤i < j ≤ n +1 ∏ ( x j −xi ) y es no nulo al ser distintos por hipótesis..y). admite solución única. el sistema es compatible determinado.…. Por lo tanto..El determinante de la matriz del sistema es un determinante de Van der Monde de la forma: V ( x1 . si se utiliza para un valor de x que no pertenece al intervalo [x1.yg) title([‘polinomio de interpolación de grado ’. xg=linspace(x(1). yi) i = 1. ( xn +1 .. suele ser muy laborioso y presenta el problema del mal condicionamiento de la matriz del sistema. ( x2 . es decir. yg=polyval(p. Horas transcurridas 0 2 4 6 8 Piezas producidas 0 62 116 114 8 En este caso si consideramos todos los nodos o puntos de interpolación podremos hallar el polinomio de grado 4 resolviendo el sistema de ecuaciones lineales de 5 × 5 vamos a utilizar nuestra función interpol ya preparada en MATLAB. El polinomio de interpolación obtenido mediante los valores ( x1 . p=interpol(x. A partir de la siguiente tabla haz una estimación del número de piezas producidas después de 3.. yn +1 ) se utiliza para estimar valores en puntos intermedios a los que se han dado.. x3 .. los n+1 valores de x. a la que añadimos una instrucción para obtener el número de condición de la matriz del sistema: x=0:2:8. y=[0 62 116 114 8]. ya que no se puede garantizar el comportamiento fuera del intervalo. y2 ). . Algoritmo INTERPOL Entrada: (xi.. (grado del polinomio) V= vander(n+1) p=V\y. Salida: Pn(x) polinomio de interpolación de grado n Proceso: n = longitud del vector de nodos –1. Vamos a crear una función en MATLAB que utilizando el método expuesto calcule el polinomio de interpolación que pasa por todos los puntos. x2 . .num2str(n)]) Ejemplo 3 Un estudio sobre la eficiencia de los trabajadores en una factoría ha determinado que el promedio de piezas producidas por hora de sus trabajadores está relacionado con el número de horas transcurridas a partir del comienzo de la jornada. n+1.x(n+1)). 5 y 7 horas de trabajo. en general. aparte de asegurar la existencia y unicidad del polinomio de interpolación. puntos de interpolación. y1 ). xi : Pn ( x) = b1 ( x .4361e+004 v = 93.xi ) n-1 + .v=polyval(p.0000 77.0000 Polinomio de interpolación de grado 4 140 120 100 80 60 40 20 0 0 1 2 3 4 5 6 7 8 Podemos establecer como conclusión que el rendimiento de los empleados va aumentando a lo largo de la jornada hasta que alrededor de las cinco horas de trabajo se alcanza la producción máxima y a partir de ese momento la producción empieza a disminuir.. Si en este problema nos preguntáramos sobre la producción al cabo de 10 horas de trabajo estaríamos ante un problema de extrapolación que proporciona un resultado inadmisible al evaluar el polinomio de interpolación. Desplazar el origen a un nodo xi implica expresar el polinomio como una combinación lineal de potencias de x .7]) ncon = 1. es decir. + bn +1 .0000 125.5.xi ) n + b2 ( x .0000 Desplazamiento del origen El problema del mal condicionamiento de la matriz de Van der Monde asociada al sistema que resulta al hallar el polinomio de interpolación puede resolverse mediante un desplazamiento del origen.10) v = -250.. v=polyval(p.[3. eligiendo otra base para expresar este polinomio. 15.620. Comprueba la mejora del número de condición de la matriz del sistema.10). ncond=cond(Ad) pd=Ad\y ncond1 = 1. . pues la matriz del nuevo sistema es parecida a la de Van der Monde y para mayor grado reaparecerá el mal condicionamiento.1079e+003 ncond = 109. Ejemplo 4 Vamos a resolver el Ejemplo 2 realizando un desplazamiento del origen a x1 = 5. ncond1=cond(A) p=A\y.xn).1369e-013 Método de Lagrange Este método de interpolación consiste en obtener directamente el polinomio de interpolación expresado respecto de otra base de forma que no precisa realizar ningún cálculo. la notación utilizada se debe a Lagrange quien proporcionó las fórmulas.15]. xn=linspace(5.xn-5). vpd=polyval(pd. La expresión del polinomio será: p2 ( x) = −( x − 5) 2 + 50( x − 5) + 395 Como el polinomio de interpolación es único éste coincidirá con el anteriormente hallado: p2 ( x) = − x 2 + 60 x + 120 Para comprobarlo evaluamos los dos en un mismo conjunto de puntos y vemos que los resultados coinciden.795]. expresa el polinomio respecto de la nueva base matizando que se trata del mismo polinomio que el hallado en dicho ejemplo.La condición Pn ( xi ) = yi proporciona directamente el valor de bn+1 y queda un sistema mejor condicionado que el anterior. Esta mejora no es definitiva. vp=polyval(p. xd=x-5. Ad=vander(xd).10. y=[395. A=vander(x). x=[5.0659 pd = -1 50 395 Observamos que aunque el número de condición ha mejorado todavía sigue siendo alto.%observa como se evalúa el polinomio desplazado E=max(abs(vp-vpd)) E = 1. yn +1 ). y2 ) y ( x3 . L1 ( x2 ) = 0. ( xn +1 ..En el caso de la interpolación cuadrática dados los nodos ( x1 . donde vale 1. tal que Li ( x j ) = 0 si j ≠ i y Li ( xi ) = 1 Razonando de forma análoga al caso n = 2 se obtiene la siguiente expresión para estos polinomios: Li (x) = n +1 (x − x1 )L(x − xi −1 )(x − xi +1 )L(x − xn +1 ) x − xi =∏ (xi − x1 )L(xi − xi −1 )(xi − xi +1 )L(xi − xn +1 ) i =1 xi − x j j ≠i Es inmediato comprobar entonces que el polinomio . que se anule en todos los puntos x j . j = 1. ..3.. y1 ). ( x2 . Estos polinomios serán: L2 ( x) = L3 ( x) = ( x − x1 )( x − x3 ) ( x2 − x1 )( x2 − x3 ) ( x − x1 )( x − x2 ) ( x3 − x1 )( x3 − x2 ) Así pues la expresión completa del polinomio de Lagrange es: ( x − x2 )( x − x3 ) ( x − x1 )( x − x3 ) ( x − x1 )( x − x2 ) + y2 + y3 ( x1 − x2 )( x1 − x3 ) ( x2 − x1 )( x2 − x3 ) ( x3 − x1 )( x3 − x2 ) y claramente se tiene P2 ( xi ) = yi i = 1. Por lo que L1 ( x) = a1 ( x − x2 )( x − x3 ) por tanto L1 ( x1 ) = 1 = a1 ( x1 − x2 )( x1 − x3 ) → a1 = 1 ( x1 − x2 )( x1 − x3 ) y en consecuencia queda determinado este factor ( x − x1 )( x − x2 ) L1 ( x) = ( x1 − x2 )( x1 − x3 ) Análogamente tendremos L2 ( x1 ) = 0. L 2 ( x2 ) = 1. y1 ). L3 ( x2 ) = 0. es decir. En general dados n+1 nodos ( x1 . L 2 ( x3 ) = 0.. y2 ).. L1 ( x3 ) = 0. n + 1 . ( x2 .. consideramos Li(x) un polinomio de grado n. y3 ) el polinomio será de la forma: P ( x ) = y1 L1 ( x) + y2 L2 ( x) + y3 L3 ( x ) de forma que: L1 ( x1 ) = 1. L 2 ( x3 ) = 1.. L3 ( x1 ) = 0. 2. salvo en el P2 ( x) = y1 i-ésimo. x1 . . hemos de pagarlas al evaluar el polinomio en un punto concreto (del orden de n2 operaciones por cada evaluación).x1 )( x . su diferencia se anula en dichos puntos.620) y (15. i = 1. ( x . n + 1.395). aunque una vez obtenido resulta muy cómodo de evaluar para obtener estimaciones. ..Pn ( x) = y1 L1 ( x) + y2 L2 ( x) + y3 L3 ( x) + ··· + yn +1 Ln +1 ( x) = ∏ yi Li ( x) cumple las i =1 n +1 condiciones Pn ( xi ) = yi .x2 ) L ( x . por el elevado número de operaciones que se precisan realizar. los productos a efectuar pueden causar desbordamiento numérico y la fórmula no es estable numéricamente. Método de Newton El primer método estudiado para hallar el polinomio de interpolación. Si dos polinomios de grado ≤ n interpolan n+1 puntos.x2 ) L ( x . (10.. ( x . Ejemplo 5 Expresa el polinomio de interpolación de Lagrange para los datos del Ejemplo 2: Directamente sin realizar ningún cálculo a partir de los nodos (5. 2. La unicidad se puede garantizar utilizando el hecho de que un polinomio de grado n puede tener a lo sumo n raíces. da lugar a un sistema de ecuaciones lineales mal condicionado por lo que su utilización no resulta aconsejable. x .x1 )( x .xn ). Vamos a ver ahora el método de Newton que salva los inconvenientes anteriores y resulta ser el más útil y práctico.x2 ) + L + c1 ( x . Por lo que su expresión será: Pn ( x ) = cn +1 + cn ( x .. Lo contrario sucede con el método de Lagrange que proporciona directamente la expresión del polinomio de interpolación con el inconveniente de la evaluación del mismo en un punto dado.x1 ) + cn-1 ( x . por lo que sólo puede ser el polinomio idénticamente nulo..x1 )( x . lo que prueba directamente la existencia del polinomio de interpolación.795) podemos expresar el polinomio de grado 2: ( x − 10)( x − 15) ( x − 5)( x − 15) ( x − 5)( x − 10) P ( x ) = 395 + 620 + 795 2 (5 − 10)(5 − 15) (10 − 5)(10 − 15) (15 − 5)(15 − 10) Las operaciones que nos hemos ahorrado en su determinación. Este nuevo método consiste en expresar el polinomio de interpolación respecto de la base 1..xn ) Imponiendo las condiciones de interpolación. Además. podemos determinar los coeficientes de este polinomio.x2 ).. que resulta de forma natural al plantear las condiciones de interpolación.x1 )( x . 0 1  1 x2 − x1 1 x3 − x1  M M 1 x − x n +1 1  0 L  cn +1   y1      0 L  cn   y2   cn −1  =  y3  0 L     0 M O  M   M  ( xn +1 − x1 )( xn +1 − x2 ) L ( xn +1 − x1 )( xn+1 − x2 )L ( xn+1 − xn )   c1   yn+1      0 0 ( x3 − x1 )( x3 − x2 ) Los coeficientes pueden determinarse con menos operaciones (del orden de n2. y2). (x2. en lugar de n3).xi -1 ) ) Como consecuencia de este hecho se suelen tomar los nodos en cierto orden. c3 c3 + c2 ( x . y1).x1 ) + cn-1 ( x3 .x1 ) + c1 ( x . considerando primero los más próximos al punto que nos interesa. y1) y (x2.x1 )( xn +1 . y1 ). no obstante en la mayoría de casos va a persistir el mal condicionamiento del sistema.x1 ) + cn -1 ( xn +1 .x1 ) K Pn ( xn +1 ) = yn +1 = cn +1 + cn ( xn +1 . cada polinomio se obtiene del anterior mediante Pi ( x) = Pi -1 ( x) + c1 ( x . y2) y (x3.x2 ) L ( xn +1 .x2 ) + L + c1 ( xn +1 .x2 ) L ( x . aunque el polinomio obtenido finalmente es independiente del orden considerado. por lo que se pueden ir añadiendo nuevos puntos aumentando el grado del polinomio y conseguir la precisión deseada sin tener que calcular de nuevo todos los coeficientes.x2 )( x3 .Pn ( x1 ) = y1 = cn +1 Pn ( x2 ) = y2 = cn +1 + cn ( x2 .x1 ) Pn ( x3 ) = y3 = cn +1 + cn ( x3 . Ejemplo 6 Utiliza el método de Newton para obtener el polinomio de interpolación de grado 3 que evaluarías para estimar en el Ejemplo 3 el número de piezas producidas por los empleados al cabo de 5 horas trabajadas: .x2 ) es el polinomio de grado 0 que pasa por ( x1 . Es importante notar que el hecho de añadir nuevos nodos no afecta a los coeficientes ya calculados. es el polinomio de grado 2 que pasa por (x1.x1 )( x .xn ) El sistema lineal obtenido tiene una matriz análoga a la de Van der Monde.x1 )( x . es el polinomio de grado 1 que pasa por (x1.x1 ) c3 + c2 ( x . . Es decir. pero con la ventaja de ser triangular inferior.x1 )( xn +1 . y3) En general. 62).4)( x . es el polinomio de grado 1 que pasa por (4.( x . cond(A) p=A\b ans = 57. (2.114).( x .6) es el polinomio de grado 0 que pasa por (4.114).62) Si resolvemos el sistema por el método de Gauss puede haber desbordamiento numérico debido al mal condicionamiento de la matriz.116) y (6. es decir (4.c3=(114-c4)/2. elegimos los más cercanos al punto que se quiere realizar la estimación.7( x .116). b=[116 114 62 8]'.4 ) . (6. c2=(62-c4+2*c3)/8. y (8.48 8 4 1].116).114) y (2.4) p2 ( x) = 116 .0 8 -2 1. (6.c1=(8-c4-4*c3-8*c2)/48 .2c3 + 8c2 P3 (8) = 8 = c4 + 4c3 + 8c2 + 48c1 que directamente proporciona la solución: c4=116. c4 = 116 c3 = -1 c2 = -7 c1 = -1 Por lo que el polinomio tendrá la siguiente expresión: p3 ( x) = 116 − ( x − 4) − 7( x − 4)( x − 6) − ( x − 4)( x − 6)( x − 8) Notemos que p0 ( x) = 116 p1 ( x) = 116 . Sustituyendo estos nodos en la expresión anterior obtenemos el siguiente sistema triangular: P3 (4) = 116 = c4 P3 (6) = 114 = c4 + 2c3 P3 (2) = 62 = c4 .8).Horas transcurridas 0 2 4 6 8 Piezas producidas 0 62 116 114 8 El polinomio de interpolación de Newton de grado 3 tendrá la forma: p3 ( x) = c4 + c3 ( x − x1 ) + c2 ( x − x1 )( x − x2 ) + c1 ( x − x1 )( x − x2 )( x − x3 ) Para determinarlo se necesitan 4 nodos.0 0 2 1. es el polinomio de grado 2 que pasa por (4. en particular para tamaños mayores: A=[0 0 0 1.116).5941 p = -1 . x2 ) + L + c1 ( x . por un proceso de inducción se puede probar que en general el coeficiente cn-k+1 de grado k tiene la forma . que proporciona los coeficientes del polinomio sin necesidad de resolver el sistema de ecuaciones lineales.x1 )( x .x1 ) de donde cn = y2 − f [ x1 ] f [ x2 ] − f [ x1 ] = x2 − x1 x2 − x1 Esta expresión se denomina cociente de diferencias o diferencias divididas de primer orden.x1 ) + cn-1 ( x . y2 ) y ( x3 .x2 ) L ( x . es decir cn = f [ x1 x2 ] y el polinomio de Newton de grado 1 es de la forma: p1 ( x) = f [ x1 ] + f [ x1 x2 ]( x − x1 ) Veamos que el polinomio de grado 2 tiene la forma: p2 ( x) = f [ x1 ] + f [ x1 x2 ]( x − x1 ) + f [ x1 x2 x3 ]( x − x1 )( x − x2 ) f [ x2 x3 ] − f [ x1 x2 ] el cociente de diferencias divididas de orden 2. En efecto p2 ( x1 ) = f [ x1 ] = y1 f [ x2 ] − f [ x1 ] p2 ( x2 ) = f [ x1 ] + ( x2 − x1 ) = f [ x2 ] = y2 x2 − x1 f [ x2 x3 ] − f [ x1 x2 ] f [ x2 ] − f [ x1 ] p2 ( x3 ) = f [ x1 ] + ( x3 − x1 ) + ( x3 − x1 )( x3 − x2 ) = x2 − x1 x3 − x1 f [ x1 ] + f [ x1 ] + f [ x3 ] − f [ x2 ] f [ x2 ] − f [ x1 ] f [ x2 ] − f [ x1 ] ( x3 − x1 ) + ( x3 − x2 ) − ( x3 − x2 ) = x2 − x1 x3 − x2 x2 − x1 f [ x2 ] − f [ x1 ] ( x2 − x1 ) + f [ x3 ] − f [ x2 ] = f [ x3 ] = y3 x2 − x1 Una vez demostrado que p2 ( x) tiene la forma citada.-7 -1 116 Por lo que normalmente se recurre a otra técnica. Tabla de diferencias divididas Dado el polinomio de interpolación de Newton Pn ( x ) = cn +1 + cn ( x . y se denota por f [ x1 x2 ] . ( x2 . teniendo así: cn +1 = f [ x1 ] Pn ( x2 ) = y2 = cn +1 + cn ( x2 . la tabla de diferencias divididas.x1 )( x .xn ) Imponiendo las condiciones de interpolación. y3 ) y por unicidad tendremos la conclusión. siendo f [ x1 x2 x3 ] = x3 − x1 Para ello veamos que este polinomio pasa por los puntos de interpolación ( x1 . podemos determinar sus coeficientes: Pn ( x1 ) = y1 = cn +1 que denotaremos f [ x1 ] . y1 ). proporciona el valor de cn en función de los puntos de interpolación. . Ejemplo 7 Utiliza MATLAB para resolver el Ejemplo 6 mediante la tabla de diferencias divididas Para el polinomio de grado 3 tomamos 4 puntos y los ordenamos según su proximidad a las 5h transcurridas que es donde se quiere realizar la estimación % Horas transcurridas t = [2 4 6 8]'.3)=(A(3:n+1..2)-A(2:n. y se expresa en función de las diferencias divididas de orden k-1. en la segunda columna las diferencias divididas de primer orden...3)-A(3:n. cn-1. % Orden de las componentes por proximidad a las 5h horas transcurridas I = [2 3 1 4]. x2 ] f [ x2 . y así sucesivamente.n+1).1)). x4 ] L . En la diagonal de la tabla aparecen los coeficientes cn+1. % Piezas producidas T = [62 116 114 8]'. c1 de los polinomios de interpolación. % Luego. % Y así sucesivamente A(4:n+1.1) = Y. x3 ] f [ x3 .3)). cn. colocando en la primera columna los valores de la función o diferencias divididas de orden 0.. La tabla queda de la forma siguiente: cn − k +1 = f [ x1 x2 .f [ x2 x3 . x4 ] L f [ x1 . % La segunda son los cocientes de diferencias primeras A(2:n+1.xk +1 ] = y1 y2 y3 y4 La construcción de la tabla de diferencias divididas es relativamente sencilla teniendo en cuenta el esquema anterior. las diferencias segundas A(3:n+1. x2 . x3 .. A = zeros(n+1. % Inicialización de la Tabla de Newton n = 3.4)=(A(4:n+1. Y = T(I). los cálculos se disponen en una tabla de diferencias divididas.. x4 ] L f [ x1 . x3 .xk +1 ] − f [ x1 x2 .xk ] xk +1 − x1 que es el llamado cociente de diferencias divididas de orden k. % Valores ordenados X = t(I).2))..1)-A(1:n./(X(3:n+1)-X(1:n-1)). % La primera columna son las ordenadas A(:.2)=(A(2:n+1.. x3 ] f [ x2 . x2 . En la práctica./(X(4:n+1)-X(1:n-2)) p=diag(A) = f [ x1 ] = f [ x2 ] = f [ x3 ] = f [ x4 ] L f [ x1 ./(X(2:n+1)-X(1:n)).. en la tercera columna las de orden 2. x ) + L + cn )( x . v=v*(a-X(3))+p(3).x n -2 n -1 )(c2 + ( x . + ( x . aunque allí se evaluaba en un vector de puntos.) ) + c3 )( x . v=p(4). y tenemos así la posibilidad de representar el polinomio.. p3 ( x) = c4 + c3 ( x − x1 ) + c2 ( x − x1 )( x − x2 ) + c1 ( x − x1 )( x − x2 )( x − x3 ) = = c4 + ( x − x1 )(c3 + ( x − x2 )(c2 + ( x − x3 )c1 )) = = ((c1 ( x − x3 ) + c2 )( x − x2 ) + c3 )( x − x1 ) + c4 De esta forma es fácil calcular con MATLAB el valor numérico del polinomio paso a paso.. v=v*(a-X(2))+p(2).. comenzando con los más interiores.xn ) = cn +1 + ( x .x n -1 n -2 )(c3 + ( x . vamos a hacer los cambios necesarios para conseguir que este proceso sea válido también para el caso que se quiera evaluar en más de un punto.x1 )( x ..x1 ) + cn + Las operaciones se efectúan teniendo en cuenta la precedencia establecida mediante los paréntesis. .A = 116 114 62 8 p = 116 -1 -7 -1 0 -1 13 -9 0 0 -7 -11 0 0 0 -1 Tenemos así el polinomio de Newton que ya habíamos calculado en el Ejemplo 6.x2 ) + L + c1 ( x . nos falta ahora evaluarlo en el punto requerido.xn )c1 )). a=5.x n ) + c2 )( x .x2 ) L ( x .x1 )( x . basta con darle carácter vectorial a las instrucciones. o sea.x = (L ((c1 ( x .x1 ) + cn -1 ( x .x2 )(cn-1 + .x1 )(cn + ( x . v=v*(a-X(1))+p(1) v = 125 Valor que coincide con el obtenido en el Ejemplo 3. Evaluación del polinomio de Newton Para evaluar el polinomio de interpolación en un punto dado x = a tendremos en cuenta la expresión anidada del polinomio: Pn ( x ) = cn +1 + cn ( x . Ejemplo 8 Evalúa el polinomio de interpolación de grado 3 que has obtenido en el ejemplo anterior para estimar el número de piezas producidas por los empleados al cabo de 5 horas trabajadas: Expresemos el polinomio de grado 3 en su forma anidada. plot(t. en lugar de interpolando.. v=p(4).a. Cuando x no está en el menor intervalo determinado por x1.*(a-X(2))+p(2). v=v. el polinomio interpolador más adecuado es de grado k.. v=v. por ejemplo... la recta que pase por los dos puntos más próximos a x. xn . v=v. v=v. v=v.. x2. i.. hasta alcanzar la precisión deseada. . b] y los xi's están uniformemente distribuidos en [a. n + 1. . xn+1. i = 1. pues se tiene que f ( n +1) (η ) f [ x1 .….t(4)). L .e. Esta expresión sugiere una regla práctica para decidir qué polinomio interpola mejor n+1 puntos..*(a-X(1))+p(1) v = 93 125 77 Representemos el polinomio: a=linspace (t(1). por ejemplo.*(a-X(3))+p(3).v) Proponemos en el problema 4 la generalización de este razonamiento para obtener el valor numérico mediante una función de MATLAB.*(a-X(3))+p(3). Los productos que aparecen en la fórmula del error nos indican que éste puede ser muy grande si hay muchos puntos o si x no está muy próximo a ellos. xi = a + ( i -1) h. xn +1 ] = (n + 1)! para cierto η en el menor intervalo que contiene a x1. xn+1. que suponemos casi nulas. La razón es que el error viene dado por diferencias divididas de la columna siguiente. b] . Si f(x) es una función en [a. los valores de la columna k.. y vamos añadiendo puntos por orden de proximidad y calculando polinomios de mayor grado.T. estamos extrapolando.a=[3 5 7]. .*(a-X(1))+p(1). La derivada que aparece en la expresión anterior puede aproximarse a su vez por un cociente en diferencias.'*'. Error de interpolación Teorema: Si pn ( x) interpola a la función f(x) en los puntos distintos x1. comenzamos con un polinomio de grado bajo. Si en la tabla de diferencias divididas. v=v. Entonces para cualquier x en I existe un η entre x y los xi's tal que: f ( x) − Pn ( x) = f ( n +1) (η ) ( x − x1 )( x − x2 )L ( x − xn +1 ) (n + 1)! Una consecuencia práctica de la forma del error es que hemos de tomar puntos próximos al punto x en que hemos de evaluar el polinomio. Normalmente.. v=p(4). son aproximadamente iguales y los de la columna k+1 son aproximadamente cero.*(a-X(2))+p(2).xn+1 y f tiene derivadas continuas hasta orden n en un intervalo I que contiene a los xi's... k+1. x2. Según la expresión del error para este caso:  h n +1  max ( n +1) ( x) f ( x) − pn ( x) ≤   x∈[ a . podemos generalizar max f ( n +1) ( x) ≤ 1 y decir que para cualquier valor de n el error está acotado por x∈[ a . hay convergencia. entonces el error de interpolación tiende a cero según h se va acercando a cero. sobre todo cerca de los extremos. la interpolación polinómica con nodos equiespaciados puede resultar inadecuada. y para la exponencial exp(x) en un intervalo finito.b ] max f ( n ) ( x ) ≤ M donde M es una constante independiente de n. El ejemplo clásico de este mal comportamiento en las derivadas es la función de Runge como vemos a continuación: Nodos de Chebyshev Cuando una función tiene características muy diferentes a los polinomios.b ] f  (n + 1)!  De modo que si x∈[ a .entonces se puede demostrar que:  h n +1  max ( n +1) ( x) f ( x) − pn ( x) ≤   x∈[ a . el aumento del grado empeora el resultado en vez de mejorarlo.5]: y= 1 1 + x2 4 Los polinomios que interpolan sus valores en puntos equiespaciados de este intervalo se desvían bastante de la función. . por ejemplo para las funciones trigonométricas sin (x) y cos(x).0159 4 24  4  Esta propiedad (derivadas de todo orden acotadas uniformemente) no la poseen todas las funciones. Este es el caso.e.. i. Ejemplo 9 Halla la cota del error al aproximar la función sin(x) con nodos equiespaciados en [0. Consideremos la función de Runge en el intervalo [−5.π ] por el polinomio interpolador de tercer grado.b ] f  (n + 1)!  como la derivada n-ésima de la función está acotada por la unidad.b ]  h n +1  f ( x) − pn ( x) ≤    (n + 1)!  π 1 π  en particular para n = 3 y h = será: E ≤   = 0. 5 0 -5 0 5 0 -5 0 5 .5 0 -0. Para minimizar el error es conveniente tomar nodos de interpolación especiales.5 -5 2 0 -2 -4 -5 Interpolación con nodos equiespaciados Grado 4 Grado 8 1 0 -1 -2 -5 5 0 -5 -10 0 5 -15 -5 0 5 0 Grado 12 5 0 Grado 16 5 Observamos que el error máximo en el intervalo aumenta con el grado del polinomio interpolante.5 -5 1 Grado 8 0 Grado 12 5 0 Grado 16 5 0.5 0.5 -5 1 1 0.5 0 -0. Interpolación con nodos de Chebyshev Grado 4 1 0.1 0.5 0 -0. en lugar de los nodos equiespaciados considerados hasta ahora. por ejemplo sin(x).. podemos considerar funciones racionales. b) Edita una función en MATLAB para evaluar el polinomio de interpolación de Lagrange en un punto dado y ejecútala para obtener el valor numérico del polinomio anterior en x = 13. disponer de una calculadora no era nada fácil. Compara el resultado con el obtenido mediante interpolación cuadrática.. estos nodos son  2(n − (i − 1)) + 1  xi = 5cos  π. Problemas 1. para evaluar las funciones trigonométricas. funciones definidas por intervalos. En las gráficas se aprecia la reducción del error al interpolar la función de Runge en los nodos de Chebyshev.. 2. Otra alternativa puede ser interpolar mediante funciones de otro tipo. etc.Los llamados nodos de Chebyshev hacen mínimo. 3.La solubilidad del cloruro amónico en el agua toma. n + 1. Para el caso particular del intervalo [−5. . no tantos como imaginas.. En lugar de polinomios.5]. 2. en un intervalo dado.. el valor máximo del polinomio ( x − x1 )( x − x2 ) L ( x − xn +1 ) que aparece en la expresión del error..Hace unos años.Las diferentes contracciones de un resorte dependiendo de las cargas aplicadas vienen dadas en la siguiente tabla: Carga (Kp) 5 10 15 20 25 Contracción (mm) 49 105 172 253 352 a) Escribe el polinomio de Lagrange de grado 2 para estimar la contracción producida por una carga de13 Kp. como veremos en temas posteriores. los valores siguientes: Temperatura 10 20 30 40 50 60 Solubilidad 33 37 42 46 51 55 Utiliza interpolación lineal para estimar la solubilidad del compuesto a una temperatura de 45º. compara el resultado con el obtenido al utilizar todos los puntos para obtener el polinomio de interpolación y en ambos casos halla el error cometido utilizando el valor que proporciona MATLAB. 2n + 2   i = 1... se disponía de tablas del siguiente tipo: 0' 10' 20' 30' 40' 50' 45 7071 7092 7112 7133 7153 7173 46 7193 7214 7234 7254 7274 7294 47 7314 7333 7353 7373 7392 7412 48 7431 7451 7470 7490 7509 7528 Halla mediante interpolación lineal el seno de 47º 34'. a distintas temperaturas. -Utiliza la función de MATLAB que has programado en el problema 4 para obtener las gráficas de los polinomios de interpolación que aparecen en el apartado de teoría de Nodos de Chebyshev para aproximar a la función de Runge tanto con nodos equiespaciados como con nodos de Chebyshev. Nota: Los nodos de Chebyshev se han dado en el intervalo [-5.La emisora de radio de la UPV ha determinado. lo mostramos en la siguiente tabla: Horas 6 7 8 9 10 11 12 Oyentes (%) 0.. 5. el porcentaje de ciudadanos que la sintonizan entre las 6 de la tarde y las 12 de la noche.1 0. lo evalúe en una serie de puntos y lo represente junto a los puntos de interpolación dados.4. 6. hemos de obtenerlos ahora en [0. donde t indica el tiempo en días: 1000 f (t ) = 2 + 999e −2.11 Construye la tabla de diferencias divididas para estos valores y expresa de forma completa el polinomio de Newton que consideres más adecuado para estimar el porcentaje de oyentes a las 9:30 de la noche.25 0.1] usa el resultado anterior para demostrar que: max e x − pn ( x) → 0 cuando n → +∞ 0 ≤ x ≤1 . Demuestra que q ( x ) ≤ n !h n +1 x1 ≤ x ≤ xn +1 x Si pn ( x) ) es el polinomio interpolador de f ( x) = e en [0.5].6 y 8.-Considera el polinomio q ( x) = ( x − x1 )( x − x2 ) L ( x − xn +1 ) para nodos igualmente equiespaciados una distancia h. b) Calcula ahora los polinomios de interpolación tomando nodos de Chebyshev.. tomando nodos equiespaciados.-El número de personas afectadas por el virus contagioso que produce la gripe en una determinada población viene dado por la siguiente función.15 0.7] por polinomios de interpolación de grados 4. 8.Edita una función en MATLAB para que a partir de los puntos de interpolación construya la tabla de diferencias dividas y obtenga como parámetro de salida los coeficientes del polinomio de Newton.3 0. para ello edita una función en MATLAB que vaya calculando los sucesivos polinomios de interpolación tomando nodos de Chebyshev hasta que el error global dado por la expresión: 1 100 E2 = ∑1 ( f ( t k ) − p ( t k ) ) 2 101 k= sea menor que una décima. 7.1t a) Aproxima esta función en [0.7].12 0. Representa la función junto al polinomio para comprobar que en los extremos del intervalo el error es considerable. sabiendo que existe una correspondencia biyectiva entre los dos intervalos.2 0. por medio de encuestas. a) n=length(x).y. yn=[172 105 253].-. function v=lagrange(x.yn.. posteriormente en otra función procedemos a evaluar este polinomio utilizando su forma anidada como vimos en el Ejemplo 8.Editamos en primer lugar una función para crear la tabla de diferencias divididas y así obtener los coeficientes del polinomio de Newton de forma análoga a como lo hicimos en el Ejemplo 7. 3/2]. a) Considera como nodos de interpolación los puntos xk = k ⋅ α ./(prod(xi-xn)). . ± 1. xn=[x(1:i-1) x(i+1:n)]. Construye la tabla de diferencias divididas y justificar el comportamiento de los coeficientes de interpolación. b) Representa gráficamente la diferencia entre el polinomio de grado 5 y la función interpolada en [−3/2. finalmente representamos el polinomio mediante una función que llama a estas dos.13) v = 143. d) Toma como nodos de interpolación los puntos xk = 3 α sen(kπ / 6) . tomando 150 intervalos. precisamente en este orden. end xn=[15 10 20]. no obstante como práctica de programación es interesante pensar el algoritmo que nos proporcionaría la evaluación de estos polinomios. ± 2. Se desea aproximar la función tg x en el intervalo [−3/2. hallar el α óptimo y el error máximo.9.%grado pol n-1 v=0. Compara con el error obtenido con nodos equiespaciados.5200 4. v=lagrange(xn.172) y (20. para k = 0. Soluciones 3. ¿Cuál es el error máximo apreciado en la tabla de valores? c) Halla un valor de α que minimice el error máximo.3/2]. 253) el polinomio de Lagrange será de la forma: ( x − 10)( x − 20) ( x − 15)( x − 20) ( x − 15)( x − 10) P ( x ) = 172 + 105 + 253 2 (15 − 10)(15 − 20) (10 − 15)(10 − 20) (20 − 15)(20 − 10) b) Para evaluarlo se requieren realizar numerosos cálculos y puede acumularse error de redondeo por lo que este tipo de polinomio no suele ser muy utilizado. for i=1:n xi=x(i). que son (10. l(i)=(prod(a-xn)). v=v+y(i)*l(i). (15.a) Elegimos los tres nodos más cercanos a x = 13. ± 3 . x=[x(1:i-1) xi x(i+1:n)].. Explica el procedimiento seguido en su determinación. 105). A(k-1:n-1.xf). xp=linspace(x(1).xp) plot(x. y=feval('f'.yp) end Ahora con nodos de chebyshev clear x .yf./ (x(k:n)-x(1:n-k+1)).y) %parámetros de entrada: x e y son los puntos de interpolación %A es la matriz de diferencias divididas de Newton %parámetro de salida: p son los coeficientes del polinomio de Newton n=length(y). for k=n:-1:1 y=y./(1+x.function p =tabladd(x. j=1.k-1). end y=polynw(p.k-1)).2.n). plot(x.xf. for k=2:n A(k:n.-Editamos una función para evaluar la función de Runge. end p=diag(A).y) p=tabladd(x.5.y').x.xp. y=p(n+1). yf=feval('f'.nodo.1)=y.x) %p es el vector de coeficientes del polinomio %nodo son las abscisas de los puntos de interpolación %evalúa el polinomio de Newton en el punto x n=length(p)-1. Mediante distintas llamadas a las funciones anteriores obtenemos los polinomios que aproximan a la función de Runge en el primer caso tomando nodos equiespaciados y en el segundo con nodos de Chebychef xf=linspace(-5.5).i).x.yp) 5.'*'. function y=f(x) y=1. p=tabladd(x'.y.k)=(A(k:n.'*'.nodo. yp=polynw(p.^2). function y=polynew(p. for i=5:4:17 x=linspace(-5.*(x-nodo(k))+p(k). subplot(2.xf. yp=polynew(p.y.xf).x) function repnew(x. A(:. A=zeros(n.x).y).x(length(x)).j) j=j+1. 1] end xc=(x+1)/2*7. E=sum((yg-yp). yg=feval('gr'. E=1. j=1.x.xg).^2)/100.xf).xf). yp=polynew(p.j) j=j+1. n=1.1*t)). plot(x. for i=4:4:16 for k=1:i+1 x(k)=5*cos(((2*(i-(k-1))+1)/(2*i+2))*pi).xc).7] yc=feval('gr'. subplot(2.yf.2.. yf=feval('f'. p=interpol(xc'.yp) end 7.y.% nodos de Chebyshev en [-1./(2+999*exp(-2.x). p=tabladd(x'.xf.'*'.7). Interpolamos con nodos de Chebyshev: clear x xg=linspace(0. n=n+1. end E E = 0. yp=polyval(p. end y=feval('f'.5).xf=linspace(-5.y'). while E>0.b) Escribimos el código de la función: function y=gr(t) y=100.yc').1 for i=1:n+1 x(i)=cos(((2*(n-(i-1))+1)/(2*n+2))*pi).xf.0344 Polinomio de interpolación de grado 10 60 50 40 30 20 10 0 0 1 2 3 4 5 6 7 .xg).% nodos de Chebyshev en [0. 0000 120.0000 60. >> plot (x. >> y = [395.. >> plot (x. >> A = [x.10. >> xn = linspace(5.INTERPOLACION POLINOMICA ejemplo del muelle: >> x = [5 10 15]'. 620.15..15).xg. >> xd = x-10.txt..txt PRACTICA 10 . >> Ad = vander(xd).0000 >> %p(x) = -x.^2 x x.xg). xn-10). >> yg = polyval(p.^2 + 60x + 120 >> xg = linspace(5. 795]. y = [395 620 795]'.xn.10).txt. >> cond(Ad) ans = 35.^0] A= 25 5 1 100 10 1 225 15 1 >> p = A\y p= -1..y.'*'.4120 >> pd = Ad\y. yg) >> %Desplazando el origen >> clear >> x = [5.%20-%20Interpolacion%20Polinomica/practica%2010.'*'.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat. >> vpd = polyval(pd. vpd) >> %la grafica resultante./Practica%2010%20-%20Interpolacion%20Polinomica/practica%2010.15].y. es la misma >> %pero se ha calculado con operaciones mas estables ---------METODO DE NEWTON file:///E|/Documentos/Estudios/Documentacion%20Asignatu.txt (1 of 3) [09/03/2008 13:49:25] . 6.y.txt.0000 60.0000 >> >> polyval(p.0000 >> >> [pn.0000 1.. y = [114 116 62 8]'.0000 -6./Practica%2010%20-%20Interpolacion%20Polinomica/practica%2010. >> A = vander(x) A= 25 5 1 100 10 1 225 15 1 >> p = A\y p= -1.0000 120.txt (2 of 3) [09/03/2008 13:49:25] .2500 v= 62 Recuerda que Newton no devuelve los coeficientes del polinomio Para evaluar el polinomio que devuelve newton se utiliza el parametro z de la propia funcion >> x = [5 10 15]'.y.v] = pnewton(x.%20-%20Interpolacion%20Polinomica/practica%2010.txt.2500 -1.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat.8]'.v] = pnewton(x.1) pn = 395 45 -1 v= 179 file:///E|/Documentos/Estudios/Documentacion%20Asignatu..2) p= 114..txt >> x = [4.2. y = [395 620 795]'..1) ans = 179. >> [p. y. y = [62 114 116 8]'.x. >> z = linspace(2.z).y.y.txt (3 of 3) [09/03/2008 13:49:25] . >> plot(z. >> plot(z.'*') ej de las transparencias >> x = [2 4 6 8]'.v.15)..txt representacion gráfica >> z = linspace(5. >> [pn..txt.x.z).v] = pnewton(x..v] = pnewton(x.'*') file:///E|/Documentos/Estudios/Documentacion%20Asignatu.txt.8). >> [pn..v.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat.y./Practica%2010%20-%20Interpolacion%20Polinomica/practica%2010.%20-%20Interpolacion%20Polinomica/practica%2010. Los sistemas de manipulación remota como éste y otros muchos utilizan un avanzado sistema de control que guía un brazo manipulador hacia posiciones predeterminadas.1Interpolación Polinómica Segmentaria Lineal La interpolación polinómica ordinaria presenta inconvenientes cuando hay muchos nodos y la función no se parece mucho a un polinomio. Sin embargo. que incluía el sistema de manipulación remota canadiense: Canadian Mobile Servicing Center. la interpolación polinómica segmentaria cúbica cumplirá nuestras espectativas definiendo una trayectoria suave que se ajuste a los puntos predefinidos y sin las grandes oscilaciones de los polinomios interpolantes de grado superior. el aumento del número de nodos (y consiguientemente. es decir. La interpolación polinómica segmentaria nos permitirá definir una curva suficientemente suave (contínua. sin derivabilidad en los nodos. . por ejemplo funciones racionales como la de Runge o funciones periódicas como el seno o el coseno. En la práctica anterior hemos visto que al interpolar la función de Runge. provoca mayores oscilaciones del interpolante e inestabilidad en el cálculo. En contrapartida. Uno de los requisitos de dicho sistema de control es el diseño de una trayectoria para que el brazo se mueva de un sitio a otro de manera que se eviten movimientos bruscos que puedan causar que se desprendan los objetos transportados o incluso que se dañe el propio brazo robótico. las condiciones de interpolación se satisfacen localmente. Dicha trayectoria se diseña inicialmente en términos de un cierto número de puntos hacia los que debe moverse el brazo. pero sin "suavidad". utilizando polinomios distintos en cada intervalo. El caso lineal nos permitirá un ajuste contínuo en los puntos con pocas operaciones.11 Interpolación Polinómica Segmentaria Podemos ver en la figura la puesta en órbita del primer elemento de la estación orbital internacional. 11. del grado del polinomio) en lugar de proporcionar más precisión. Debe encontrarse una curva que pase por todos esos puntos y que además sea lo más suave posible. Los polinomios no son adecuados para aproximar ciertos tipos de funciones. de manera que no se produzcan daños en el brazo. La interpolación polinómica segmentaria evita estos inconvenientes limitando el grado del polinomio. diferenciable) para este y otros propósitos. h = 2/n... En cambio. n+1.. n La función interpolante s se denomina spline. Evitamos las esquinas considerando polinomios de mayor grado en cada subintervalo. que es de grado 3 en cada subintervalo. qk(xk+1) = yk+1. 2.. Ejemplo 1 Obtengamos estos vectores con MATLAB para la función de Runge en el intervalo [-1. 2. k = 1. splines completos y splines no nodo. yk+1). Analizaremos los llamados splines naturales. porque se adaptan a los nodos prescritos sin oscilar demasiado en puntos intermedios. El resultado es una línea quebrada. qk(xk) = yk proporciona directamente ak ak = yk .. k = 1. obtenemos la fórmula para bk y − yk . el segmento de recta que une los valores de la función en los extremos. en cada subintervalo. k = 1.% Ordenadas de Runge y(1:n)% y tiene n+1 componentes diff(y). si la función oscila mucho. …. 2. . Para determinar el spline cúbico. la obtención de los splines es numéricamente estable y puede hacerse utilizando matrices dispersas (véase el código de la función spline de MATLAB).% Tomamos 10 subintervalos [-1:h:1]./(1 + 25*x. k = 1. Análogamente. Los splines cúbicos ofrecen un buen equilibrio entre dificultad de cálculo y apariencia suave del resultado.Dada una función f o un conjunto de pares de valores (xk.. yk) y (xk+1 .. poco agradable estéticamente. 2. aludiendo a unas reglas elásticas que se usan en delineación. En cada subintervalo hemos de determinar los coeficientes ak y bk para que la recta de ecuación qk ( x ) = ak + bk ( x − xk ) .. x ∈ [ xk . El caso más simple de interpolación polinómica segmentaria consiste en tomar. xk +1 ] . k = 1. n pase por los puntos (xk . yk). n bk = k +1 xk +1 − xk Para aplicar estas fórmulas con MATLAB conviene considerar los coeficientes ak como componentes de un vector a. 1 + 25 x 2 n x y a b = = = = = 10. se necesitan un par de condiciones adicionales. 2. Los distintos trozos se ensamblan suavemente si se toman los polinomios de grado suficiente.. n Imponiendo la condición de interpolación en el extremo derecho... El polinomio de interpolación es muy sensible a pequeñas variaciones en los datos./diff(x) a = . Los splines son muy utilizados en diseño.. La interpolación segmentaria lineal utiliza polinomios de primer grado para construir el spline.% Abscisas 1. La condición de interpolación en el extremo izquierdo de cada intervalo. determinaremos una función s que pasa por los puntos dados y que en cada intervalo [xk.^2).. que dan lugar a distintos tipos de spline. los coeficientes bk serán las componentes de un vector b.1]: 1 f ( x) = .. xk+1] es un polinomio s ( x ) = qk ( x ) .. 0588 0.2000 0.1018 0. evaluar qk(x) según su fórmula.5000 1.ys) .0588 Para evaluar el spline. se necesitan los nodos. MATLAB automatiza estas tareas mediante las órdenes que veremos a continuación. bk del polinomio correspondiente y ya. por fin.1000 0.2 Funciones de MATLAB para Splines MATLAB dispone de varias funciones específicas para calcular splines y evaluarlos.5000 -0. Si hemos calculado ya los coeficientes.5000 1.1018 1.1000 0.5000 0. s = [b' a']% De mayor a menor grado s = 0.2059 0.0000 0.5000 -2.2000 0. xg = (-1:. usando ppval en lugar de polyval. Representemos gráficamente la aproximación segmentaria lineal de la función de Runge. lo primero que hacemos es unirlos en una matriz. Con ambos datos.1018 0. su evaluación en un punto x requiere un poco de trabajo: determinar a qué intervalo nodal [xk.0588 through 10 0.xg).2000 0. elegir los coeficientes ak.Columns 1 0. ps = mkpp(x.1000 0.005:1)'.1018 Columns 8 -0. Afortunadamente.'*'. xk+1] pertenece el punto x.5000 -0.2059 0.yg.xg. yg = 1.5000 Una vez obtenidos los coeficientes del spline. además de los coeficientes.s) La evaluación del spline en esta forma recuerda a la de un polinomio ordinario.5000 2.2000 b = Columns 1 0.0588 0.5000 2. ys = ppval(ps.0385 0.0000 0.xg.5000 -1. plot(x.5000 through 7 0.5000 1.y.^2)./(1+25*xg.5000 through 10 -0.5000 through 7 0. 11.5000 -2.5000 -1.0385 Columns 8 0.1000 0.2059 -0. la función mkpp (make piecewise polynomial) crea un vector con toda la información relativa al spline.2059 -0. Por ello. pero el ataque directo da poca información sobre cómo resolverlo.. mientras que el spline se ajusta mejor. En segundo lugar. < xn+1. yk).2 0. K . con x1 < x2 < . 2 3 qk ( x ) = ak + bk ( x − xk ) + ck ( x − xk ) + d k ( x − xk ) . 11. Para determinar el spline. 2. por ejemplo.6 0. n − 1 ′′ ′′ qk ( xk +1 ) = qk +1 ( xk +1 ).6 -0.3 Interpolación Polinómica Segmentaria Cúbica El spline cúbico elimina dos problemas de la interpolación lineal: su lentitud de convergencia y el que presenta ángulos en los nodos.9 0. 2. k = 1.5 1 0. mientras que las condiciones anteriores sólo proporcionan 4n–2 ecuaciones. k = 1. Este procedimiento tiene dos desventajas. las condiciones de conexión nos permitirán plantear un . Así obtenemos un sistema de ecuaciones lineales que deben verificar los coeficientes. Consideraremos el caso de grado 3. n qk ( xk +1 ) = yk +1 . Empleando polinomios de mayor grado se obtienen splines que sí lo son. pero no es derivable en los nodos.2 0. n y sustituir esta expresión en las condiciones anteriores.. procederemos de otro modo: obtendremos los coeficientes del spline en función de la derivada segunda del spline en los nodos.8 0. k = 1.2 0 0.4 -0. hallaremos splines cúbicos s ( x ) = qk ( x ) . n que verifiquen las siguientes condiciones de interpolación qk ( xk ) = yk .8 -0. el sistema tiene 4n incógnitas. K . empleando las condiciones de interpolación.. 2.8 1 2 1.5 0. K . esta indeterminación es intrínseca al problema. lo cual es inadecuado en ciertas aplicaciones. x ∈ [ xk . n y también las condiciones de conexión ′ ′ qk ( xk +1 ) = qk +1 ( xk +1 ). 2.5 0 -0. Primero. k = 1. 2. 2. K . xk +1 ] . k = 1.4 0. produce un sistema con ancho de banda innecesariamente grande y cuyos coeficientes pueden oscilar en varios ordenes de magnitud.2 0 0.4 0...4 0. ….8 -0.1 0 -1 -0.6 -0. yk).5 -1 -0.4 -0. observamos que este último presenta más oscilaciones. Un spline cúbico es una función polinómica segmentaria de grado 3 con derivada primera y segunda continuas.8 1 Comparando el spline lineal con el polinomio de grado 10 que interpola los mismos nodos..2 0.. k = 1. Obviamente.6 0. n − 1 Las primeras condiciones establecen que s es continua e interpola los puntos (xk . Las segundas implican que s tiene derivadas primera y segunda continuas..7 0..1 0. 2. sobre todo en los extremos del intervalo.. Dados n + 1 puntos (xk . n+1.6 0.3 0. podemos escribir cada polinomio componente de forma adecuada. A continuación. k = 1. 2. por tanto.. 2. r ck = k 2 r −r d k = k +1 k 6hk Veamos cómo obtener los otros dos coeficientes. La primera condición de interpolación proporciona directamente el valor de ak... n ′′ qk ( xk ) = rk ′′ qk ( xk +1 ) = rk +1 Como la derivada segunda de qk es de primer grado. n 2 6hk donde ak y bk son constantes a determinar. qk ( xk ) = ak = yk La condición de interpolación en el extremo derecho proporciona r r −r qk ( xk +1 ) = ak + bk hk + k hk2 + k +1 k hk2 = yk +1 2 6 De las dos expresiones precedentes obtenemos el valor de bk: y − yk  rk +1 rk  r  r bk = k +1 − +  hk = ek −  k +1 + k  hk 3 3 hk  6  6 Una vez expresados todos los coeficientes en función de las rk. rk) y (xk+1. para k = 1. 2. 11. .. k = 1. n–1.... su ecuación es la de la recta que pasa por los puntos (xk. Esta expresión proporciona directamente los coeficientes ck y dk del polinomio qk en función de las derivadas segundas rk. k = 1. .sistema lineal de ecuaciones. volvamos al cálculo de estos valores.. para k = 1.. n hk donde hk = xk+1 – xk. . k = 1. 2... la coincidencia de las derivadas primeras en los nodos interiores: r −r ′ qk ( xk +1 ) = bk + rk hk + k +1 k hk 2 ′ qk +1 ( xk +1 ) = bk +1 Igualando tenemos rk + rk +1 hk = bk +1 − bk 2 Sustituyendo las expresiones de los bk y agrupando los coeficientes de rk queda ...1 Determinación de las derivadas segundas del spline Supongamos por un momento que conocemos los valores rk de las derivadas segundas del spline en los nodos s′′ ( xk ) = rk . el valor de los coeficientes del spline. n + 1 Entonces. Sólo falta imponer. ..3.. La ecuación de partida presupone la continuidad de la derivada segunda. cuya resolución proporcionará el valor de la derivada segunda en los nodos y. Integrando dos veces obtenemos r r −r qk ( x) = ak + bk ( x − xk ) + k ( x − xk ) 2 + k +1 k ( x − xk )3 . Ya hemos utilizado las condiciones de interpolación.. rk+1): r −r ′′ qk ( x) = rk + k +1 k ( x − xk ). 2. por lo que hacen falta dos condiciones adicionales para que tenga solución única. quedarán (n-2) ecuaciones y (n-2) valores de la derivada segunda por averiguar. dando lugar a distintos tipos de spline.. La elección de estas condiciones puede hacerse de varias formas. 11. . Las ecuaciones obtenidas se expresan matricialmente como Mr=g donde r es la columna de incógnitas. pasamos r1 y rn+1 al segundo miembro de las primera y última ecuaciones. 11.4.. n − 1 6 3 6 que es un sistema lineal de n–1 ecuaciones con n+1 incógnitas. Veamos la estructura de la matriz del sistema y los términos independientes. la matriz del sistema es h2  h1 h1 + h2  6  3 6   h2 + h3 h3 h2     6 3 6   h3 h3 + h4 h4   M =  6 3 6   O O O   hn − 2 hn − 2 + hn −1 hn −1     6 3 6   hn −1 hn −1 + hn hn    6 3 6   y el vector de términos independientes  e2 − e1   e −e   3 2   e −e  g =  4− 3  M   en −1 − en − 2     en − en −1    El sistema tiene dos ecuaciones menos que incógnitas.. Así. 2.hk h +h h rk + k k +1 rk +1 + k +1 rk + 2 = ek +1 − ek . k = 1.1 Derivadas segundas del spline natural Si las derivadas segundas en los extremos son conocidas. . podemos definir un spline fijando de antemano el valor de la derivada segunda en el primer nodo y en el último.4 Splines naturales Si en el anterior sistema de ecuaciones lineales eliminamos dos de las incógnitas. los rk. que quedarán como h1 + h2 h h r2 + 2 r3 = e2 − e1 − 1 r1 3 6 6 hn −1 h +h h rn −1 + n −1 n rn = en − en −1 − n rn +1 6 3 6 El sistema resultante es tridiagonal simétrico y se resuelve por eliminación gaussiana con O(n) operaciones sin necesidad de pivotación parcial. tomando 7 nodos 2 equiespaciados en el intervalo [ −2π .0000 2. este spline no es especialmente recomendable. la función a interpolar no tendrá derivada segunda nula en los extremos.3660 0 1. Cuando las derivadas en los extremos son nulas el spline se llama natural.1888 -1. Ejemplo 2  x Halla el spline cúbico que interpola la función y = sin ( x ) + cos   . r1 = 0. 2π ] .n+1)% Nodos equiespaciados y = sin(x)+cos(x/2)% Valores a interpolar x = -6. rn1 = 0. . Determinemos en primer lugar los nodos y valores a interpolar n = 6.0944 1. h = diff(x).% Vector de pasos ds = h(2:n-1)/6.1888 0.h2  h1 + h2   3  6 h1     h2 + h3 h3  h2   r2   e2 − e1 − 6 r1    6    3 6 e3 − e2     r3   h3 h3 + h4 h4     r4   e4 − e3    = 6 3 6 M   M    O O O  e −e    r  n −1 n−2  hn − 2 hn − 2 + hn −1 hn −1   n −1    hn    rn     e −e − r  6 3 6  n n −1 6 n +1      hn −1 hn −1 + hn    6 3    Calculados los restantes rk.% Número de subintervalos x = linspace(-2*pi.2832 -1.2*pi. sabiendo que el valor de la derivada segunda en ambos extremos del intervalo es 0. al menos cerca de estos.3660 6. operando adecuadamente con los elementos del vector h. Obtendremos las restantes componentes de r resolviendo el sistema lineal que satisfacen las derivadas segundas. e imponer esta condición empeorará la aproximación.0000 Los valores de la derivada segunda en los extremos son las componentes primera y última del vector r.25. los coeficientes del spline se hallan aplicando las relaciones obtenidas anteriormente.% Diagonales secundarias dl = h(1:n-1)/3.0944 -0.25. dr = h(2:n)/3.2832 y = -1. A pesar de su nombre. Construimos su matriz por diagonales.0000 -4. pues en general.25.3660 -2.3660 4. Al pasar al segundo miembro los términos correspondientes a r1 y rn+1 queda un sistema cuadrado de orden n–1 con matriz tridiagonal simétrica. 3491 0 0 0 0.6522 g = -1.r.4775 0.0018 -0./h g = diff(e) e = 0.3491 0 0 0 0.4792 1.3491 1. rk.-1) + diag(ds.3495 1.3491 1.0018 1.2727 -1.2727 -1.dp = dl+dr.3491 1.4792 -1.0018 -0.4775 -1.3920 Ya podemos resolver el sistema lineal para obtener los valores desconocidos de las segundas derivadas.h(n)*rn1/6 g = -1.% Diagonal principal M = diag(dp) + diag(ds.4792 1.3232 .4792 0.3963 0.1) M = 1.3277 r = [r1.0890 g = -1.3232 1.h(1)*r1/6 g(n-1) = g(n-1) .0460 -0.3963 0.0018 0.6522 -0.2500 -1.4775 -0.4792 -1.0415 1.3491 1.0415 1.3963 Los términos independientes se obtienen fácilmente con el comando diff e = diff(y).1748 Si las derivadas segundas no son nulas. r = M\g' r = -1. hay que ajustar el primer y el último elementos de g: g(1) = g(1) .3963 0.3045 1.0890 1.rn1] r = 0.0460 -0.1748 -1.3963 0.3491 0 0 0 0.3491 0 0 0 0. 1.3277 0.2500 11.4.2 Coeficientes de los polinomios qk(x), k = 1, 2, ..., n Una vez obtenidas las derivadas segundas, aplicamos las fórmulas de los coeficientes de los polinomios interpolantes. rl = r(1:n);rr = r(2:n+1); a = y(1:n)'; b = e' -(rr + 2*rl).*h'/6; c = rl/2; d = diff(r)./h'/6; Ya sólo queda componer la matriz del spline y representarlo gráficamente, como en el caso lineal: s = [d, c, b, a] % Coeficientes de los qk ps = mkpp(x,s); % Codificación del spline xg = linspace(-2*pi,2*pi); % Abscisas para gráfico ys = ppval(ps,xg); % Evalúa el spline yg = sin(xg)+cos(xg/2); % Evalúa la función plot(x,y,'*',xg,yg,xg,ys,'-.')% Gráfico s = -0.1028 0.1661 -0.1049 -0.0836 0.2110 -0.0858 0.1250 -0.5207 0.5230 -0.1363 -0.6616 0.6639 0.8412 0.0124 0.0172 0.8270 -0.8442 -0.8394 -1.0000 0.3660 -0.3660 1.0000 1.3660 -1.3660 2 1.5 1 0.5 0 -0.5 -1 -1.5 -2 -8 -6 -4 -2 0 2 4 6 8 La gráfica muestra la excelente aproximación de la función mediante el spline calculado conociendo las derivadas segundas en los extremos. 11.5 Splines completos Si tenemos información de la derivada de la función en los extremos del intervalo, podemos obtener un spline cuya derivada tome estos valores. 11.5.1 Derivadas segundas del spline completo ′ ′ Sean y1 e yn estas derivadas. Entonces se ha de cumplir ′ ′ q1 ( x1 ) = y1 ′ ′ qn ( xn +1 ) = yn +1 Imponemos estas condiciones y expresamos los bk en función de los rk: r r  ′ y1 = b1 = e1 −  2 + 1  h1  6 3 r  r +r  r r +r  ′ yn +1 = bn +  n n +1  hn = en −  n +1 + n  hn +  n n +1  hn 3  2   6  2  Ordenando quedan dos ecuaciones en los coeficientes rk h1 h ′ r1 + 1 r2 = e1 − y1 3 6 hn h ′ rn + n rn +1 = yn +1 − en 6 3 que añadimos al sistema lineal para tener n+1 ecuaciones con n + 1 incógnitas. h1  h1  3  6   h2  h1 h1 + h2   r1   e1 − y0  ′ 6     3 6    r2   e2 − e1  h2 h2 + h3 h3    r3   e3 − e2    = 6 3 6    M   M  O O O    r  e − e  hn −1 hn −1 + hn hn   n   n n −1     r   y′ − e  6 3 6   n +1   n n    hn hn    6 3   El spline así obtenido se denomina spline completo. Ejemplo 3  x Hallaremos a continuación el spline completo de la función y = sin ( x ) + cos   , 2 tomando 7 nodos equiespaciados en el intervalo [ −2π , 2π ] , sabiendo que el valor de la derivada primera en ambos extremos del intervalo es 1. La matriz del sistema para el caso de condiciones sobre la derivada primera es fácil de construir: ds = h/6; % Diagonal secundaria dp = ([h';0]+[0;h'])/3; % Diagonal principal M = diag(dp) + diag(ds,-1) + diag(ds,1) M = 0.6981 0.3491 0 0 0 0 0 0.3491 1.3963 0.3491 0 0 0 0 0 0.3491 1.3963 0.3491 0 0 0 0 0 0.3491 1.3963 0.3491 0 0 0 0 0 0.3491 1.3963 0.3491 0 0 0 0 0 0.3491 1.3963 0.3491 0 0 0 0 0 0.3491 0.6981 De nuevo la matriz del sistema es tridiagonal simétrica y estrictamente diagonalmente dominante. El término independiente se expresa sencillamente como: e = diff(y')./h'; dy0=1; dyn=1; g = diff([dy0; e; dyn]) g = -0.3478 -1.0018 1.0018 -0.4775 -1.4792 1.4792 0.8252 siendo dy0 y dyn las derivadas en los nodos extremos. El sistema lineal proporciona ahora los valores rk de la derivada segunda en todos los nodos. r = M\g r = -0.0124 -0.9715 1.0287 -0.2736 -1.3023 1.2451 0.5595 Sustituyendo en las expresiones adecuadas calculamos los coeficientes del spline completo, ak, bk, ck y dk, exactamente igual que en el caso del spline natural. rl = r(1:n); rr = r(2:n+1); a = y(1:n)'; b = e - h'.*(2*rl + rr)/6; c = rl/2; d = diff(r)./h'/6; Formamos la matriz de coeficientes del spline: s = [d c b a] s = -0.0763 0.1592 -0.1036 -0.0062 -0.4858 0.5144 1.0000 -0.0304 0.0295 -1.0000 0.3660 -0.3660 -0.0819 0.2027 -0.0546 -0.1368 -0.6512 0.6226 0.8203 -0.8299 -0.8898 1.0000 1.3660 -1.3660 Una vez obtenidos los coeficientes, los pasamos al modo de polinomio segmentario: ps = mkpp(x,s) Evaluamos el spline y lo representamos: ys = ppval(ps,xg); plot(x,y,'*',xg,yg,xg,ys) 2 1.5 1 0.5 0 -0.5 -1 -1.5 -2 -8 -6 -4 -2 0 2 4 6 8 11.6 Splines no nodo Si no disponemos de información sobre el comportamiento de la función en los nodos extremos, en lugar de asignar arbitrariamente las derivadas primeras o segundas, una alternativa mejor es suponer que los dos primeros polinomios, q1 y q2, coinciden y los dos últimos, qn-1 y qn, también. Así obtenemos dos condiciones adicionales que hacen determinado el sistema lineal. Como q1 y q2 son de tercer grado y coinciden en x2, lo mismo que sus derivadas primera y segunda, sólo falta imponer que las derivadas terceras sean iguales: ′′′ q1 ( x2 ) = q′′′( x2 ) La derivada segunda de qk es de primer grado, por lo que su derivada es el cociente incremental ′′ q′′ ( x ) − qk ( xk ) rk +1 − rk ′′′ qk = k k +1 = xk +1 − xk hk Tomando k = 1, 2 y sustituyendo en la igualdad anterior obtenemos una ecuación lineal − h2 r1 + ( h1 + h2 ) r2 − h1r3 = 0 que añadirmos al principio del sistema. Análogamente, igualando las derivadas terceras en xn obtenemos otra ecuación lineal − hn rn −1 + ( hn −1 + hn ) rn − hn −1rn +1 = 0 que añadimos al final del sistema. Estas condiciones determinan un spline, llamado spline no nodo porque el polinomio interpolador no cambia al pasar por x2 y por xn. 11.7 Splines en MATLAB Recogiendo todas las operaciones efectuadas en los ejemplos de esta Práctica, no es difícil editar ficheros.m para obtener splines con condiciones naturales o condiciones sobre la derivada en los extremos. La función spline incorporada en MATLAB obtiene el spline no nodo. Calcula internamente los coeficientes de los polinomios y da el resultado ya en forma de polinomio segmentario, que se evalúa con ppval para su representación gráfica. ps = spline(x,y); ys = ppval(ps,xg); plot(x,y,'*',xg,yg,xg,ys,'-.') 2 1.5 1 0.5 0 -0.5 -1 -1.5 -2 -2.5 -8 -6 -4 -2 0 2 4 6 8 Los coeficientes de los polinomios se obtienen con la función unmkpp (unmake piecewise polynomial), que separa la información en un vector de nodos y una matriz de coeficientes. El proceso inverso, obtener el polinomio segmentario a partir de los nodos y los coeficientes del spline, se realiza con la función mkpp, ya utilizada previamente en varias ocasiones. [nodos, coefs] = unmkpp(ps) Si damos tres argumentos de entrada a spline, el tercero es tomado como abscisas en las que se evalúa el spline, y el programa devuelve las ordenadas correspondientes, en lugar de los coeficientes del polinomio segmentario. ys = spline(x,y,xg) MATLAB dispone asimismo de una función genérica para la interpolación segmentaria de funciones de una variable, interp1, que engloba la interpolación lineal y los splines cúbicos. Poniendo yl = interp1(x,y,xg) se obtienen las ordenadas correspondientes a xg que interpolan linealmente (x,y). Añadiendo como cuarto argumento la cadena 'spline', da el mismo resultado que la orden spline. ys = interp1(x,y,xg,'spline') Ejemplo 4 Las gráficas muestran distintas aproximaciones de la función de Runge 1 y= 1 + 25 x 2 obtenidas interpolando sus valores en 9 nodos equiespaciados en [–1,1]. La primera se obtiene con la función spline de MATLAB. x = -1:.5:1; % Nodos y = 1./(1+25*x.^2); % Valores xg = -1.1:0.05:1.1; % Abscisas para el gráfico yg = 1./(1+25*xg.^2); % Ordenadas ys = spline(x,y,xg); plot(x,y,'*',xg,yg,xg,ys) spline no-nodo 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 -1.5 -1 -0.5 0 0.5 1 1.5 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 -1.5 -1 -0.5 spline lineal 0 0.5 1 1.5 La interpolación segmentaria lineal de esta función, a la que corresponde la segunda gráfica, se ejecuta con las siguientes instrucciones: xl = -1:0.02:1; yl = interp1(x,y,xl); plot(x,y,'*',xg,yg,xl,yl) Los dos últimos gráficos muestran los splines obtenidos con condiciones naturales (considerando nulas las derivadas segundas en los extremos) y con derivadas primeras dadas en los extremos (aproximadamente 0.08 y - 0.08, para la función de Runge). spline natural 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 1 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 -1 -0.8 -0.6 -0.4 spline completo -0.2 0 0.2 0.4 0.6 0.8 1 El peor ajuste del primer gráfico en los extremos se debe a que, en el spline de MATLAB, los dos primeros polinomios coinciden, al igual que los dos últimos, y en este ejemplo sólo hay ocho intervalos. Ejemplo 5 Consideremos un brazo robótico como el que nos ha servido para introducir el tema. Tenemos almacenados en una tabla algunos puntos de la trayectoria del brazo; además, dichos puntos están en el orden necesario para que el brazo se mueva hasta una posición para coger un objeto y luego vuelva a la posición original. Supondremos también que los puntos intermedios incluidos en la trayectoria tratan de evitar choques del brazo o bien guiarlo hacia sensores que recogen información. Así, cada punto tendrá tres coordenadas: las coordenadas x e y relativas a la posición del brazo y una tercera componente, que denotaremos por acción, codificada del siguiente modo: Acción 0 1 2 3 Significado posición de partida posición intermedia posición de coger objeto posición de soltar objeto El problema consiste en diseñar una curva "suave" mediante interpolación cúbica segmentaria de manera que sirva de guía para que el brazo robótico, partiendo de un punto determinado, se mueva a una posición concreta para coger un objeto, lo deje en otra posición y vuelva al punto de partida. Estas posiciones, junto con otras intermedias, se ven reflejadas en la siguiente tabla: x y acción 0 0 0 2 4 1 6 4 1 7 6 2 12 7 1 15 1 3 8 -1 1 4 -2 1 0 0 0 En primer lugar representamos gráficamente dichos puntos conectándolos mediante rectas, lo que en la práctica supone una interpolación polinómica segmentaria lineal. x=[0 2 6 7 12 15 8 4 0]; y=[0 4 4 6 7 1 -1 -2 0]; plot(x,y,'*',x,y) 7 6 5 4 3 2 1 0 -1 -2 0 5 10 15 Observamos cómo esta aproximación, además de ser muy pobre, se traduce en movimientos excesivamente bruscos para un comportamiento eficiente de un brazo robótico. Se hace, por tanto, necesaria una trayectoria que permita al brazo moverse con suavidad de una posición a otra sin poner en peligro a los objetos que transporta. 7 6 5 4 3 2 1 0 -1 -2 0 5 10 15 t2).y. y2=y(coger:soltar) x3=x(soltar:fin). soltar=find(accion==3). t3=x(soltar):incr*sign(x(fin)-x(soltar)):x(fin). accion=[0 1 1 2 1 3 1 1 0]. Calculamos los splines no-nodo mediante el comando de MATLAB: s1=spline(x1. distribuidos del siguiente modo: t1=x(1):incr*sign(x(coger)-x(1)):x(coger).t3). el incremento en la variable x para definir el spline será la décima parte de esa distancia mínima. desde ese intante hasta que soltamos el objeto y. s2=spline(x2.ylabel('y'). al menos habrá 10 puntos de representación entre cada par de puntos de la tabla anterior. x1=x(1:coger).Para diseñar el spline cúbico dividiremos la trayectoria en tres trozos: desde la posición de partida hasta coger el objeto. y1=y(1:coger) x2=x(coger:soltar). por último. s3=spline(x3. y dibujamos la trayectoria resultante: plot([t1 t2 t3].y1. incr=min(abs(x(2:fin)-x(1:fin-1)))/10. x1 y1 x2 y2 x3 y3 = = = = = = 0 0 7 6 15 1 2 4 12 7 8 -1 6 4 15 1 4 -2 7 6 0 0 Para determinar el número de puntos que usaremos para representar los splines. y3=y(soltar:fin) . Así.y2.t1). Esta división es lógica puesto que el brazo ha de detenerse al final de cada una de estas trayectorias. desde que se suelta el objeto hasta que se vuelve a la posición original. xlabel('x'). fin=length(x). De este modo. coger=find(accion==2). t2=x(coger):incr*sign(x(soltar)-x(coger)):x(soltar).x.grid .'o') title('Recorrido del brazo articulado').[s1 s2 s3].y3. calculamos la distancia mínima entre los puntos conocidos en toda la trayectoria. Recorrido del brazo articulado 10 8 6 4 y 2 0 -2 -4 0 5 x 10 15 11. Siguiendo las instrucciones de la sección 11. d) .4.3]. ¿Cuál es el valor aproximado de la función en el punto x = 0.3]. ¿Cuál es el error cometido en cada caso? 2. 3. empleando nodos equiespaciados distribuidos en torno al punto a aproximar. c) Emplea un spline lineal para aproximar la temperatura a la misma hora. aproxima la temperatura en Valencia a las 8:45 de la fecha.8 Problemas 1. utilizando los mismos puntos que en el apartado anterior. calcula la aproximación a la función f ( x ) = x − cos ( x3 ) del problema anterior mediante un spline natural. empleando 10 puntos equidistribuidos en el intervalo [-3.75 en cada una de las aproximaciones?. Emplea para ello 10 puntos equidistribuidos en el intervalo [-3. empleando para ello: a) el polinomio interpolador de Newton de quinto grado. Aproxima el valor de la función f ( x ) = x − cos ( x3 ) definida en el intervalo [-3. d) ¿Qué temperatura marcarían los termómetros en Valencia a las 8:45 si la aproximamos mediante un spline natural?¿Y con un spline no-nodo? . en el punto x = 0. c) un spline no-nodo. cada dos horas.75. Se ha plasmado en una tabla la evolución. b) un spline lineal. de la temperatura en Valencia durante un día invernal: Hora 2 4 6 Grados 8 8 7 Hora 8 10 12 Grados 8 14 15 Hora 14 16 18 Grados 16 14 13 Hora 20 22 24 Grados 11 10 8 a) Representa gráficamente los valores de la tabla.3]. ¿Se observan mejoras respecto a los resultados obtenidos en el problema 1?. b) Mediante un polinomio interpolador de tercer grado. 8 ∆m -0. En la siguiente tabla se proporciona el valor de la ecuación de tiempos (en minutos y segundos) el día 15 de cada mes para un año determinado (bisiesto).45 t 0. b) Aproxima la magnitud aparente de δ Cephei en los instantes t = 0. suponiendo que la variación de la tempertura es nula en los instantes inicial y final del estudio. Representa gráficamente dicho spline. A continuacion motramos. Representa gráficamente la aproximación obtenida. x = 0. b) Compara las aproximaciones obtenidas en x = 0. En aras de una mayor simplicidad.33.89 0. algunos valores de la función error.7175 0. erf(x).11 0.56 -0. 5. 4..34 -0.8698 2. es decir en la rotación de la Tierra sobre su eje y en la traslación de ésta alrededor del Sol.2. en un periodo de tiempo t determinado. Siguiendo las instrucciones de la sección 11. La medición del tiempo se basa en las observaciones de la rotación diurna de la bóveda celeste y del movimiento anual del Sol. 0. Razona la respuesta. Las estrellas llamadas cefeidas se caracterizan por una variación en el tiempo suave y periódica de su brillo aparente.07 0..97 -0. c) ¿Varía sustancialmente la aproximación si se consideran únicamente los datos correspondientes a t = -0.5 0 0.05 mediante un spline no-nodo.43.2.1680 0. que proporciona la diferencia entre el tiempo solar medio y el tiempo solar verdadero en un mismo instante y lugar. ¿Consideras esta suposición razonable a la vista de los resultados obtenidos en el ajuste?.67 y t = 1.3 -0. junto con los datos tabulados.76 0.2 -0.1 0. 6. t = 0.25 -0. Para determinar la hora oficial de un lugar del que conocemos la posición del meridiano.9972 a) Utiliza los datos de la tabla para construir un spline cúbico (no-nodo) que aproxime la función error. tabulados.15 f(x) 0.27 0. t -0.3 -0.2 0.43..05 con los valores que MATLAB proporciona empleando la instrucción erf.05.2 ∆m -0.2974 0.6 0. se han numerado los días del año de forma consecutiva.8 0.7 0.92 y x = 2. x 0. En la siguiente tabla se proporcionan datos experimentales acerca de la variación de la magnitud ∆m de la estrella δ Cephei. ¿Cuál es la aproximación en cada caso.2?.7918 1. resulta necesario conocer el valor de la llamada ecuación de tiempos (Eq).67 y t = 1. calcula la temperatura en Valencia a las 8:45 horas mediante un spline completo.7 0.35 -0. 0.1 1. .94 -0.e) Representa gráficamente las curvas calculadas en los apartados anteriores.1 -0.9 1 1.5 -0. c) ¿Mejoran los resultados si empleamos un spline natural?¿y con un spline completo?. llamado magnitud visible.4 0. 1. que da nombre a este tipo de estrellas variables. .5.8 -0. empleando los datos de la tabla adjunta.6 -1 a) Representa gráficamente los puntos dados y el spline lineal calculado para aproximar la magnitud aparente de δ Cephei en los instantes t = 0. 7. t = 0.97 -0. b) Aproxima el valor de la ecuación de tiempos el 3 de mayo (día 124) mediante un spline lineal.8 3. y1 = [-0.5768 0. ¿Cuál es el error cometido teniendo en cuenta que el valor exacto es de -9m 57s? d) Representa gráficamente los splines obtenidos en los apartados anteriores.^3) x = y = -3. [yg. Día 15 46 75 106 Eq 9m 3s 14m 13s 9m 0s 0m 5s Día 136 167 197 228 Eq -3m 42s 0m 23s 5m 54s 4m 29s Día 259 289 320 350 Eq -4m 45s -14m 11s -15m 25s -4m 56s 11.p]=polynew(x.6000 -0.y. Utilizaremos el vector xg = -3:0.7079 -1.0]. para representar gráficamente el polinomio interpolador de Newton.0 -3.2921 -2.y1.9001 -2.0000 -2. en función de lo pedido en cada apartado: a) En primer lugar.8 -1.6999 -0.yg) .y. ya que el polinomio interpolador es de grado 5: x = -3:6/5:3 y = x-cos(x.x1.a) Representa gráficamente los datos tabulados.9001 3.05:3.5).'*'.6999 3.xg.3768 -1.6 1.8000 0.8000 -2.xg.5768 0.3] empleando distinto número de puntos. ¿Cuál es el error cometido teniendo en cuenta que el valor exacto es de -3m 8s? ¿Mejora un spline cúbico la aproximación?¿Cuál es el error cometido en este caso? c) Utiliza un spline cúbico para aproximar el valor de la ecuación de tiempos el 30 de septiembre (día 274).9 Soluciones Problema 1 Aproximaremos la función f ( x ) = x − cos ( x3 ) en el intervalo [-3. partimos de 6 puntos equiespaciados.6000 -1.2921 Reordenamos ambos vectores en torno al punto a aproximar: x1 = [0.0000 3.7079].3768 1. plot(x.6 -0. junto con la función a aproximar: ys = ppval(ps.6099 0.6099 2. a = y(1:n-1).yg.ys. n=length(x).7079 -3.3115 1.05:3./diff(x).xg.'*'.0000 1.4597 1.5403 -1. y = x-cos(x. creamos el vector ps con toda la información relativa al spline.7493 1.6660 0.3326 -0.'b'.^3).9241 2.s). s = [b' a']% De mayor a menor grado s = -0.% y tiene n+1 componentes b = diff(y).5840 -1. plot(x.y.3239 -1.9241 -2.^3).3427 Para evaluar el spline.xg.0655 0. xg = -3:0.9345 -0.6885 1.b) Para construir el spline lineal con diez puntos equiespaciados: x = -3:2/3:3.'g') .xg). ps = mkpp(x. Evaluamos el spline y representemos gráficamente la aproximación segmentaria lineal de la función. yg = xg-cos(xg. 5768 0. aunque todavía está lejos de ser una buena aproximación. d) Si evaluamos cada una de las aproximaciones en el punto x = 0.75 y calculamos el error exacto en cada caso.ys2. utilizando los mismos puntos que en el apartado anterior.xg. errora=abs(ya-yex) errora = 0.6 1.'-. [ya.x1. ps2 = spline(x.xg). x1 = [0.y.6 -0.75-cos(0.7079].0].yg.2327 yex=0. errorb=abs(yb-yex) . c) A continuación emplearemos un spline no-nodo. ys2 = ppval(ps2.3768 -1.y. ya que el número de puntos empleados es muy pequeño en proporción a la complejidad de la función a aproximar.p]=polynew(x.75.y). obtenemos los siguientes resultados: en el caso de la interpolación polinómica de grado 5: x = -3:6/5:3. plot(x.y = x-cos(x.'*'.8 3.') observando una cierta mejora en la aproximación de la función.75).0.6999 3.^3).y1.5) ya = -0. y1 = [-0.9001 -2.2921 -2.0 -3.75^3).xg.8 -1.0704 en el caso del spline lineal: yb = ppval(ps.0.observando cómo el spline lineal es una aproximación sumamente pobre. y = x-cos(x.1111 0.4444 0.1111 0 0 0 0 0 0 0.9241 2.1111 0.-1) + diag(ds./h g = diff(e) e = -0.9241 g = 0.6099 2.1111 0 0 0 0 0 0 0.4444 0. dr = h(2:n)/3.1111 0.1111 0.1111 0 0 0 0 0 0 0.4444 0.7544 Para obtener las restantes componentes de r resolveremos el sistema lineal definido por la matriz: h = diff(x).4444 0.7544 rn1 = -195.1173 Concluimos de los resultados obtenidos que.1111 0 0 0 0 0 0 0.^3).4444 y el vector de términos independientes e = diff(y).4444 0. % número de subintervalos Calculamos los valores en los extremos de la derivada segunda de la función a interpolar: r1=9*x(1)^4*cos(x(1)^3)+6*x(1)*sin(x(1)^3) rn1=9*x(n+1)^4*cos(x(n+1)^3)+6*x(n+1)*sin(x(n+1)^3) r1 = -195.0.4444 0.75).1111 0 0 0 0 0 0 0.1111 0.1111 0 0 0 0 0 0 0.6885 1.1) M = 0.6099 -0.% Diagonales secundarias dl = h(1:n-1)/3.0000 1.3115 1.% Diagonal principal M = diag(dp) + diag(ds. n=length(x)-1. Dado que la función a aproximar es la misma que en el ejercicio anterior: x = -3:2/3:3.4444 0.9345 .75 la mejor aproximación la proporciona el polinomio interpolador de grado 5.% Vector de pasos ds = h(2:n-1)/6.1111 0.1111 0.1111 0 0 0 0 0 0 0. dp = dl+dr.1999 para el spline no-nodo: yc = ppval(ps2.0655 0. ¡Error! No se encuentra el origen de la referencia. aunque en general el spline cúbico es la mejor aproximación.errorb = 0. errorb=abs(yc-yex) errorb = 0. en el caso particular de la abscisa 0. 2459 0. d = diff(r).1758 -2.')% Gráfico s = 77.9916 9.3.5443 Por último. g(n-1) = g(n-1) . % Evalúa el spline plot(x.ys3.5443 0.5840 .9910 -36.8772 57.3239 -1.5383 -18.xg. c = rl/2.5443 2.6885 0.0765 -36.9910 -0.rn1] r = -195.7906 -18.yg.'*'.7589 -0.0765 -36.6885 0.'-. yg = xg-cos(xg.h(1)*r1/6.7544 Una vez obtenidas las derivadas segundas.2459 0.9910 -0. b = e' -(rr + 2*rl).9916 9.7589 9.7589 -0.xg. ys3 = ppval(ps3. % Codificación del spline xg = -3:0.05:3.^3).h(n)*rn1/6 g = 47. calculamos los coeficientes de los polinomios interpolantes.7589 9.0349 -2. rl = r(1:n).0349 0. ajustamos el primer y el último elemento de g: g(1) = g(1) .2459 - y resolvemos el sistema lineal: r = M\g' r = 115.4958 29.7544 115.9910 -36.0765 Completamos el vector de las derivadas segundas: r = [r1. c.r.7077 -38.6885 0.s).7456 -97. a = y(1:n)'.*h'/6.5443 47.xg).5340 -2.9916 115. construimos el spline y lo representamos gráficamente: s = [d.2459 -2.7079 -3.0170 11.9916 115. b.8525 7.y. a] % Coeficientes de los qk ps3 = mkpp(x./h'/6.5340 3.rr = r(2:n+1).6885 0.0765 -195. 9955 -18.6875 -0.0639 y efectivamente.75).1758 -0. el error es el menor de los cometidos con los diferentes métodos estudiados.'*') b)Construiremos un polinomio interpolador de tercer grado.2530 0.0170 -77.0.4597 1.3326 -0.9955 -0.x1.8244 -5. errorb=abs(y3-yex) errorb = 0.5383 -1.75: y3 = ppval(ps3.3) .8980 -1.75.0000 2.p]=polynew(x.-2.5403 -1.8.7077 4.7470 3.y1. generamos los vectores x (hora) e y (grados): x=2:2:24. y la aproximación de la temperatura es: [yb.3794 -0.7493 1. reordenando ambos vectores en torno al punto a aproximar y tomando los cuatro primeros elementos: x1 = [8 10 6 12].6875 -11.3794 4.3427 Comprobemos el error exacto de este spline en el punto x = 0.4958 57.y.6660 0. y1 = [8 14 7 15].y=[8 8 7 8 14 15 16 14 13 11 10 8].y. plot(x.8244 1.7456 38. Problema 3 a)Para representar gráficamente los datos de la tabla. ys2 = ppval(ps2.ysn.9842 0.'*'.7911 -0.8.0000 15.0.2012 c)Emplearemos a continuación un spline lineal con el mismo propósito.0000 13.2093 La instrucción spline de MATLAB nos permite calcular la aproximación mediante un spline no-nodo: ps2 = spline(x. plot(x.1902 -0.4 y la ejecutamos con los vectores x e y.0000 8.0) s = -0.1056 0.y. utilizaremos la instrucción de MATLAB interp1.2163 0.0000 16.1261 -0.y.x1.2767 0.2196 -0.4410 0. ysn = ppval(ps.3).0000 11.0000 'pp' [2 4 6 8 10 12 14 16 18 20 22 24] [11x4 double] 11 4 1 Evaluamos el spline mediante la instrucción ppval: ys = ppval(ps.8243 0.xg).5536 -0.2296 0.8.y).2500 d)Para emplear un spline natural.3239 -0.75) ys = 10. generamos una función que incluya los pasos llevados a cabo en la sección 11.p]=polynew(x. representaremos gráficamente las distintas aproximaciones: [yg. que prepara el camino para la evaluación del trazador cúbico en un punto o conjunto de puntos.2300 -0.y1.0000 7.3114 -0. simplemente introduciendo los vectores correspondientes a los datos de la tabla y el punto en el que queremos obtener la aproximación: yc = interp1(x.2562 -1.7044 -0.'r'.xg.'g'. ysnn = ppval(ps. para ello. Obtendremos la matriz s en la que se encuentran los coeficientes de los sucesivos polinomios de tercer grado que forman el spline.2517 1.8914 -0.2067 e)Por último.xg. considerando que la derivada de segundo orden de la temperatura es nula en los extremos.4936 -0.x2.75) yc = 10.1150 1. [s.3567 -0.1442 -0.x2.75) ys2 = 10.y2.1489 0.yg.'b'.y.0000 14.'m') .y. junto con ps.0000 8.xg.2883 -0.0000 14.yb = 10.3899 0.0461 ps = form: breaks: coefs: pieces: order: dim: 0 -0.8.xg).0000 10.ps] = natural(x.4001 0.6311 8.0552 0.ysnn.4908 2.0360 0. Efectuamos un zoom sobre la región en la que se encuentran los puntos de interpolación y observamos que los resultados obtenidos por los splines natural y nonodo se superponen. .El polinomio interpolador decrece muy rápidamente y distorsiona la gráfica. pudiendo considerarse ambos la mejor aproximación. '*'. >> b = diff(y).. >> a = y(1:n). >> s = [b' a']. yg. >> plot (x. >> yg = sin(xg).Interpolacion%20Polinomica%20Segmentaria/practica11.0) ps = form: 'pp' breaks: [1x13 double] coefs: [12x4 double] pieces: 12 order: 4 dim: 1 file:///E|/Documentos/Estudios/Documentacion%20Asignatu./diff(x).1.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat. >> y = sin(x). >> ys = ppval(ps.txt Spline Lineal ---------->> x = 0:pi/3:2*pi.s]=natural(x. >> n = length(x) .0.2*pi). >> ps = mkpp(x.txt (1 of 3) [09/03/2008 13:49:28] .s). >> yg = sin(xg). Spline Cubico Natural ------------->> %Spline natural para el seno . sabiendo las derivadas segudnas en los extremos >> >> x = -2*pi:pi/3:2*pi. >> >> %la grafica >> >> xg = linspace(0. ys)..xg).ctica%2011-%20Interpolacion%20Polinomica%20Segmentaria/practica11.y..2*pi). >> y = sin(x). xg. y. xg.. >> [ps. >> xg = linspace(-2*pi. %xg.8660 -0.2481 -0.2369 0.6616 -0.8660 0.8660 0 0.8660 0. xg).9097 -0.2369 -0.txt s= -0.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat.2369 -0.0000 0. y.xg)..8660 0.Interpolacion%20Polinomica%20Segmentaria/practica11. Otras posibles condiciones de derivadas segundas en los extremos dan lugar a otros splines.xg).2369 0.0000 0. >> y = rand(10.y. '*'.0754 0.2481 0.2481 -0.0754 -0. ys). %SPLINE de MATLAB ---------------->> ps = spline(x.0754 0 0. ys)... y.8660 -0.2369 0.ctica%2011-%20Interpolacion%20Polinomica%20Segmentaria/practica11.0000 -0.2369 -0.0000 -0.0754 0.9097 0 -0. xg.6616 0.6616 -0. >> plot (x. xg.9097 0. file:///E|/Documentos/Estudios/Documentacion%20Asignatu.2369 0.0754 -0.s]=natural(x.y). ys es la funcion obtenida %Aproximar cualquier dato ----------------------->> x = 1:10. '*'.10).8660 >> ys = ppval(ps.8660 -0.0000 -0.2481 0. yg.0.0754 -0.9097 0. >> ys = ppval(ps. >> plot (x. >> ysm = ppval(ps.0000 -0.0000 -0.0000 0.6616 0.0).0000 0.1).txt (2 of 3) [09/03/2008 13:49:28] .2369 -0.. >> [ps. >> xg = linspace(1.0754 -0.0754 -0. xg. yg es la funcion original % xg. file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laborat.. y. '*'.txt >> plot (xg.txt (3 of 3) [09/03/2008 13:49:28] . >> plot (x.ctica%2011-%20Interpolacion%20Polinomica%20Segmentaria/practica11.. ys).Interpolacion%20Polinomica%20Segmentaria/practica11... ys). difiere de la nuestra sólo en los extremos file:///E|/Documentos/Estudios/Documentacion%20Asignatu. xg. x3.12. Obtener una estimación inicial x1 de la solución. Es posible obtener una idea aproximada de la solución empleando técnicas gráficas. Refinar iterativamente la aproximación. Respecto a éste último punto. Recordemos que para resolver una ecuación por un método iterativo hemos de: 1. Normalmente. ya que no hay tales. obteniendo valores x2. porque no disponemos de una expresión sencilla de la función inversa. desconocemos el valor de la solución exacta x*. Establecer un criterio de parada. deberíamos calcular la diferencia. en cuyo caso recurrimos a un método iterativo. La función f(x) = 0 El problema inverso al de evaluar una función en un punto consiste en hallar un punto en el que la función tome un valor determinado. con los llamados métodos abiertos.. y concretamente estudiaremos los métodos de Bisección y Regula Falsi. o la función f pertenece a una clase de funciones determinada) o numérica. así que consideramos xk − xk −1 . estos problemas se plantean como la resolución de una ecuación de la forma f ( x) = 0 donde f es una función continua conocida y x es la incógnita a obtener. aunque en este caso ni siquiera puede hablarse de precisión en los cálculos. Llamaremos a éstos métodos de intervalos. mientras que para obtener la arista a partir del volumen. hallar el volumen de un cubo conociendo la arista es fácil. . En este capítulo resolvemos de forma aproximada ecuaciones no lineales de una variable empleando para ello diferentes métodos iterativos: distinguiremos en primer lugar aquellos que utilizan el teorema de Bolzano. Por ejemplo. Newton y de la Secante.. Matemáticamente. entre los que destacan los métodos de Punto Fijo. que hagan cada vez más pequeño el valor de f(x). 2. exigiremos que las iteraciones varíen poco o que la ecuación se satisfaga con aproximación suficiente. en valor absoluto. el problema inverso es más difícil.. 3. necesitamos una calculadora capaz de extraer raíces cúbicas. con la condición de que verifique la ecuación dada. nos planteamos el dilema entre resolución analítica (limitada sólo a algunos casos en los que se puede despejar la variable independiente. En la siguiente sección aprenderemos a deducir la información necesaria de la representación gráfica de la función cuyo cero estamos buscando. entre aproximación y solución exacta: xk − x* Sin embargo. dependiendo del método numérico utilizado. Completaremos el estudio de los métodos elementales de resolución de ecuaciones de una variable en la siguiente sección. que desarrollamos en la primera sección. En ella se resume la información previa de que disponemos. en el que vamos probando valores de x cada vez más próximos a la solución. Dispuestos a obtener una solución precisa de la ecuación f ( x ) = 0 . aprovechando el cambio de signo de la función f antes y después de la raíz. x4. que converjan a la solución x*. Para determinar el error de la aproximación xk. La idea es una formalización del proceso de tanteo. 12. forma parte del contenido de asignaturas de cursos posteriores. Para confirmar esta estimación basta sustituirla en la ecuación: y=1. sí es posible obtener aproximaciones de la raíz. sin embargo. en previsión de que el algoritmo diverja. estamos subestimando el error. Comenzaremos con un problema clásico: calcular cuál debe ser la arista de un cubo para duplicar su volumen.1:2. si converge rápidamente. Algunos de estos métodos que mostraremos en este capítulo y el siguiente pueden generalizarse para resolver sistemas de ecuaciones no lineales. ya que ésta no podría obtenerse con toda la precisión deseada. como que el valor de la función sea pequeño. en obtener una representación gráfica de la curva y = f ( x ) para. marcando con el ratón sobre la gráfica el punto cuyas coordenadas queremos averiguar. . La representación gráfica de la curva y = f ( x ) = x 3 − 2 la obtenemos ejecutando las expresiones: x=0:.0). en primer lugar. y=x. tratar de obtener una solución a una determinada ecuación no lineal empleando exclusivamente métodos gráficos. Buscamos la solución a la ecuación no lineal f ( x ) = x3 − 2 = 0 .25^3-2 Para obtener mayor precisión. detenemos las iteraciones aunque no se haya alcanzado la convergencia y emitimos un mensaje de advertencia. Llamaremos maxiter al máximo número de pasos que permitimos realizar a un algoritmo iterativo.como estimación del error.^3-2. A veces. Si esta cantidad es suficientemente pequeña (menor que un argumento de entrada al que siempre llamaremos tol). sin embargo. detenemos el algoritmo suponiendo que hemos alcanzado la precisión requerida.Y]=ginput(1) No es práctico. podemos emplear el comando ginput de MATLAB para obtener un resultado más preciso. al contrario. Si este número se supera. plot(x. no interesa tanto la determinación precisa de la solución. posteriormente. con las modificaciones que implica el que f sea una función vectorial de varias variables. f ( x ) = 0 . ello. oscile indefinidamente o converja muy lentamente. el criterio de parada será f ( xk ) < tol Conviene también limitar el número máximo de iteraciones.25. Tendremos en cuenta que si el método converge lentamente.1 Método gráfico El más simple de los métodos (aunque no el más preciso) para obtener una aproximación a la raíz de una ecuación no lineal f ( x ) = 0 consiste. No obstante. observar donde cruza dicha curva el eje de abscisas. Ese valor en el que se anula la función f ( x ) es la aproximación que buscamos. que se pueden utilizar a su vez como aproximaciones iniciales en los métodos numéricos que desarrollaremos en este capítulo y el siguiente.y) Partiendo de la representación gráfica podemos deducir que la curva corta el eje de abscisas aproximadamente en el punto (1. el error será seguramente inferior a tol. [X. En este caso. Suponiendo que f ( x ) es una función continua. Así. concretamente tres. sin embargo. aplicando de nuevo el teorema de Bolzano. Notemos que x = 2 es una raíz múltiple (de multiplicidad 2) y en este caso. x2 ] . ambas imágenes tienen el mismo signo y no existe ninguna raíz en el intervalo [ x1 . en número par. la raíz es única. en las siguientes gráficas observamos diferentes casos en los que la raíz que buscamos está (o no) en el intervalo definido por dos valores de la variable x. es decir.2. nuevamente ambas imágenes tienen el mismo signo. en este caso. Las funciones discontinuas y aquellas que son tangenciales al eje x son excepciones a los casos anteriormente expuestos: observamos en la siguiente figura la representación 2 gráfica de la función y = ( x − 2 ) ( x − 4 ) . una mala elección del intervalo (por ejemplo [1. la curva es tangente al eje de abscisas. x1 y x2: (a) f ( x1 ) ⋅ f ( x2 ) > 0 .5]) podría hacernos pensar que no hay raíces que encontrar cuando en realidad hay una raíz doble.5. por lo que el teorema de Bolzano nos permite afirmar que existe una raíz (o un número impar de ellas) en el intervalo [ x1 . (b) f ( x1 ) ⋅ f ( x2 ) < 0 . x2 ] . sí existen raices en el intervalo [ x1 .Además. x2 ] . la representación gráfica ayuda en la comprensión de los resultados obtenidos mediante métodos numéricos e incluso permite detectar errores en los mismos. (d) f ( x1 ) ⋅ f ( x2 ) < 0 por lo que. afirmamos que existe un número impar de raices en el intervalo [ x1 . Sin embargo. x2 ] . . un intervalo más amplio en el que la función cambie de signo puede permitirnos encontrar todas los ceros de la función. (c) f ( x1 ) ⋅ f ( x2 ) > 0 . consideramos b = c y continuamos en el punto (2) para determinar una nueva aproximación de la raíz. Podemos resumir el método en los siguientes pasos: 3. el llamado Teorema de Bolzano afirma que si una función continua cambia de signo en un intervalo. Así. dichos métodos tratan de reducir el tamaño del intervalo que encierra a la raíz buscada.b] en el que suponemos está la raíz. partiendo de dos valores proporcionados inicialmente. se evalúa el valor de la función en el punto medio. Si aún no tenemos la precisión deseada. Así.b]. b) Si f ( c ) ⋅ f ( b ) < 0 . 12. partiendo de un intervalo en cuyos extremos la función continua f toma signos distintos. 2 a) Si f ( a ) ⋅ f ( c ) < 0 . se divide el intervalo por la mitad y se comprueba en cuál de ellas se encuentra la raíz.Determinamos la primera aproximación a la raíz como c = 5.1 Método de la bisección El método de bisección garantiza la convergencia a la raíz de una ecuación f ( x ) = 0 . hasta converger a ésta con la suficiente precisión. entonces la raíz se encuentra en el intervalo [a. El proceso se repite y la aproximación a la raíz mejora cada vez más a medida que los subintervalos se dividen por la mitad.2. La bisección es un proceso sistemático para buscar ese punto: tras comprobar si la función cambia de signo en un intervalo concreto. es decir.Partimos de un intervalo inicial [a.2 Métodos de intervalos En esta sección trataremos aquellos métodos que aprovechan el cambio de signo de la función en el entorno de una raíz. Esto se puede verificar comprobando que f ( a ) ⋅ f ( b ) < 0 4. . ésta se anula en algún punto del mismo. Como ya hemos observado anteriormente.Realizamos las siguientes comprobaciones: a+b .12. entonces la raíz está en el intervalo [c.c]. se comprueba en qué subintervalo cambia de signo la función. consideramos a = c y continuamos en el punto (2) para determinar una nueva aproximación de la raíz. Así. que es una nueva estimación de la raíz. fa=a^3-2. lo que resulta lógico si pensamos en que asociamos la estimación del error a la amplitud del intervalo actual. podemos calcular el error exacto cometido en este caso: error=abs(x-2^(1/3)) Si estudiamos la tasa de convergencia lineal. descrito por la ecuación f ( x ) = x3 − 2 = 0 . fb=fc. Consideraremos como cota del error cometido en la aproximación de la raíz la amplitud del último subintervalo considerado. b=2.5. a continuación. end if fc*fb<0 %elige [c.6. En el caso del cálculo de la arista del cubo.5. Por otra parte. Así. de tasa 0. Además.b] a=c. son necesarias 20 iteraciones para alcanzar la solución aproximada. x = 1.2] podemos encontrar una raíz y evaluamos la función f ( x ) = x3 − 2 en los extremos del intervalo: a=1. si exigimos una tolerancia de 10-6 . consideraremos la amplitud del intervalo actual en cada iteración (también podríamos utilizar incr = f ( c ) < tol ). Además. . calcularemos de nuevo el punto medio de [a.b] es tan pequeña como para considerar que su punto medio es una buena aproximación de la raíz. obtenemos en todas las iteraciones el valor 0. puede demostrarse que el error cometido está acotado por el cociente: b−a Error < n 2 donde a y b son los extremos iniciales del intervalo en el que encontramos la solución. comprobamos en cuál de los subintervalos [a. la raíz es igual a c y termina el proceso.b] se encuantra la raíz y nos centramos en él: if fa*fc<0 %elige [a. Comprobamos visualmente que en intervalo [1.b] y repetiremos el proceso previo. siendo el centro de éste nuestra aproximación a la solución. fc=c^3-2. end Comprobamos si la amplitud del nuevo intervalo [a. dado que conocemos la solución exacta. que se divide por la mitad en cada paso. Si es así. podemos afirmar que la velocidad de convergencia del método de bisección es siempre lineal.c] b=c. ya que se puede probar que ésta tiende a cero. En caso contrario. fa=fc.259921. hemos alcanzado el objetivo que nos habíamos propuesto.Si f ( c ) ⋅ f ( b ) = 0 (ó f ( c ) ⋅ f ( a ) = 0 ). fb=b^3-2. Ejemplo 1 Resolveremos a continuación el problema del cálculo de la arista de un cubo para duplicar su volumen. como criterio de parada en el algoritmo de bisección.c] y [c. calculamos el punto medio del intervalo y evaluamos en él la función: c =(a+b)/2. tras un proceso de n iteraciones. se prueba que los valores de θ que proporcionan los puntos de impacto posibles son los ceros de la función: xQ sin θ − yQ cos θ xP sin θ − yP cos θ f (θ ) = + 2 2 2 2 ( R cosθ − xP ) + ( R sin θ − yP ) ( R cosθ − xQ ) + ( R sin θ − yQ ) Consideraremos un billar de radio unidad. P = ( 0. Conocido el radio R de la mesa y las posiciones en coordenadas cartesianas (cuyo origen es el centro de la mesa) de los puntos P y Q.La ventaja del algoritmo de bisección es que siempre converge. Ejercicio Implementa en MATLAB el método de bisección.1:2*pi.^2).6. y1=(P(1)*sin(t)-P(2)*cos(t)).0]. 0 ) y Q = ( −0. supuesto que partimos de un intervalo que contiene a la raíz. la tolerancia y el número máximo de iteraciones. Sin embargo.6. 0 ) . den1=sqrt((cos(t)-P(1)). el punto de impacto viene definido por el angulo central θ.^2). Si estudiamos gráficamente los ceros de la función podremos proporcionarle al método de bisección un intervalo inicial razonable: t = 0:. Tras un análisis geométrico del problema. proporcione la solución aproximada al problema./den1.^2+(sin(t)-Q(2)). dados el intervalo inicial.y). tras un impacto I en la banda. Ejemplo 2 Para jugar al billar en una mesa circular hemos de golpear la bola Q de la figura con la bola P. la estimación del error y el número de iteraciones empleado.^2+(sin(t)-P(2)). yP ) y (x Q . den2=sqrt((cos(t)-Q(1)). yQ ) . y2=(Q(1)*sin(t)-Q(2)*cos(t)).Q = [-0.grid on .6. y2=y2. y1=y1.0]. plot(t. y=y1+y2.6. la convergencia es muy lenta y puede darse el caso de que el punto medio calculado en un paso esté más alejado de la raíz que el del paso anterior. de manera que. ( xP ./den2. P = [0. 5707 14 Observamos en la figura anterior que una solución exacta de la ecuación es θ= π = 90º .0277 8 1.0137 13 1. el número de iteraciones necesario y el error exacto cometido en las mismas.0563 2 1.75.9723 0. 1 1.0842 0.iter]=bisec('billar'. Estudiaremos .2].0282 0.5713 90.0032 Notemos que para alcanzar esta solución la primera aproximación es especialmente buena.5706 89.4199 0.9933 0. c = 1.5742 90.Podemos deducir que una de las raíces buscadas está en el intervalo [1.3151 6 1.5938 91. Esto sucede también al acercarnos a la solución exacta: observamos cómo la aproximación proporcionada por el iterado x12 es bastante mejor que la siguiente.0003 12 1.5247 0.1e-4.1056 3.5000 85. por lo que aplicamos el método de bisección con este intervalo de partida.5708 90.5.7500 100. por lo que podemos calcular el error cometido en nuestra aproximación: 2 error=abs(sol-pi/2) Podemos observar en la siguiente tabla las sucesivas aproximaciones con distintas aproximaciones iniciales.5781 90.) xk (grad.2676 10. aunque finalmente obtengamos la precisión requerida.5625 89.) Error ex.9968 0.5707 89.0282 11 1. almacenada en el fichero billar. k xk (rad.1961 9 1.4199 7 1.6250 93. que evidentemente es una aproximación bastante peor que la anterior. pero el siguiente iterado es 1.9437 4.2676 3 1.0842 10 1.5723 90.1056 4 1.5707 89.2.0067 14 1.100) sol = iter = 1.9863 0.1.0003 0.4753 5 1.1961 0. tolerancia 10-4 y 100 iteraciones como máximo a la función f (θ ) .3151 1.m: [sol.5703 89. 50) . f ( a ) ) y ( b. Para averiguar el valor de c. se elige el subintervalo [a. el método de bisección se utiliza en combinación con otros métodos más rápidos. resultado de considerar el punto medio del intervalo como iterado. o [c. se considera el punto (c. Ejercicio Implementa en MATLAB el método de Regula Falsi. por lo que estimaremos la precisión mediante incr = f ( c ) < tol .2 Método de Regula-Falsi Nos planteamos a continuación una variante en la que.otros métodos que nos permitirán evitar estas desviaciones sistemáticas.0) en el que la recta que pasa por los puntos ( a. Por otra parte. bien para evitar la divergencia en cualquier paso intermedio. en lugar de tomar el punto medio. y también 0 − f(a) c−a Igualando ambas pendientes obtenemos la expresión f(b) − f(a) c = a − f(a) b−a que divide el intervalo en partes proporcionales al valor de la función en los extremos. proporcione la solución aproximada al problema. la tolerancia y el número máximo de iteraciones. Ejemplo 3 Si aplicamos el método de Régula Falsi a la ecuación del ejemplo 1.c]. bien para proporcionar una estimación inicial suficientemente próxima a la raíz. en el que se utiliza la expresión f(b) − f(a) c = a − f(a) b−a junto con la forma en que se estima la precisión alcanzada por el método.2. y de este modo medimos cuán cerca está c de ser solución de la ecuación f ( x ) = 0 . independientemente del valor que tome la función en ese punto. f ( b ) ) . 12. Este se denomina método de Régula Falsi: aunque el método generalmente converge con menos iteraciones que el de bisección. f ( x ) = x3 − 2 = 0 . de manera que. Generalmente. presenta el inconveniente de que la longitud del intervalo puede no tender a cero.2. tolerancia 10-6 y un máximo de 50 iteraciones. dados el intervalo inicial. [sol. El algoritmo del método de regula falsi difiere del de bisección únicamente en el cálculo del nuevo extremo del intervalo. f ( b ) ) cortan el eje de abscisas. con un itervalo inicial a = 1. lo que nos permitirá calcular la velocidad de convergencia.1e-6. la estimación del error y el número de iteraciones empleado. f ( a ) ) y ( b.b] en el que la función cambia de signo. igualaremos dos fórmulas que nos proporcionan la pendiente de esa recta: f(b) − f(a) m= b−a que se obtiene al usar los puntos ( a.1.iter]=regula('cubica'. m= Una vez calculado el punto c. obtendremos la diferencia entre dos iterados consecutivos. b = 2. iter]=bisec(0. siendo en este caso la velocidad de convergencia superlineal (tasa de convergencia lineal prácticamente nula. bajo determinadas condiciones.25992096146283. [sol.0345) y el error exacto.5. en tan sólo tres iteraciones. 0 ) y Q = ( −0. 2. .1.2. En este caso.5].1e-6. observamos que el método de regula falsi converge con mucha más lentitud que el de bisección a la raíz múltiple (de multiplicidad 10) x = 1. como se deduce del siguiente ejemplo: Ejemplo 5 Aplicando sobre la función f ( x ) = x10 − 1 los métodos anteriores.99999976158142 21 sol = iter = [sol.0000º.1.iter]=regula('billar'.50) error=abs(sol-pi/2) Aunque el método de Regula Falsi proporciona mejores resultados que el de Bisección en los ejemplos tratados.iter]=regula(0.1.1e-4. pero ligeramente más rápida que utilizando el método de bisección.500) sol = iter = 0.5.1e-6. con las posiciones de las bolas P = ( 0.99998978416958 158 Más adelante describiremos métodos cuya velocidad de convergencia es. [sol. con tolerancia 10-6 y un máximo de 500 iteraciones. obtenemos el resultado deseado.6. sol = 1. sol = 1. la tasa de convergencia es de 0. con una velocidad de convergencia lineal. 0. más rápida que la de tipo lineal o superlineal que presentan los anteriores.41.9 10-9. 0 ) y la misma tolerancia. partiendo del intervalo [0. en 17 iteraciones.1. no es correcto generalizar esa conclusión.500) 0. Ejemplo 4 En el ejemplo del al billar circular de radio unidad. aproximadamente.obtenemos una solución suficientemente precisa.5708 = 90.6. lo hacen generalmente con mayor velocidad que los métodos de intervalos. Geométricamente.3 Métodos abiertos En los métodos de intervalo descritos en la sección anterior partimos siempre de dos valores (los extremos del intervalo) que encierran a la raíz. Usaremos el ejemplo del cálculo de la arista de un cubo para duplicar su volumen. x = 2 / x 2 o bien x = 2 / x A continuación sustituimos la x del segundo miembro por una estimación inicial de la solución y tomamos el resultado como nuevo valor de x.1 Método de Punto Fijo Comenzaremos definiendo un punto fijo de una función g ( x ) como un número real p que verifica: g ( p ) = p . los puntos fijos de una función son los puntos de corte de la función y = g ( x ) con la recta y = x . Este proceso se repite hasta que x se estabiliza o bien al comprobar que los valores de x divergen u oscilan mucho.3. Para elegir una buena estimación inicial. partiendo de una (métodos de Punto Fijo y Newton) o dos aproximaciones (método de la secante). cuando convergen.. a partir de una estimación inicial x1 de la solución. En este caso obtenemos dos ecuaciones de punto fijo equivalentes a la inicial. 12. entonces el límite es punto fijo de g y. por la equivalencia. ya tenemos la solución). g ( x ) = x y construir una sucesión de iterados xk +1 = g ( xk ) k = 1. .. La clave del método de punto fijo es transformar la ecuación f ( x ) = 0 en otra equivalente de punto fijo. f ( x ) = x3 − 2 = 0 para ilustrar los pasos del método de punto fijo: en primer lugar hay que despejar una x de la ecuación x3 − 2 = 0 . la aproximan con la precisión deseada.. A continuación describiremos métodos que. de manera que convergen a ella con mayor o menor velocidad. dejándola en función de otras x (si las despejamos todas. representamos gráficamente la función de punto fijo y buscamos su intersección con la bisectriz del primer cuadrante. solución de la ecuación f ( x ) = 0 . 2.12. Estos métodos pueden converger o no a la solución buscada pero. Si la sucesión {xk} converge y la función de iteración g es continua. 03125 Observamos que no converge.41421356237310 1. aprox. Para mejorar el experimento almacenamos en un vector las diez primeras aproximaciones.26048973986985 y el error exacto cometido: error=abs(x(10)-2^(1/3)) error = 0. x=sqrt(2/x) % Estimación inicial % Otra ecuación equivalente iteración 1 2 3 4 sol. deducida gráficamente: x=1.00113661034516 Finalmente. representaremos las diez primeras iteraciones con plot(x. 1 2 0.'*') .Partiremos de la estimación inicial de la solución x = 1.5 8 0. k=1. k=k+1.18920711500272 1.29683955465101 1. % Iteraciones end siendo la última estimación obtenida: x(end) ans = 1. 1. x(k)=2. para observar la evolución de las componentes de x. Repetimos ahora el proceso iterando con la función de punto fijo x = 2 / x : x=1. calculadas mediante un bucle for. % Estimación inicial for k=1:10 x(k+1)= sqrt(2/x(k)). x=2/x^2 % Estimación inicial % Ecuación equivalente y evaluamos repetidas veces la función de punto fijo: iteración 1 2 3 4 5 sol.24185781207348 Observamos cómo los iterados se estabilizan rápidamente. aprox. aproximándose a la solución x= 32. Ejemplo 6 En la resolución de la ecuación f ( x ) = x3 − 2 = 0 mediante la búsqueda de un punto fijo de la ecuación x = 2 / x .Para estudiar la velocidad de convergencia. analizamos la tasa de convergencia lineal a partir de los diez iterados calculados: e = abs(diff(x)).    x2 − x1 x3 − x2 x4 − x3   observamos como. g ( xk +1 ) − g ( xk ) lim rk = lim = g ' ( x* ) k →∞ k →∞ xk +1 − xk siendo lim xk = x* ... por lo que la convergencia es lineal de razón 1/2.. . para una función de punto fijo continuamente derivable. se comprueba que g ' ( x* ) = 1 . plot(r) Demostraremos que la convergencia del método de punto fijo depende del valor de la derivada de la función de iteración./e(1:n-1) % ek = |xk+1 . no sólo la velocidad de convergencia. k →∞ Para programar el método de punto fijo en MATLAB. 4 3 .  x −x x −x x −x  r =  3 2 . r = e(2:n). sino la misma convergencia del método. crearemos un fichero de función que. . De hecho. n = length(e). de la elección adecuada de la función de punto fijo depende. 5 4 .   x −x x −x x −x  3 2 4 3  2 1   g ( x2 ) − g ( x1 ) g ( x3 ) − g ( x2 ) g ( x4 ) − g ( x3 )  = . siendo x* el punto fijo de 2 g ( x ) = 2 / x ... Podemos llegar también a esta conclusión representando gráficamente el vector r. partiendo de una estimación inicial. x1..xk| % rk = ek+1/ek Observamos que las componentes de r se estabilizan entorno a 1/2. No es casual que el valor de la derivada coincida con la razón de convergencia: si escribimos las componentes de r como cocientes incrementales de g en valor absoluto. construya una sucesión de iterados (en . el vector de iterados. Observa gráficamente la divergencia.1e-6. hasta detectar si hay convergencia o no. incr.25992077227690. que a su vez estará en otro fichero de función.25992104989487 1. un vector finito) de la función g.1. que han sido 20. Ejercicio Modifica tu función pfijo para que dé como argumento de salida. El trabajo de estos algoritmos suele medirse por las veces que evalúan la función.realidad. Hemos necesitado 20 iteraciones (sin contar la estimación inicial). it] = pfijo('pf_cubica3'.m en que almacenamos g ( x) =  2 + 2 x  (se puede probar fácilmente que 3 x  esta función de punto fijo es equivalente a la función original).328540990198974 10-7. Partiendo de estas diferencias. tanto lineal como cuadrática.1e-6. Ejemplo 7 Comprobaremos el funcionamiento de nuestro algoritmo para encontrar la solución de la ecuación f ( x ) = x3 − 2 = 0 empleando la ecuación de punto fijo x = 2 / x que almacenamos en el fichero de función "pf_cubica. x.m": [sol. entre dos estimaciones sucesivas de la solución. resultará sencillo calcular posteriormente la tasa de convergencia. Se establecerá como criterio de parada la diferencia.1.228965818000916e-010 5 . it] = pfijo('pf_cubica'. [sol.50) La solución obtenida es 1.m la función de punto fijo x=2/x2 y ejecuta pfijo con un máximo de 6 iteraciones. en valor absoluto. con precisión estimada de 8. Ejemplo 8 1 2  Comprobemos que la función de punto fijo g ( x) =  2 + 2 x  resuelve el problema del 3 x  cubo y converge cuadráticamente: al ejecutar el método de punto fijo sobre la función 1 2  pf_cubica3. Ejercicio Pon en pf_cubica2. Observa la convergencia con plot(x).50) sol = incr = it = 1. incr. con esta función de punto fijo.. b ] . dicha velocidad es cuadrática. 2. notamos que.1 Convergencia del método de Punto Fijo Deducimos de los resultados obtenidos hasta el momento que la elección de la función de punto fijo es importante a la hora de resolver una ecuación no lineal por este método. no sólo para su convergencia.b ] → R continuamente derivable tal que g ( x ) ∈ [ a. ya que la tasa de convergencia cuadrática tiende a 0. Esbozamos a continuación la demostración de este resultado: aplicando el Teorema del Valor Medio a la función g en el intervalo [x1.Observamos que encuentra la solución del problema con una precisión muy elevada y una rapidez mucho mayor de lo esperado: en tan sólo 5 iteraciones.b[ . sino también para acelerar la velocidad a la que ésta se produce.1. Si estudiamos la velocidad de convergencia a través de la representación gráfica de su tasa de convergencia (lineal y cuadrática). converge al único punto fijo x* para cualquier punto de partida x1 ∈ [ a. b] . b ] para todo x ∈ [ a. 12. aproximadamente. Entonces. la iteración de punto fijo xk +1 = g ( xk ) k = 1.3. Además.8. El siguiente resultado es la clave del proceso: Sea g : [ a. supongamos que g'(x) ≤ K < 1 para todo x ∈]a. se obtiene que g ( x1 ) − g ( x* ) = g ' (ξ1 ) ( x1 − x* ) .. x*].. xn tiende a x*. Sin embargo. al menos. x* ) . en este caso. para la que la convergencia del 3 x  3 método era cuadrática ya que.. que las iteraciones convergen cuadráticamente. probamos que xn − x* < K n −1 x1 − x* Al ser K < 1.2 Interpretación gráfica de la iteración de Punto Fijo Sabemos que si la derivada de la función de punto fijo verifica la desigualdad: g ' ( x* ) < 1 los iterados convergen linealmente a x*. g ( x) = y g ( x) =  2 + 2 x  . utilizando el desarrollo de Taylor de orden 2. las curvas y = g ( x ) e y = x se cortan en el punto ( x* . respectivamente. para n = 4. • Si 0 < g ' ( x* ) < 1 los iterados forman una sucesión monótona que converge a x*. Por definición de las iteraciones y por ser x* punto fijo. si g ' ( x* ) = 0 . g ( x1 ) − g ( x* ) = x2 − x* = g ' (ξ1 ) ( x1 − x* ) Tomando valor absoluto y usando la acotación de la derivada tenemos x2 − x* = g ' (ξ1 ) x1 − x* < K x1 − x* Aplicamos de nuevo el TVM al intervalo [x2. 5. Kn tiende a 0 y. lineal de razón |g'(x*)|. ya hemos demostrado que la convergencia de los iterados de punto fijo es. Además. la iteración puede ser de dos tipos: monótona y oscilante. . para el ejemplo del 3 x x x  cálculo de la raíz cúbica de 2.3. como queríamos demostrar.. dado que x* es un punto fijo de la función g. se demuestra análogamente. . por la hipótesis de continuidad de la derivada. x*[. Este es el caso de la función 1 2  de punto fijo en el ejemplo anterior.para cierto ξ1 del intervalo ]x1. 12. • Si g ' ( x* ) = 0 los iterados convergen cuadráticamente a x*. por tanto. g ( x) =  2 + 2 x  . • Si g ' ( x* ) < 1 los iterados convergen linealmente a x*.1. Si hay convergencia. x*] y obtenemos x3 − x* = g ' (ξ 2 ) x2 − x* < K x2 − x* Teniendo en cuenta la desigualdad anterior x3 − x* < K x2 − x* < K 2 x1 − x* Repitiendo este proceso. Sin embargo. Hemos visto que los casos anteriores corresponden a las funciones de punto fijo 1 2 2 2  g ( x) = 2 . Como regla práctica podemos decir que: • Si g ' ( x* ) > 1 los iterados no convergen a x*. g '( 2) = 0 . Interpretando el método de Newton como caso especial de punto fijo. salvo un caso especial del método de punto fijo. en el que la derivada de la función de iteración g(x) se anula en la solución. es fácil justificar que presenta convergencia cuadrática. aunque cada vez más próximos a éste. Tomamos esta solución como nueva estimación de la raíz de f(x) y repetimos el proceso hasta obtener la precisión deseada. La idea del método de Newton-Raphson para resolver la ecuación f(x) = 0 es aproximar localmente la función f por una función lineal l y resolver la ecuación l(x) = 0. pues la derivada de la función de iteración se anula en la raíz de f(x) = 0.2 Método de Newton Los métodos iterativos para resolver la ecuación f(x) = 0 vistos en hasta el momento presentan convergencia lineal.3. El método de Newton usa la derivada para aproximar la función por la tangente a su gráfica. . 12. los iterados toman valores alternativamente mayores y menores que el punto fijo x*.• Si −1 < g ' ( x* ) < 0 . por tanto. f ( x* ) f ′′ ( x* ) * =0 g '( x ) = 2 * f '( x ) g ( x* ) = x* (si f ' ( x* ) ≠ 0 ) y. ( ) . Puesto que buscamos el punto x* tal que f ( x* ) = 0 .f(x1)) y toma la intersección x2 de la tangente con el eje OX como nueva estimación de la solución. es punto fijo de la función de iteración. observemos que la solución de nuestra ecuación verifica g ( x) = x − Notemos que la derivada de la función de iteración se anula en x*.( x f ( x )) 1. La ecuación de la recta tangente es y = f ( x1 ) + f ' ( x1 )( x − x1 ) y la intersección con el eje OX se obtiene haciendo y = 0 f ( x1 ) x2 ≡ x = x1 − f ' ( x1 ) siempre que la derivada f ' no se anule en x1. Tomamos x2 como nueva estimación de la raíz y repetimos el proceso para obtener una nueva estimación: f ( x2 ) x3 = x2 − f ' ( x2 ) Procediendo iterativamente. 3 x3 x2 x1 Sea x1 la estimación inicial de la solución. en el paso k + 1 determinamos f ( xk ) xk +1 = xk − f ' ( xk ) La función g ( x ) definida por la relación f ( x) f '( x) recibe el nombre de función de iteración de Newton-Raphson. El método de Newton halla la tangente a la gráfica de f en el punto (x1. 2 ( x f ( x )) 3. 1 ( x f ( x )) 2. 6 ) + sin 2 θ −0. hemos de calcular la derivada de la función f. Sabemos que los ceros de la función: 0.6 ) 2 + sin 2 θ nos proporcionan la posición del punto de impacto.6. % Datos para la gráfica yy=[yy y].6.yy.xx.m: x=1.. en la que se muestra gráfica el proceso de convergencia del método de Newton.xb). yg=xg.6sin θ f (θ ) = + 2 ( cosθ − 0.yy. si estudiamos el error cometido en la iteración k: ek +1 = xk +1 − x* = g ( xk ) − g ( x* ) y desarrollando g(xk) en torno a x* por la fórmula de Taylor. Repitiendo varias veces desde la línea del paso k y dibujando el resultado con xa=min(xx). junto con la función. xb=max(xx). % Estimación inicial. tenemos: 1 e k +1 = g ′( x* )( xk − x* ) + g ′′(ηk )( xk − x* ) 2 2 1 = g ′′(ηk )ek 2 2 Suponiendo que la derivada segunda de g es aproximadamente constante. tras un impacto I en la banda. yy=0. k=0. plot(xg.% Paso k [y. Para resolver este problema mediante el método de Newton. el método de punto fijo converge cuadráticamente.'o'. deducimos que el error cometido en la iteración k es proporcional al cuadrado del error cometido en la iteración anterior. que incluimos.[0 0]. xg=linspace(xa.dy]=nw_billar(x(k)). 0 ) con la bola P = ( 0.[xa xb]. paso xx=x.% Datos para la gráfica k=k+1. Ejemplo 9 Jugaremos de nuevo al billar en una mesa circular de radio unidad: hemos de golpear la bola Q de coordenadas ( −0. 0 ) . esto supone que el número de cifras decimales exactas se duplica cada cierto número de iteraciones. . yy=[yy 0]. En la práctica.xx. en nw_billar.En estas condiciones.yg.^3-a.% Valor de la función y de su derivada xx=[xx x(k)]. En efecto.6sin θ ( cosθ + 0. delta = -y/dy %diferencia entre dos estimaciones consecutivas x(k+1) = x(k)+ delta% Iteración de Newton xx=[xx x(k+1)].'r') obtenemos la siguiente gráfica. concluimos que efectivamente. entre dos estimaciones sucesivas de la solución. incr. no sólo la función f. En cuanto a la velocidad de convergencia. dado que la tasa de convergencia cuadrática tiende a cero. aunque en determinadas circunstancias (tales como raíces múltiples) resulta más eficiente comprobar si f ( xk ) < tol . sino también su derivada. la diferencia estriba fundamentalmente en la expresión iterativa inherente al método y en que ésta necesita evaluar.4 1.2 1. una vez implementado en MATLAB el método de Newton. el método de Newton tiene convergencia cuadrática en este caso. en valor absoluto. iter] = newton1var('nw_billar'. resultará sencillo calcular posteriormente la tasa de convergencia.5 1.15 0. obtenemos los siguientes resultados: [x.1 f(x) x 0. .0.05 1 1.6 1.50) x = 1.3 1.1. lo ejecutamos sobre la función nw_billar.6270 e-011 iter = 4 Observamos que bastan 4 iteraciones para encontrar la solución con una precisión estimada de diez cifras decimales exactas.2 0. Ejemplo 10 Si. frente a las 14 iteraciones que necesitaba el método de bisección partiendo de c = 1 como primer iterado. ya que esa información es la almacenada en la variable delta. Partiendo de estas diferencias. tanto lineal como cuadrática. Notemos que no es necesario calcular la diferencia entre dos iterados consecutivos.3 0.25 0.8 Así.7 1.1 1.05 0 -0.5708 incr = 2.1e-6.m. el algoritmo del método de Newton es muy similar al de punto fijo. en cada iterado: Como criterio de parada consideraremos la diferencia. esta ecuación de punto fijo coincide plenamente con la expresión iterativa de Newton. con lo que la iteración de Newton queda 3  xk − a 1  a xk +1 = xk − =  2 + 2 xk  2 3 xk 3  xk  Respecto a la velocidad de convergencia.228965856871140e-010 iter = 5 obteniendo la solución en 5 iteraciones.50) x = 1. De hecho.1. la convergencia del método de Newton se degrada al acercarse a una raíz múltiple de f(x).m. para obtener la solución con una precisión de 10-6. Notemos que el número de iteraciones coincide 1 2  con el empleado por el método de punto fijo con la función g ( x) =  2 + 2 x  . la función a considerar es f ( x ) = x3 − 2 = 0 y su derivada f ' ( x ) = 3x 2 que almacenamos en la función nw_cubica. iter] = newton1var('nw_cubica'. se puede demostrar que. ejecutamos la función: [x.Por otra parte. De 3 x  hecho. en general. la velocidad de convergencia del método de Newton pasa a ser lineal en el caso de raíces múltiples. Ejemplo 11 Si aplicamos el método de Newton al cálculo de la raíz cúbica de dos. incr.25992104989487 incr = 1.1e-6. razón por la cual obteníamos convergencia cuadrática con el método de punto . Sin embargo. el siguiente paso de Newton no está definido. la estimamos mediante un cociente incremental para h pequeño. aunque haya una raíz próxima. aunque el tanteo o la comparación de f(x) con la función (x-r)m (donde r es la raíz) pueden dar buenos resultados.6 10-9. f ' ( x ) ≠ 0. puede hacerse inestable. En cada paso evaluamos dos veces la función f. mientras que con las otras funciones de punto fijo empleadas.fijo. sólo hay que evaluar la función f en el último iterado). no conocemos a priori la multiplicidad de la raíz que buscamos. si la derivada se anula en la raíz. f(x2)) y toma su intersección. con el eje OX como siguiente estimación. igual a la multiplicidad de la raíz que buscamos: f ( xk ) xk +1 = xk − m f ' ( xk ) en el caso f ( x ) = ( x − 2 ) ( x − 4 ) . como es el caso de la función f ( x ) = ( x − 2 ) ( x − 4 ) = 0 . Una modificación del método de Newton que mejora la convergencia en estos casos es aplicar un factor m al cociente entre función y derivada. Por otra parte.5 con una precisión estimada de 2. la convergencia cuadrática del método de Newton puede 2 perderse. 12. en lugar de cuadráticamente. el método de la secante aproxima la función f por la recta que pasa por los puntos (x1. que necesita de 20 iteraciones para alcanzar la solución x = 2. f ( xk ) xk +1 = xk − f ' ( x1 ) Este método modificado es mucho más lento. x1 = 1+i ?. Es el método de la secante. el método de Newton converge linealmente. podemos evaluar la derivada cada cierto número de pasos. Geométricamente. En el caso de raíces múltiples. considerando m = 2 obtenemos la solución en tan 2 sólo 4 iteraciones. . x ∈ D . Notemos que si la derivada de la función f se anula en un iterado. Así se "simula" bastante bien el método de Newton. Sin embargo. D ⊆ R : • • La estimación inicial debe ser próxima a la raíz. la convergencia era lineal. reduciendo a una las evaluaciones de la función por cada paso. perdiendo la convergencia cuadrática. pero no necesitamos la expresión de la derivada (de hecho. x3. El método que veremos a continuación utiliza como iterados los puntos que intervienen en el cálculo del cociente incremental. por ejemplo. f(x1)) y (x2. para no degradar tanto la convergencia.3 Método de la secante Si no disponemos de la derivada. Cuando la derivada de la función f es difícil de calcular. Una solución intermedia consiste en calcular la derivada cada cierto número de iteraciones.3. siendo f ∈ C 2 ( D ) . ¿qué ocurre si tomamos una estimación inicial compleja. recurrimos a una modificación consistente en evaluar la derivada una sola vez y utilizar el mismo valor en todas las iteraciones. Como solución de compromiso. En estos casos. en la práctica. partiendo de la estimación inicial x1 = 1. Las siguientes condiciones son suficientes para que el método de Newton converja a la solución de la ecuación f ( x ) = 0 . el cociente f ( xk ) − f ( xk −1 ) xk − xk −1 es una buena aproximación de la derivada de la función f en el caso de la secante.% Ordenadas delta = x(2)-x(1). El proceso se repite. p=[1 -3 -10 10 44 48]. Precisamente debido a esta diferencia.9 10-9. hasta alcanzar la precisión deseada. Basta definir el polinomio. Ejemplo 13 Consideramos la ecuación polinómica x5 − 3 x 4 − 10 x3 + 10 x 2 + 44 x + 48 = 0 .% Paso inicial y ejecutando varias veces las siguientes sentencias k = k+1% Paso k delta = -y(k)/((y(k)-y(k-1))/delta) x(k+1) = x(k)+delta y(k+1) = billar(x(k+1)) obtenemos la solución en 4 iteraciones. Expresamos la iteración genérica de la secante en términos análogos a la de Newton como f ( xk ) − f ( xk −1 ) xk +1 = xk − f ( xk ) xk − xk −1 Existe una diferencia fundamental entre los métodos de la secante y regula falsi: las dos estimaciones iniciales x1 y x2 en el método de regula falsi deben verificar x1 < x* < x2 (siendo x* la raíz buscada). Viéndolo en positivo.6sin θ f (θ ) = + 2 2 ( cosθ − 0. traza la secante por los puntos de abscisa x2 y x3 y la intersecta de nuevo con OX para hallar la tercera estimación x4. La velocidad de convergencia es. . mientras que en el método de la secante partimos de dos estimaciones cualesquiera. superlineal. partiendo de las estimaciones iniciales 1 y 2: x = [1. en este caso.2].k = 1. ya que la tasa de convergencia lineal tiende a cero. % Abscisas iniciales y = billar(x). sin contar las estimaciones iniciales. dada la limitación de los métodos analíticos en cuanto al grado del polinomio. La función roots de MATLAB obtiene todas las raíces de un polinomio construyendo la matriz asociada al polinomio (considerado característico) y obteniendo los valores propios de dicha matriz. con una evaluación por paso (y sin necesidad de utilizar f ' ( x ) ).6sin θ −0. ya que xk y xk-1 son valores próximos entre sí. como siempre. Ejemplo 12 Para resolver la ecuación del billar circular sin necesidad de calcular la derivada de la función 0.6 ) + sin 2 θ ( cosθ + 0.En el segundo paso.4 Cálculo de raíces con MATLAB La resolución numérica de ecuaciones polinómicas ha suscitado gran interés históricamente. 12. se logra una convergencia mucho más rápida que con cualquier otro método. con un estimación del error de 2.6 ) + sin 2 θ emplearemos el método de la secante. Trata de averiguar la razón de éste comportamiento a través de los siguientes pasos: a) Dibuja la función f ( x ) = tan( x ) − c para c = 5 y c = 10 y estima un intervalo en que se encuentre la raíz buscada. tanto reales como imaginarias. por tanto. Calcula la velocidad de convergencia. Las temperaturas en el interior de un material con fuentes de calor incrustadas pueden determinarse si se resuelve la siguiente ecuación: e 1 − t 2  1t  1 L cosh −1  e 2  = 2   Dado que L = 0.1.088. que sirva de estimación inicial al resto de apartados.tol) siendo f. c) Emplea el método de Punto Fijo con el punto medio del intervalo anterior como estimación inicial.para a continuación obtener sus raíces. con el comando roots: roots(p) Por otra parte.5 Problemas 1. MATLAB dispone de la orden fzero. Su primer argumento es el nombre (del fichero) de la función cuyos ceros tratamos de hallar. ¿Se verifican las condiciones de convergencia? Compruébalo. fzero('f'. Tal nombre es una cadena de caracteres y. .x0. b) Empleando el método de Bisección con el intervalo inicial obtenido a partir de la representación. d) Compara los resultados obtenidos en los apartados anteriores. encuentra el valor de la temperatura t: a) Gráficamente. La raíz de la ecuación tan( x ) − c = 0 es relativamente difícil de encontrar cuando c es una cantidad grande. para resolver ecuaciones no polinómicas. la solución a la ecuación no lineal mediante los métodos de Bisección y Regula Falsi empleando el intervalo estimado en el apartado (a). para cada uno de los valores de c especificados en el apartado (a).m el fichero que contiene la ecuación a resolver o el nombre de una función reconocida por MATLAB. representando la ecuación a resolver.1e-7) 12. fzero('atan'. Por ejemplo.^3-2'.1e-6) fzero('x. con una tolerancia de 10-4. b) Aproxima. 2. Calcula la velocidad de convergencia. ha de ponerse entre comillas. c) Analiza razonadamente la velocidad de convergencia de ambos métodos para el intervalo estimado en el apartado (a).1. Estima además un intervalo en el que se encuentre la solución. c) Resuelve dicha ecuación mediante el método de la Bisección. Si queremos determinar la catenaria que pasa C a por los puntos ( ± a. entonces la ecuación de la x catenaria es y = C cosh   − C .1889  b) Halla la catenaria que pasa por los puntos ( ±12.  9.1889 cosh   − 9. c) Repite el apartado (b) aplicando el método de Newton. . utilizando la representación gráfica para obtener la estimación inicial. a) Plantea la ecuación que nos proporcionará el volumen de la caja en función del lado l de los cuadrados a recortar. b ) . 6 ) es  x  y = 9. La curva que pasa por un cable colgante se llama catenaria.3.1889 . número de iteraciones. con estimación inicial el punto medio del intervalo utilizado en apartados anteriores. Estima la velocidad de convergencia del método en este caso. Queremos averiguar cuál debe ser el lado de los cuadrados que hay que recortar en cada esquina para que el volumen de la caja sea 100 centímetros cúbicos. Utiliza la representación gráfica para obtener el intervalo inicial. velocidad de convergencia.…). f) Compara los resultados obtenidos por ambos métodos (solución.5 ) empleando el método de Regula Falsi. d) ¿Mejora el método de Regula Falsi el resultado obtenido por bisección? e) Obtén el lado de dichos cuadrados empleando el método de Punto Fijo. Supongamos que el punto más bajo de una catenaria es el origen (0. empleando una tolerancia de 10-9 y tomando como intervalo inicial el obtenido en el apartado (b). debemos resolver la ecuación b = C cosh   − C de C incógnita C. a) Prueba que la catenaria que pasa por los puntos ( ±10. Analiza las condiciones de convergencia del método de Newton en este caso y su velocidad de convergencia d) Compara el resultado obtenido en los apartados (b) y (c). 4. b) Representa gráficamente la ecuación a resolver y obtén un intervalo inicial en el que esté el valor de l que estamos buscando. Se construye una caja sin tapadera a partir de una hoja metálica rectangular que mide 10 por 16 centímetros.0). 6. b) Transforma el sistema de ecuaciones en una única ecuación no lineal y aproxima las raíces encontradas en el apartado anterior mediante el método de Newton con una tolerancia de 10-5. velocidad de convergencia. Establece una tabla que permita comparar resultados. en términos de una fracción del radio de la esfera. Indica las aproximaciones iniciales utilizadas y las iteraciones necesarias para cada una de las raíces.6 se hunde en el agua..6]. número de iteraciones.. Estima la velocidad de convergencia en una de las raíces. Establece una tabla que permita comparar resultados.. Halla la menor raíz positiva de la ecuación 2 e − x − cos( x ) = 0 Con una tolerancia de 10-6. 4 π ( 3rh 2 − h3 ) .5. utilizando los algoritmos de Regula Falsi. ¿Cuántas iteraciones son necesarias en cada caso?. y − sen (x 2 ) = 0 a) Determina gráficamente todas las soluciones del sistema. etc. . etc. Una esfera de densidad d y radio r pesa Con una tolerancia de 10-4. b) Transforma el sistema de ecuaciones en una única ecuación no lineal y aproxima con precisión de 10-6 sus soluciones mediante el método de Punto Fijo. Punto Fijo y Newton. utilizando los algoritmos de Bisección y Punto Fijo. Consideremos el siguiente sistema no lineal: e x e y + x cos ( y ) = 0 x + y −1 = 0 a) Analiza gráficamente las raíces del sistema para x ∈ [-6. número de iteraciones.. Encuentra la 3 profundidad a que una esfera de densidad 0. 8. c) Repite el apartado (b) empleando el método de Newton y comprueba la convergencia cuadrática del método. Consideremos el siguiente sistema no lineal: x2 + x − y2 = 1 7. ¿Cuál es el valor de la anomalía excéntrica?.1. 0..8. ¿Cuál es la velocidad de convergencia del método en este caso? Compara estos resultados con los obtenidos aplicando otros métodos: Bisección. ¿Cuál es el valor de la anomalía excéntrica?. ¿Cuántas iteraciones han sido necesarias? e) Compara los resultados obtenidos. d) Resuelve la ecuación de Kepler mediante el método de la secante bajo las mismas condiciones que en el apartado (b) y con las estimaciones iniciales E = 0.. Punto Fijo y Newton.6. El método de Halley es una forma de acelerar la convergencia del método de Newton-Raphson.. subplot(2.c) Para acelerar la convergencia del método de Newton se introduce un factor de sobrerrelajación 0<w<2 que modifica el incremento en cada paso según la fórmula xk +1 = xk − w f ' ( xk ) f ( xk ) Repite el apartado (b) con este método y representa en una tabla el número de iteraciones necesarias para w = 0. obtenemos la representación gráfica de ambas funciones: x=-1.96727464 y la anomalía media M = 4. y obtén una aproximación de la solución.y1) y2=tan(x)-10. . −1 10.00005..5:. Regula Falsi.6. 1. ¿Cuál es la estimación del error cometido? c) Analiza las condiciones de convergencia del método de Newton en este caso y su velocidad de convergencia. Empieza con x0 = -2.y1=tan(x)-5. 9. determina la función de iteración de Halley para hallar A . b) Resuelve la ecuación de Kepler mediante el método de Punto Fijo con valor inicial E0 = 1 y tolerancia TOL = 0...1:1.5.plot(x.4.1.2. a) Dibuja la función F(E) = E – e sen(E) –M. La fórmula iterativa de Halley es: f ( x)  f ( x ) f ′′ ( x )  1 −  g ( x) = x − 2 f '( x)  2 ( f '( x ))    2 A partir de f ( x ) = x − A .527594 10-3 .6 Soluciones Problema 1 En primer lugar.4.1). 12. Para el estudio del movimiento de cuerpos celestes con órbitas elípticas es necesario resolver la llamada ecuación de Kepler: E − e sen E = M Donde la incógnita es la anomalía excéntrica E y son conocidas la excentricidad de la órbita e = 0. 0. ¿Cuántas iteraciones han sido necesarias?.5 y E = 1. 5 10 0 -10 -20 -30 -1.5. el método de regula falsi muestra una convergencia más lenta en el primer caso (justo el doble que las .c) y=tan(x)-c.5.5) sol = iter = 1.1.5 Podemos concluir de las gráficas anteriores que las raíces se encuentran en el intervalo [1.4711 11 Observamos que.5 0 x y=tan(x)-10 0.1.1.1.subplot(2.5 y -1 -0.5 0 x 0.1.5 1 1.iter]=regula1('f1'.10) sol = iter = 1.3734 26 [sol.3734 13 y para c = 10: [sol.5.x.10) sol = iter = 1.iter]=bisec1('f1'.100. Almacenamos la función tan( x ) − c = 0 en un fichero de función: function y=f1(x.2).1e-4.5].1.100.5 1 1.plot(x.100. con idéntica estimación del error: [sol.iter]=regula1('f1'.5.1.1.iter]=bisec1('f1'. obtenemos los siguientes resultados para c = 5: [sol. aunque el método de bisección necesita el mismo número de iteraciones para resolver la ecuación tan( x ) − c = 0 con c = 5 o c=10.x.1e-4.5 -1 -0.1. Al aplicar este método sobre el intervalo [1.y2) y=tan(x)-5 10 0 y -10 -20 -1.100.1.2] con una tolerancia de 10-4.1e-4.4711 13 y mediante regula falsi.1e-4.5) sol = iter = 1. Modificamos el algoritmo de bisección para introducir el valor del parámetro c como variable de entrada. que necesita el método de bisección) y más rápida en el segundo. Al estudiar la velocidad de convergencia de ambos métodos, recordamos que en el caso del método de bisección ésta es siempre lineal de tasa 0.5, mientras que podemos observar en las siguientes gráficas cómo la convergencia de regula falsi es lineal en ambos casos, aunque con tasa 0.29 para c = 10 y una tasa mayor, aproximadamente 0.64 para c = 5. conv. lineal 0.2894 0.2892 0.289 0.2888 0.2886 0.2884 0.2882 0.288 0.2878 1 2 3 4 5 6 7 8 9 conv. lineal 0.64 0.639 0.638 0.637 0.636 0.635 0.634 0.633 0.632 0 5 10 15 20 25 Sin embargo, estos resultados parecen contradecir la afirmación del enunciado en cuanto a la dificultad de los métodos numéricos para aproximar las raíces de la función f para valores grandes de c. Problema 6 Representaremos en primer lugar las curvas que definen el sistema en el plano, para lo que obtenemos en primer lugar la forma explícita de ambas: y = ± x2 + x −1 y = sin ( x 2 ) Observemos que únicamente hay dos puntos de intersección entre ambas curvas, cuyas aproximaciones obtenidas mediante el comando "ginput" de MATLAB son: (-1.66,0.27) y (0.76,0.5). A continuación, transformamos el sistema en una ecuación no lineal: x 2 + x − sen 2 ( x 2 ) = 1 y la transformamos en la ecuación de punto fijo equivalente: x = 1 − x 2 + sen 2 ( x 2 ) Generamos el fichero de función: en el que almacenamos la función de punto fijo g ( x ) = 1 − x 2 + sen 2 ( x 2 ) . Aplicamos el método de punto fijo con las aproximaciones iniciales -1.6 y 0.7 obtenidas gráficamente y la tolerancia exigida en el enunciado del problema: [sol, incr, iter] = pfijo('g6',-1.6,1e-6,100) sol = incr = iter = sol = incr = iter = 0.72595082969515 6.497037460251320e-007 11 0.72595067846056 2.991704356469782e-007 8 function y=g6(x) y=1-x.^2+sin(x.^2).^2; [sol, incr, iter] = pfijo('g6',0.7,1e-6,100) Por tanto, la primera solución del sistema es: x=sol,y=sin(sol^2) x = y = 0.72595067846056 0.50294644122539 Observamos cómo, partiendo de aproximaciones inicales próximas a cada una de las raíces, el método de punto fijo converge a una única raíz. La razón que explica este comportamiento es simple: la derivada de la función de punto fijo en la raíz (en valor absoluto) no está acotada por la unidad, por lo que no se cumplen las condiciones de convergencia, y ésta no está asegurada. Para encontrar la otra raíz emplearemos una ecuación de punto fijo equivalente: x = − 1 − x + sen 2 ( x 2 ) [sol, incr, iter] = pfijo('g6b',-1.6,1e-6,100) sol = -1.67009279255709 incr = 9.352586394228979e-007 iter = 12 Por tanto, la solución del sistema que buscábamos es: x=sol,y=sin(sol^2) x = y = -1.67009279255709 0.34513509208359 Si resolvemos ahora la ecuación no lineal mediante el método de Newton, necesitaremos una función que nos permita evaluar en un punto, tanto la función f(x), como su derivada: function [y,dy]=f6(x) y=x.^2+x-sin(x.^2).^2; dy=-2*x+4*x.*sin(x.^2).*cos(x.^2) Ejecutamos nuestro algoritmo de Newton con las mismas estimaciones iniciales empleadas anteriormente. Analizamos en cada caso la velocidad de convergencia: [sol, incr, iter] = newton1var('f6',-1.6,1e-6,100) sol = -1.67009303424438 incr = 5.340967319075955e-010 iter = 4 En las siguientes gráficas podemos observar la convergencia superlineal del método de Newton en este caso (la tasa de convergencia cuadrática no está acotada por debajo de la unidad, mientras que la tasa lineal tiende a cero), junto con la evolución de los iterados en el proceso. Es fácil comprobar que f' se anula en las proximidades de la raíz, lo que ralentiza la convergencia del método. Al aplicar el método de Newton con la segunda estimación inicial obtenemos la solución en tan sólo 3 iteraciones y con una velocidad de convergencia cuadrática, ya que esta tasa de convergencia tiende a 0.765, como puede observarse en las gráficas, junto con la evolución de la tasa lineal y de los iterados. [sol, incr, iter] = newton1var('f6',0.7,1e-6,100) sol = incr = iter = 0.72595072614316 1.923265868745633e-007 3 Problema 10 Conocidas la excentricidad de la órbita e = 0.96727464 y la anomalía media M = 4.527594 10-3, obtenendremos la representación gráfica de la función: e=0.96727464 ; M = 4.527594e-3; E=-pi:.1:pi; FE=E-e*sin(E)-M; plot(E,FE) Observamos en la gráfica que el valor que buscamos de la anomalía excéntrica es aproximadamente nula. Si ampliamos la imagen observamos que E ≅ 0.1 . Para aplicar el método de punto fijo, obtenemos la ecuación equivalente: E = M + e sen E Empleando la función: function E2=g10(E) e = 0.96727464; M = 4.527594e-3; E2=M+e*sin(E); y bajo las condiciones del enunciado, la solución obtenida es: [E, incr, iter] = pfijo('g10',1,5e-5,500) E = 0.12915859636994 incr = 4.819453403098750e-005 iter = 131 Si aplicamos el método de Newton, necesitamos almacenar función y derivada en el fichero: function [y,dy]=f10(E) e = 0.96727464; M = 4.527594e-3; y=-M+E-e*sin(E); dy=1-e*cos(E); y la solución obtenida por Newton en este caso es: [E, incr, iter] = newton1var('f10',1,5e-5,100) E = 0.12802307540635 incr = 4.924433887513424e-008 iter = 7 Respecto a las condiciones de convergencia del método, notemos que no hay problemas en cuanto a la continuidad y derivabilidad de la función, su derivada toma valores próximos a cero para una anomalía excéntrica nula, como se observa en la siguiente gráfica: x=-pi:.01:pi;[y,dy]=f10(x);plot(x,dy) Por esta razón, la velocidad de convergencia no es cuadrática, sino superlineal, como se desprende de las siguientes gráficas: Aplicando el método de la secante, obtenemos la solución en tan sólo una iteración más que empleando el método de Newton y con velocidad de convergencia superlineal: [E, incr, iter] = secante('f10',0,1,5e-5,100) E =0.12802309212324 incr = 1.182783157985257e-005 iter = 6 En este problema el método de la secante se muestra más eficaz, ya que con una velocidad superlineal (al igual que Newton), consigue encontrar la solución en una iteración menos con un algoritmo más simple, que no implica el conocimiento de la derivada de la función. El comportamiento del método de punto fijo en este caso es muy poco efectivo, con un número de iteraciones comparativamente muy elevado y convergencia lineal. file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo...s/Practica%2012%20-%20La%20ecuacion%20fx%20=%200/practica%2012.txt --- aproximacion grafica >> x = linspace(1,2,1000); >> y=x.^3; >> plot(x,y,'.') >> grid >> [X,Y] = ginput(1) X= 1.2599 Y= 2.0000 --- metodo iterativo >> a = 1; fa = a^3-2 fa = -1 >> b = 2; fb = b^3-2 fb = 6 >> c = (a+b)/2; fc = c^3-2 fc = 1.3750 >> b = c;fb = fc; %movemos el extremo derecho >> c = (a+b)/2; fc = c^3-2 fc = -0.0469 >> a = c;fa = fc; %movemos el extremo izquierdo >> c = (a+b)/2; fc = c^3-2 fc = 0.5996 etc... -------- biseccion.m file:///E|/Documentos/Estudios/Documentacion%20Asign...2%20-%20La%20ecuacion%20fx%20=%200/practica%2012.txt (1 of 4) [09/03/2008 13:49:30] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo...s/Practica%2012%20-%20La%20ecuacion%20fx%20=%200/practica%2012.txt function c=biseccion(f,a,b,tol,maxiter) fa = feval(f,a); fb = feval(f,b); k = 0; if fa*fb>0 disp('Intervalo inadecuado. No hay garantia de existencia de raices.') else while b-a>tol & k<maxiter c = (a+b)/2; fc = feval(f,c); if fa*fc < 0 % Semiintervalo izquierdo b = c; fb=fc; elseif fc*fb<0 %Semiintervalo derecho a = c; fa = fc; elseif fc==0 %c es la solucion a=c;b=c; end k = k+1; end end if k == maxiter disp('Alcanzado maximo de iteraciones') end if b-a < tol disp('Alcanzado error menor que tol') end -------------------------------Solucion al problema del billar >> x = linspace(0,2*pi,10000); >> y = billar(x); >> plot(x,y,'.') >> grid >> >> c=biseccion('billar',1,2,1e-6,40) file:///E|/Documentos/Estudios/Documentacion%20Asign...2%20-%20La%20ecuacion%20fx%20=%200/practica%2012.txt (2 of 4) [09/03/2008 13:49:30] '*') ----------ejercicio y = x.s/Practica%2012%20-%20La%20ecuacion%20fx%20=%200/practica%2012.2*pi-1.7 -0.1e-6. >> z = linspace(0.3.3.1e-6.-1.7]..5.4.40) Alcanzado error menor que tol sol = 2.4.. P(1). >> plot (cos(z). Q(1).1e-6.2.1.2%20-%20La%20ecuacion%20fx%20=%200/practica%2012.6697 >> x=cos(sol). >> hold on >> plot(x.2832 ---------------Ejemplo utilizando variables globales >> global P Q >> P = [0.40) Alcanzado error menor que tol c= 0 >> c=biseccion('billar'.5 0].^10 ..y.1e-6.c]=regulaf('billar'.1 file:///E|/Documentos/Estudios/Documentacion%20Asign.txt (3 of 4) [09/03/2008 13:49:30] .40) Alcanzado error menor que tol c= 4. P(2).2*pi+1. Q=[0.txt Alcanzado error menor que tol c= 1. sin(z). 'ro'. Q(2).1416 >> c=biseccion('billar'.2*pi).40) Alcanzado error menor que tol c= 6.5708 >> c=biseccion('billar'.7124 >> c=biseccion('billar'.40) Alcanzado error menor que tol c= 3. 'go') >> [sol.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo. y = sin(sol).1e-6.. file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo..2%20-%20La%20ecuacion%20fx%20=%200/practica%2012..s/Practica%2012%20-%20La%20ecuacion%20fx%20=%200/practica%2012.txt (4 of 4) [09/03/2008 13:49:30] ..txt solucion x=1 con tol = 1e-6 biseccion: 21 iteraciones regulaf: 160 iteraciones file:///E|/Documentos/Estudios/Documentacion%20Asign.. 0000 1..1892 >> x = sqrt(2/x) x= 1.2968 >> x(k+1) = sqrt(2/x(k)).4142 1.. %hemos reorganizado la ecuacion x^3 ..n%20fx%20=%200%20-%202a%20parte/practica%2013.1892 1.1892 >> x(k+1) = sqrt(2/x(k)).4142 1.2968 >> x(k+1) = sqrt(2/x(k)). k = k + 1.4142 >> x(k+1) = sqrt(2/x(k))..2419 >> x = sqrt(2/x) .0000 1.0000 1. >> x(k+1) = sqrt(2/x(k)). 1.. >> x = sqrt(2/x) x= 1.txt. k = k + 1.1892 1. x= 1.2599 >> %mejora obvia --------------->> x = 1.2419 file:///E|/Documentos/Estudios/Documentacion%20Asigna. x= 1.4142 1. k = k + 1..0000 1.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo.2968 >> x = sqrt(2/x) x= 1. >> x = sqrt(2/x).txt (1 of 4) [09/03/2008 13:49:31] . x= 1. >> k=1.txt.txt >> %metodo del PUNTO FIJO ------------------------->> format compact >> x = 1. k = k + 1.2 = 0 >> x = sqrt(2/x) x= 1. x= 1.0La%20ecuacion%20fx%20=%200%20-%202a%20parte/practica%2013. k = k + 1. x6) .x1) (x1.0La%20ecuacion%20fx%20=%200%20-%202a%20parte/practica%2013.txt.1892 1.n%20fx%20=%200%20-%202a%20parte/practica%2013..txt.5000 >> %significa que g'(x*) = -1/2 Representacion grafica: ----------------------(Hay que arreglarlo un poco) Lo que falla es construir la matriz para representar los puntos: Los puntos a representar son: (x1.5108 -0.5000 -0..x4) (x4.4997 -0.x4) (x4./e(1:end-1) tasa_convergencia = Columns 1 through 7 -0.4946 -0.txt (2 of 4) [09/03/2008 13:49:31] ..5000 -0.0000 1.x5) (x5.txt x= 1..x3) (x3..5432 -0.4784 -0.x3) (x3. >> tasa_convergencia = e(2:end).5000 -0.5000 -0.4999 -0.5007 Columns 8 through 14 -0. >> e = diff(x)... seria facil haciendo coord = [coord x(k) x(k)] con k=1->n-1 file:///E|/Documentos/Estudios/Documentacion%20Asigna.x5) (x5.x2) (x2.5002 -0.2419 1.5027 -0.4142 1.2691 Permite un mejor analisis cuantitativo ------------------------------------->> plot(x).4986 -0.2968 1.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo.5000 Columns 15 through 16 -0.x2) (x2. billar(x) file:///E|/Documentos/Estudios/Documentacion%20Asigna.'b') Solucion al billar -------------------- >> global P Q P = [0. %absc = [x(1) x(2)]. donde y = x . absc = [absc x(k) x(k+1)]. k = 2.txt.100).txt. [x.1e-6.txt (3 of 4) [09/03/2008 13:49:31] . tasa_convergencia] = puntofijo('cos'. absc = [0 x(2)]. tasa_convergencia] = puntofijo('billarf'..'g'..0La%20ecuacion%20fx%20=%200%20-%202a%20parte/practica%2013.100).6. ycos = cos(xcos).ycos.n%20fx%20=%200%20-%202a%20parte/practica%2013. %construir coord y absc %pequeña modificacion. >> solucion solucion = 1.0 para %que mole mas coord = [x(1) x(1)].absc.1e-6.1.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo. solucion. end >> plot(xcos. [aprox.Q = [-0.0].coord. k = k+1.0].. solucion.1.txt absc = [absc x(k) x(k+1)] con k=1->n-1 xcos = linspace(0..5708 >> %la otra solucion no se obtiene porque la derivada es mayor que cero >> %se hace con billarf2.6. que el primer punto sea x1.pi/2). >> for k = 2:34 coord = [coord x(k) x(k)]. txt.. solucion.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo..0La%20ecuacion%20fx%20=%200%20-%202a%20parte/practica%2013.txt.1.7824e-008 >> %Asi se han obtenido AMBAS soluciones file:///E|/Documentos/Estudios/Documentacion%20Asigna.100). tasa_convergencia] = puntofijo('billarf2'.txt (4 of 4) [09/03/2008 13:49:31] .txt >> [aprox. >> solucion solucion = -3...1e-6.n%20fx%20=%200%20-%202a%20parte/practica%2013. Un problema aparentemente distinto. En otras ocasiones. 2 i =1 m La expresión del error se ha escogido de modo que todos los sumandos sean positivos para evitar que los errores se compensen y para que la función resultante sea derivable. Matemáticamente.1 30. K.990 1. i = 1.1.14 Aproximación Mínimo-Cuadrática. Uno de los problemas de este tipo más usuales consiste en ajustar funciones a un número finito de valores dados. 2. En los espacios de funciones (de dimensión infinita) se suele partir ya de una base ortogonal. para reducir el trabajo computacional y garantizar la estabilidad numérica de la solución. los problemas mencionados se traducen en hallar el punto de un subespacio más próximo a un punto dado de un espacio euclídeo.1 Regresión lineal Ejemplo 1 Consideremos los datos de implantación de telefonía fija en España que se muestran en la tabla adjunta.989 1. o caso de dimensión finita y en los dos siguientes. concretamente. pero que engloba a los anteriores. Año Líneas /100 hab 1. La solución teórica es la proyección ortogonal del punto dado sobre el subespacio. 14. La solución numérica requiere obtener de una base ortogonal de dicho subespacio.991 1. es resolver aproximadamente un sistema de ecuaciones lineales incompatible. Como clase de referencia. por ejemplo un polinomio o una combinación de funciones trigonométricas. y así poder resolver el problema por métodos analíticos. Ajuste de datos discretos La aproximación mínimo-cuadrática trata de obtener una solución aproximada a un problema lineal. tratamos de hallar el polinomio de grado no superior a n.988 1.3 . yi ). óptima en el sentido de que haga mínima una expresión cuadrática bajo ciertas condiciones. podemos considerar los polinomios de grado no superior a n. se trata de encontrar la función de cierta clase que "mejor" representa dichos valores.6 35.1 Aproximación Polinómica Mínimo-Cuadrática Dada una nube de puntos {( xi .3 34.992 28. que mejor se ajusta a la nube. En este tema tratamos del ajuste de datos discretos. m}. 14. en el sentido de minimizar el error cuadrático E 2 = ∑ (Pn ( xi ) − yi ) . lo que se consigue mediante el algoritmo de factorización QR en el caso finitodimensional. Pn ( x). el ajuste funcional en espacios de dimensión infinita. intentamos aproximar una función dada mediante otra función "más simple".0 32. 1.3 34.1 30 32.^2).4314 0. sum(x).5 38. queremos obtener la recta o polinomio de primer grado.0e+005 * 5. y hallando los extremos relativos.y) Calculamos los coeficientes de las ecuaciones normales usando sum.4 37.995 36.994 1. sum(x). sum(y)] p = N\c c = 1.5 38.5]' m = length(x) Representamos los datos mediante un diagrama de barras con bar(x.0027 p = .993 1. m] N = 31728620 15932 15932 8 Obtenemos a continuación los términos independientes y resolvemos el sistema c = [sum(x.6 35. En este caso existe un único extremo que es el mínimo buscado. cuya solución nos da los coeficientes de la recta buscada. y = P1 ( x) = a1 x + a2 que mejor aproxime los valores de la tabla. llamada recta de regresión de Y sobre X. considerando E 2 como función de dos variables a1 y a 2 . concretamente. (Σ xi2 )a1 + (Σ xi )a2 = Σ xi yi   i i i Σ yi  (Σ xi )a1 + ma2 =  i i  Efectuamos los cálculos con MATLAB: x = (1988:1995)' y = [28. llamadas ecuaciones normales.5 Suponiendo que el número de líneas instaladas por cada 100 habitantes crece linealmente en el periodo considerado.4 37. N = [sum(x.*y). Para ello hacemos cero las derivadas parciales de E respecto a a1 y a 2 : m  ∂E 2 = 2∑ t i (a1 xi + a 2 − yi ) = 0 ∂a1  i =1  2 m ∂E = 2∑ (a1 xi + a2 − yi ) = 0   ∂a 2 i =1  Obtenemos así un sistema de dos ecuaciones lineales con dos incógnitas.3 36. que minimice el error cuadrático dado por E2 = ∑ (a t i =1 m 1 i + a2 − yi ) 2 El problema puede resolverse analíticamente. aunque posteriormente se obtendrán de modo más rápido. Consideremos la ecuación general de la recta y = P1 ( x) = a1 x + a 2 e intentemos determinar los coeficientes a1 y a 2 imponiendo que los datos satisfagan dicha ecuación. yg = polyval(p.1.y.1996). xg = linspace(1987.xg.8892 La solución proporciona los coeficientes de la recta de regresión que aproxima los datos tal como muestra la Figura 1. Obtenemos así un sistema de ecuaciones lineales probablemente incompatible.yg) Figura 1. plot(x.0e+003 * 0.x)-y)^2 E2 = 3.'*'.xg).0015 -2. Recta de regresión El error cuadrático se obtiene del modo siguiente: E2 = norm(polyval(p. .4554 Las ecuaciones normales pueden obtenerse por un procedimiento algebraico que simplifica las expresiones y es fácilmente generalizable. 0  1990 1  32.1.4      1994 1  37.5      Expresamos matricialmente este sistema como ( x u) p = y donde x e y son vectores columna que contienen los datos.0e+003 * 0.2 Desplazamiento del origen Las ecuaciones normales tienen. desde el punto de vista numérico.3      2    1993 1  36. Mientras el sistema inicial era incompatible.5  1995 1  38.0e+005 * 5.6  1992 1 a  =  35. lo que .4314 0.1     1989 1  30. x.1988 1  28.0015 -2.3       1991 1 a1   34. Premultiplicando por la matriz transpuesta (x u)T se obtiene  xT   xT   T ( x u ) p =  T  y u  u      o sea  xT x xT u  xT y   T p = T   u x uT u  u y     que coincide precisamente con el sistema de ecuaciones normales.8892 14.^0] A'*A A'*y N\c 1988 1989 1990 1991 1992 1993 1994 1995 31728620 15932 1 1 1 1 1 1 1 1 15932 8 A = N = c = 1. una ventaja y un inconveniente.0027 p = 1. La ventaja es que su matriz es simétrica definida positiva. éste tiene solución única que proporciona la recta buscada. u es una columna de unos y p la columna de los coeficientes a determinar. Repetimos los cálculos en MATLAB: A N c p = = = = [x. 2500 % % % % % Condición del sistema inicial Desplazo el origen a la media de x Condiciones de ajuste El sistema nuevo tiene mejor condición 1.0000 1.'*'.0000 1. c = A'*y p = N\c c = 61. Su solución da los coeficientes de la recta de regresión desplazada al valor medio y = b1 ( x − x ) + b2 .5000 0. yp = polyval(p.xn) plot(x.0000 1.0000 Las nuevas ecuaciones normales son más estables que las anteriores.0875 Para evaluar el polinomio hay que tener en cuenta que está referido a las nuevas abscisas.5000 -0.5000 -1.0000 1. como ocurre en el ejemplo.9961e+012 xn = -3.5000 -2.0000 1. Sin embargo.5000 3.0000 1.0000 1.4679 34.garantiza que puede resolverse de modo estable sin necesidad de pivotación.y.5000 1. si centramos las abscisas a su media.5000 1.yp) .5 .5000 0.x. cond(N) xn = x .5000 2.^0] N = A'*A cond(N) ans = 2.5000 -0.5000 2. tomando xn = x − 1991.mean(x) A = [xn xn. En el ejemplo anterior.6500 272.5000 N = 42 0 0 8 ans = 5. El inconveniente es que esta matriz puede tener un número de condición alto si no se elige con cuidado la matriz original A.5000 -2. Una solución obvia es modificar convenientemente la variable x para que sus valores sean moderados.5000 -1.5000 A = -3. se observa una importante mejora en el número de condición de la matriz del sistema de ecuaciones normales ATA.5000 3. en la representación gráfica utilizo las abscisas antiguas.7000 p = 1. 5000 0 42.0000 0 1. es fácil generalizar las ecuaciones normales para ajustar por polinomios de grado mayor.3 Ajuste polinómico Con la versión algebraica.1.2500 0. .6804 37.6268 38.5000 0 42.0000 1. pero su condición es muy elevada.^0] N = A'*A % Ecuaciones normales c = A'*y % Términos independientes p = N\c % Coeficientes del polinomio yp = polyval(p. con menor error cuadrático. P2 ( x) = a1 x 2 + a 2 x + a3 basta añadir a la matriz A una columna con los cuadrados de las abscisas A = x2 x u y efectuar las demás operaciones como en el caso de la recta de regresión.5000 1.2500 12. El sistema de ecuaciones normales es de tamaño 3×3.2500 2.14.0000 1.5000 0.xn) % Valor del polinomio en xn E2 = norm(y-yp)^2 % Error cuadrático A = 12.5000 3.2500 2.2500 N = 388.4679 34.6005 -3.0000 0 8.^2. previo desplazamiento a la media de x. para ajustar con un polinomio de grado 2.0000 1.5000 -1.3125 E2 = 0.0054 35.2500 6.0000 1.0000 c = 1.0e+003 * 1. Para representar gráficamente el polinomio obtenido. por lo que trabajaremos con las abscisas desplazadas. xn.2500 6.1304 1.4098 0.4732 36.2768 34. Por ejemplo.0616 0.5000 2.7719 yp = 28. ( ) A = [xn.2727 p = -0.5000 -2.0000 1. lo evaluamos en el rango xg.0000 Notemos cómo el error se ha reducido considerablemente. en lugar de por rectas. Obtendremos así mejores aproximaciones. xn.0000 1. Realicemos las operaciones con MATLAB.2875 32.0375 30.0000 1.0000 42.2500 0.5000 -0. m. con lo que se obtiene la interpolación polinómica normal como caso particular de la mínimo cuadrática. el grado puede llegar a ser m–1. '*'.1. aunque. x.4 Índice de determinación . n.xgn). En general suponemos que el grado del polinomio. en teoría. yi ). K. yg. queda un sistema lineal m×(n+1) incompatible:  x1n x1n −1 L x1 1 y    a1   1   n n   y2   x2 x2 −1 L x2 1   x n x n −1 L x 1  a 2   y  3 3  ⋅ M  =  3   3   M   M M M M   an      M M M    M   M  a n +1   y   x n x n −1 L x 1  m m m   m A partir de este sistema se forman las ecuaciones normales y se resuelven para obtener el polinomio mínimo-cuadrático 14. yp. es mucho menor que el número de puntos a interpolar. 2. i = 1. '+') Figura 2: Ajuste polinómico de segundo grado El ajuste por rectas y parábolas se generaliza de modo directo a polinomios de cualquier grado. Imponiendo que el polinomio Pn ( x) = a1 x n + a 2 x n−1 + L + an x + an+1 pase por los puntos {( xi . xg. y.xgn = xg-mean(x). m}. yg = polyval(p. plot(x. Conforme aumenta el grado del polinomio, disminuye el error cuadrático del ajuste de un conjunto dado de puntos. Deseamos establecer un criterio para elegir un polinomio de grado no demasiado alto que aproxime los datos adecuadamente. El error mínimo cuadrático no es buen indicador de la aproximación, pues depende del número de puntos y de las unidades de medida empleadas. Como alternativa definimos el índice de determinación, I= ∑ (P (x ) − y) i =1 n i m 2 ∑(y i =1 m i − y)2 donde y es la media de las ordenadas. El índice de determinación es una cantidad adimensional entre 0 y 1. Cuanto más próximo a 1, mejor es el ajuste. Dado un valor umbral entre 0 y 1, tomaremos el polinomio mínimo-cuadrático de menor grado cuyo índice de determinación supere dicho umbral. La aproximación de grado 0 es el polinomio constante igual a la media de las ordenadas. Su índice de determinación es también 0. En el otro extremo, si exigimos que el índice sea muy próximo a 1, el grado llegara a ser el número de datos menos 1 con lo que obtendremos el polinomio de interpolación que pasa exactamente por todos los puntos. El índice valdrá 1 y el error cuadrático, 0. Si el ajuste se hace para predecir la evolución futura del fenómeno, los polinomios de grado elevado no son fiables pues oscilan mucho fuera del intervalo. Ejemplo 2 Calculemos el índice de determinación del ajuste de grado 2 de los datos anteriores. ym = mean(y) I = (norm(yp-ym)/norm(y-ym))^2 Obtenemos un valor de 0.9936. Si queremos una mejor aproximación, aumentamos el grado del polinomio a ajustar. A = [xn.^3 A] N = A'*A c = A'*y p = N\c yp = polyval(p,xn) I = (norm(yp-ym)/norm(y-ym))^2 Ahora el índice ha subido a 0.9944. 14.1.5 Ajuste polinómico con MATLAB MATLAB obtiene el polinomio de aproximación por mínimos cuadrados mediante la orden polyfit. La sintaxis p = polyfit(x,y,n) proporciona los coeficientes del polinomio mínimo cuadrático de grado n determinado por la nube de puntos ( x, y ) . El polinomio puede evaluarse con polyval. Por ejemplo, polyfit(xn,y,4) proporciona el polinomio de grado 4 que mejor ajusta los datos ( x, y ) . El uso de polyfit no evita los problemas de mal condicionamiento, por lo que conviene utilizar las abscisas desplazadas. Alternativamente, podemos utilizar polyfit con la sintaxis siguiente, que además de centrar automáticamente las abscisas, las normaliza para que su desviación típica sea la unidad, dividiéndolas por dicha desviación. [p,s,mu] = polyfit(x,y,4) p = s = 0.3989 0.1670 -1.6321 3.3380 34.9775 R: df: normr: mu = 1.0e+003 1.9915 0.0024 [5x5 double] 3 0.5492 * mu es un vector cuyas componentes mu(1) y mu(2) son, respectivamente, la media x y la desviación típica σ de x. El polinomio p obtenido está referido a la nueva variable x−x u= , lo que ha de tenerse en cuenta para evaluarlo respecto a los datos iniciales. σ ug = (xg-mu(1))/mu(2); yg = polyval(p,ug); plot(xg, yg, x, y, '*') La normalización mejora el comportamiento numérico, tanto del proceso de obtención del polinomio, como del propio polinomio resultante. 14.2 Sistemas Sobredeterminados Las condiciones de ajuste de un polinomio a una serie de datos originaban en el apartado anterior un sistema de ecuaciones lineales incompatible. Esto ocurre habitualmente cuando se trabaja con valores experimentales. Para reducir la influencia de los errores, se realizan medidas redundantes, dando lugar a ecuaciones incompatibles. Llamamos a estos sistemas sobredeterminados, en lugar de incompatibles, para enfatizar el hecho de que todas las ecuaciones contienen información igualmente válida (o con distinto grado de confianza) que utilizaremos en la determinación de la solución aproximada. Sea Ax = b un sistema lineal posiblemente incompatible de tamaño m×n y de rango total por columnas, es decir, de rango n. La solución óptima x es, por definición, la que minimiza el error cuadrático 2 E 2 = Ax − b Ax es una combinación lineal de las columnas de A, por tanto será un vector del espacio columna de A, Im(A), precisamente el más próximo a b. Como medimos la distancia mediante una norma euclídea, tal vector es la proyección ortogonal de b sobre el subespacio Im(A). Así pues, b − Ax será ortogonal al espacio columna de A, y por tanto, a las columnas de A. Matricialmente esto se expresa como AT ( Ax − b) = 0 de donde se obtienen las ecuaciones normales AT Ax = AT b . La solución óptima se expresa formalmente como x = ( AT A) −1 AT b , b b − Ax Ax Im(A) aunque en la práctica resolvemos el sistema en lugar de calcular la inversa. La proyección ortogonal de b sobre el espacio columna de A es p = Ax = A( AT A) −1 AT b . La matriz de la proyección ortogonal, P, transforma directamente b en su proyección p: P = A( AT A) −1 AT Frecuantemente las ecuaciones normales resultan mal condicionadas, por lo que se requiere un tratamiento previo de la matriz A para poder efectuar los cálculos de modo estable. Ejemplo 3 La tarifa del taxi se compone de una parte fija (bajada de bandera), otra parte proporcional a la distancia recorrida y otra proporcional al tiempo de espera. La tabla siguiente recoge los datos de distintas carreras. Distancia T. espera Precio 8.5 10.5 10.5 2.0 13.4 6.6 8.4 0.4 7.7 6.8 7.6 8.5 8.3 10.1 10.2 7.1 8.6 9.0 3.0 3.8 4.7 1.9 13.6 6.6 3.0 10.8 6.6 El precio P de cada carrera viene dado por la expresión P = a + bD + cT donde D y T son la distancia y el tiempo de espera. Se trata de determinar los precios unitarios a,b y c, a partir de los datos de la tabla. Sustituyendo los datos de cada carrera en la expresión anterior se obtiene un sistema incompatible. Hallemos la solución mínimo-cuadrática con MATLAB. La matriz del sistema consta de una columna de unos, que corresponden a la bajada de bandera, la columna de las distancias y la de los tiempos de espera: U D T A = = = = ones(9,1); [ 8.5; 2.0; 8.4; 6.8; 8.3; 7.1; 3.0; 1.9; 3.0]; [10.5; 13.4; 0.4; 7.6; 10.1; 8.6; 3.8; 13.6; 10.8]; [U D T] % Matriz del sistema sobredeterminado 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 8.5000 2.0000 8.4000 6.8000 8.3000 7.1000 3.0000 1.9000 3.0000 10.5000 13.4000 0.4000 7.6000 10.1000 8.6000 3.8000 13.6000 10.8000 A = El término independiente es la columna de los precios. Premultiplicando por AT se obtienen las ecuaciones normales. N = A'*A c = A'*b N = 9.0000 49.0000 78.8000 c = 49.0000 333.9600 385.6200 78.8000 385.6200 839.7400 b = [10.5; 6.6; 7.7; 8.5; 10.2; 9.0; 4.7; 6.6; 6.6]; 70.4000 419.9300 625.6900 Resolviendo obtenemos la estimación mínimo cuadrática de los factores de la tarifa. x = N\c x = 1.5296 0.7203 0.2708 La bajada de bandera cuesta 1.53, el precio del Km es de 0.72 y el minuto de espera cuesta 0.271. Con estos datos podemos estimar el precio de un recorrido cualquiera. Por ejemplo, una carrera de 5 Km con 18 min de espera costará [1 5 18]*x = 10.01€. 14.3 Factorización QR El principal problema de las ecuaciones normales desde el punto de vista de la estabilidad numérica es la multiplicación de A por su transpuesta. Al hallar la recta de regresión, hemos visto que centrar las abscisas a su media mejora la condición de las ecuaciones normales. La matriz del sistema normal centrado es diagonal, lo que indica que las columnas de A son ortogonales. Apliquemos la idea de ortogonalizar las columnas a la matriz de un sistema sobredeterminado con columnas independientes. Esto nos evitará efectuar productos de matrices y obtendremos la solución óptima resolviendo un sistema triangular. Ortogonalizar las columnas de Am×n equivale a descomponerla en dos factores Q y R. El primero está formado por las columnas de A ortogonalizadas y el segundo es una matriz n × n triangular superior invertible (si A es de rango n) que almacena las transformaciones efectuadas. Al sustituir la factorización A = QR en el sistema de ecuaciones normales AT Ax = AT b queda ( R T Q T )(QR) x = R T Q T b Como Q es ortogonal, el término Q T Q = I desaparece, y al ser R invertible, simplificamos RT en los dos miembros, quedando el sistema triangular Rx = Q T b cuya solución es la solución óptima en sentido de mínimos cuadrados del sistema inicial. Obtendremos la factorización QR mediante el algoritmo de Gram-Schmidt modificado. El coste de la factorización se compensa por la mejora de la estabilidad numérica en la resolución del sistema resultante. 14.3.1 Método de Gram-Schmidt modificado Sea A una matriz m × n con columnas linealmente independientes. El método de GramSchmidt modificado obtiene una matriz Q de columnas ortonormales (q1 , q 2 , ..., q n ) y una matriz R triangular superior invertible tales que A = QR. En cada paso del método se obtiene una columna más de la matriz Q y una fila de R. En el paso k-ésimo, se obtiene la k-ésima columna de Q normalizando la correspondiente columna de A y se hacen ortogonales a qk las siguientes columnas de A, sustrayéndoles su proyección en la dirección de qk. Los coeficientes de la proyección son los elementos de la fila k de la matriz R. Como resultado, las n − k últimas columnas de A son ortogonales a las k columnas ya obtenidas de Q, puesto que en pasos anteriores se han eliminado las correspondientes proyecciones. Podemos establecer formalmente el algoritmo como Para k = 1, 2, ..., n Normalizar ak: rkk = a k q k = a k rkk Para j = k+1, ..., n Restar de aj su proyección sobre qk: rkj = a j , q k a j ← a j − rkj q k Fin j Fin k Ejercicio 1 Traduce este algoritmo a una función de MATLAB que operando columna a columna proporcione una factorización QR de la matriz A. 14.3.2 Factorización QR en MATLAB El algoritmo presentado en punto anterior, aunque es más estable numéricamente que la ortogonalización ordinaria de Gram-Schmidt, tiene el inconveniente de que los errores de redondeo se transmiten de un paso a otro, con lo que se puede perder la ortogonalidad. MATLAB obtiene la factorización QR mediante un proceso iterativo que trata de evitar este problema. La función correspondiente se denomina qr. Veamos cómo se utiliza en el ejemplo del taxi. [Q,R] = qr(A,0) Q = -0.3333 -0.3333 -0.3333 -0.3333 -0.3333 -0.3333 -0.3333 -0.3333 -0.3333 R = -3.0000 0 0 0.3728 -0.4202 0.3606 0.1654 0.3484 0.2020 -0.2982 -0.4324 -0.2982 -16.3333 8.1965 0 0.3370 0.2192 -0.5842 -0.0254 0.2890 0.0828 -0.5922 0.2315 0.0422 -26.2667 -5.2952 11.0346 Comprobamos que Q tiene las columnas ortonormales ya que Q'*Q = I, que R es triangular y que Q*R es A. La solución óptima del sistema Ax = b utilizando la descomposición QR se obtiene con x = R\(Q'*b) x = 1.5296 0.7203 0.2708 14.3.3 Resolución de sistemas incompatibles con MATLAB La contrabarra produce la solución mínimo cuadrática en el caso de sistemas lineales sobredeterminados. x = A\b x = 1.5296 0.7203 0.2708 14.4 Modelos Lineales Si los polinomios no proporcionan un ajuste adecuado de los datos, podemos recurrir a funciones cualesquiera, φ1 (t ), φ2 (t ), L , φn (t ) , con tal que sus valores en los puntos dados sean independientes. Exigiendo que una combinación lineal genérica de estas funciones g ( x) = a1φ1 ( x) + a2 φ2 ( x) + L + an φn ( x) ajuste los puntos {( xi , yi ), i = 1, 2, K, m}, obtenemos un sistema de m ecuaciones y n incógnitas.  φ1 ( x1 ) φ2 ( x1 ) L φn ( x1 )  y    a1   1   φ1 ( x2 ) φ2 ( x2 ) L φn ( x2 )    y 2   φ ( x ) φ ( x ) L φ ( x )  a2  =  y  2 3 3 n  1 3  M   3  M M  M    M      a n     φ0 ( xm ) φ1 ( xm ) L φn ( xm )   ym  Si el sistema resulta incompatible, planteamos las ecuaciones normales y procedemos como en el caso del ajuste polinómico. Ejemplo 4 Tenemos una mezcla de dos sustancias radiactivas con constantes de desintegración conocidas y queremos determinar las cantidades C y D de dichas sustancias. El número de desintegraciones y obedece teóricamente a la expresión y = C e t + D e 2t donde t es el tiempo medido en unidades adecuadas. Las lecturas de un contador Geiger se resumen en la tabla siguiente: t y 0 2 0.1 1.7 0.2 1.5 0.3 1.3 0.4 1.1 0.5 1 0.6 0.85 0.7 0.7 0.8 0.65 0.9 0.6 1 0.5 Estimemos C y D por mínimos cuadrados. Introducimos los datos en MATLAB: t = (0:.1:1)'; y = [2; 1.7; 1.5; 1.3; 1.1; 1; 0.85; 0.7; 0.65; 0.6; 0.5]; 2 1.8 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 0 0 0.2 0.4 0.6 0.8 1 Formamos las ecuaciones normales A = [exp(-t), exp(-2*t)] N = A'*A c = A'*y A = 1.0000 0.9048 0.8187 0.7408 0.6703 0.6065 0.5488 0.4966 0.4493 0.4066 0.3679 4.9054 3.7160 8.6073 6.6996 1.0000 0.8187 0.6703 0.5488 0.4493 0.3679 0.3012 0.2466 0.2019 0.1653 0.1353 3.7160 2.9960 N = c = La solución mínimo cuadrática es x = N\c x = 1.0043 0.9906 Por tanto, la mezcla consta de partes iguales de ambas sustancias. El error cuadrático indica la precisión del ajuste E2 = norm(y-A*x)^2 E2 = 0.0044 Evaluamos el modelo en los datos y representamos gráficamente ambos. yp = A*x; plot(t,y,'*',t,yp,'o',t,yp,':') 2 1.5 1 0.5 0 0.2 0.4 0.6 0.8 1 Figura 3: Modelo lineal exponencial 14.4.1 Linealización por cambio de variables En ocasiones, el modelo propuesto para explicar un fenómeno no tiene inicialmente expresión lineal, pero no es difícil hallar una transformación que linealice el problema y aplicar el método de mínimos cuadrados lineales. Ejemplo 5 La tabla muestra la evolución del número de abonados a teléfono móvil en España en determinado periodo. Año 1.988 1.989 1.990 1.991 1.992 1.993 1.994 1.995 Abonados Teléfono Móvil 11.689 29.783 54.712 108.451 180.296 257.250 411.930 928.955 Suponiendo que el número de abonados crece exponencialmente, tratamos de ajustar una función del tipo y = Ke at donde K y a son parámetros a determinar. Como la expresión no es lineal en estos parámetros, efectuamos la transformación log y = log K + at Cambiando a la variable z = log y y llamando b al log K, queda un modelo lineal z = at + b cuyos parámetros a y b estimamos por el método de mínimos cuadrados. Efectuamos los cálculos con MATLAB. Introducimos las abscisas en columna y las centramos t = (1988:1995)'; tm = mean(t); tn = t-tm; En y introducimos los miles de abonados y = [ 11.689 29.783 54.712 108.451 ... 180.296 257.250 411.930 928.955]'; Efectuamos el cambio de variable z = log(y); La matriz del sistema lineal sobredeterminado es A = [tn, tn.^0]; Planteamos las ecuaciones normales N = A'*A c = A'*z N = 42 0 0 8 c = 24.4573 38.1405 La solución mínimo-cuadrática es 873 2.721 2.015 2.472 2.5 Problemas Problema 1 El paro registrado en febrero de los últimos años.940 1.598.1995).427.228 2. Ajuste exponencial 14.262. yg = exp(polyval(p.tg.830 1.774. plot(t. según datos del INEM se resume en la siguiente tabla Año 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 Nº de parados 2.5823 4.820 1.579 2.y.tg-tm)).067.yg) 1000 800 600 400 200 0 1988 1989 1990 1991 1992 1993 1994 1995 Figura 4.p = N\c p = 0. Representamos gráficamente el ajuste.337.7676 que proporciona los valores de a y b.362.783.659. deshaciendo los cambios de variable tg = linspace(1988.373 2.920 .'*'.575.471. Problema 3 La tabla siguiente muestra los valores de la temperatura ambiente medida a distintas horas del día.8 0.25 a) Halla el ajuste polinómico de menor grado con índice de determinación mayor que 0.3 1. de seguir esa tendencia. \. Compara el error y el comportamiento del ajuste con el caso anterior. b) Ajusta un polinomio mínimo-cuadrático de grado 3. b) Aplicando previamente la factorización QR según el algoritmo de Gram-Scmidt a la matriz del sistema. d) Estima el número de parados en febrero de 2002. e) Obtén el mismo polinomio con polyfit.33 0. c) Aplicando el algoritmo qr de MATLAB para obtener la factorización. c) Ajusta los datos a un modelo exponencial. Q = K sin(ϕ ) convierte el problema en uno lineal: y = P sin(ωt ) + Q cos(ωt ). Hora 6 8 10 12 14 16 18 20 Grados 7 9 12 18 21 19 15 10 Normaliza las abscisas y ajusta un polinomio mínimo-cuadrático de cuarto grado por los siguientes procedimientos: a) Planteando un sistema lineal sobredeterminado y resolviendo directamente las ecuaciones normales. previa formación de las ecuaciones normales. El cambio P = K cos(ϕ ).99.2 9. Problema 4 La tabla adjunta muestra valores de una señal sinusoidal y = K sin(ωt + ϕ ) de la que se conoce la frecuencia ω = 1 y se quiere estimar la amplitud K y la fase ϕ. centrando las abscisas y centrando y escalando.5 0. Compara el número de condición de las ecuaciones normales según se efectúe o no el centrado de las abscisas.4 0. . c) Halla el error cuadrático y el índice de determinación del polinomio de grado 3. Compara la magnitud relativa de los coeficientes.a) Halla la recta de regresión. ¿Cuál es el error cuadrático? b) Dibuja los datos y el polinomio ajustado.4 2. Explica por qué este ajuste no resulta adecuado para alturas grandes. Problema 2 La densidad del aire ρ (en g/m3) varía con la altura h según la tabla siguiente 7 10 15 21 27 34 39 43 47 51 55 59 61 h ρ 556 369 191 75 26. d) Resolviendo el sistema sobredeterminado mediante la contrabarra. de tres maneras: a partir de los datos iniciales. Genera gráficos con los polinomios obtenidos de cada manera.9 4. e) Calculando directamente el polinomio mediante polyfit. siendo a>0 y n>5 dos números fijados por ti.945 168.000 a) Construye una tabla que estime los valores correspondientes al periodo 2001-2006 mediante aproximación mínimo cuadrática.409 862. e Ingen. Técn.600 347.365.2 Frec.856 148. 2.526 1995-96 1. halla el error cuadrático y representa los datos y el ajuste. a].415.4 −0.536. Compara cada polinomio ajustado con la función erf(x) para bastantes puntos y observa la relación entre el error máximo y el grado del polinomio.5 2.540.0713 1.967 210.977 133..570.184 179. a] en n partes iguales.596 807.203 349.4 0..588 872.698 844.131 227. b) Ajusta una distribución del tipo 2 y = K e − ax c) ¿Cuál de los dos modelos explica mejor los datos? Problema 6 Considera los datos de matrícula en estudios universitarios de los últimos años.493 1998-99 1.t 0 y -0.822 158. ax + b donde x es el error e y la frecuencia.6 0.359 281.1641 3 0.282 189.. n−1 y represéntalos junto a la función erf(x) en el intervalo [0.683 1994-95 1.750 115. Error 0 0. a) Ajusta los puntos por polinomios de grado 0.651 153.441 832.033 1997-98 1.272 338. b) Como la función erf(x) es impar (erf(−x) = −erf(x)). Cursos 1993-94 1. yi) dividiendo el intervalo [0.582.239 216. Problema 7 Genera una nube de puntos (xi.580. Problema 5 La tabla adjunta muestra la distribución de los errores en la medida de 100 piezas salidas de una máquina. e Ingenierías Diplomaturas Arq. según datos del INE que se muestran en la siguiente tabla Centros TOTAL Licenciaturas Arq. parece razonable aproximarla mediante un polinomio impar erf( x) ≈ c1 x + c2 x 3 + L + ck x 2 k −1 .2658 6 -0.626 1996-97 1.6 −0. y tomando yi = erf(xi). 4 4 11 10 15 18 16 8 9 2 3 a) Suponiendo que la distribución es de la forma 1 y= 2 .556 315.158 861. 1. se trata de determinar los parámetros desconocidos a y b.8 −0.065 1999-00 1 2000-01 1 1.209 202. c) Representa gráficamente los resultados.5283 Estima los valores desconocidos.731 330.737 799.944 124.8403 4.958 302.865 158.2 0.8 1 −1 −0. b) Justifica la elección del polinomio aproximante. .612 808.987 1.5 -2.905 354.471.984 223.436 141. 994 1.991 1.656 d) Con toda la información de que dispones. utilizando los mismos datos.989 1.992 1. 14. Recuerda comprobar tus predicciones cuando se publiquen los datos reales. mientras que erf(x) tiende a 1 al tender x a infinito.884 24.990 1.988 4. Compara el error máximo con el de los ajustes polinómicos.250 411. elabora un informe para una operadora de telefonía móvil estimando la evolución del mercado en 2002 y 2003.296 257. Representa gráficamente el polinomio obtenido.995 14.6 Soluciones Problema 1 a) Introducimos los datos en vectores columna: x = (1991:2001)'.2 Miles de Abonados Teléfono Móvil 2. donde z = 1+ x Problema 8 (Nota: en estas tablas.993 1.1 Abonados Teléfono Móvil 11.Analiza de nuevo cómo varía el error máximo en función del grado del polinomio.051 14.988 1. c) Los polinomios no son muy adecuados para aproximar erf(x) porque no están acotados cuando x se hace grande.5.783 54.330 7. b) Elige el menor grado del polinomio mínimo cuadrático que aproxime estos datos con la condición de que el índice de determinación sea mayor que 99%.930 928. c) Compara las predicciones efectuadas mediante los polinomios anteriores con los datos de la tabla siguiente. Modifica previamente el origen de tiempos para mejorar el comportamiento numérico del problema.451 180. . Por ello.689 29.955 a) Ajusta un polinomio de grado 7 a los datos de la tabla anterior.712 108. Año 1996 1997 1998 1999 2000 2001 14.266 29. ajusta un modelo de la forma 2 erf ( x) ≈ c1 + e − x (c2 + c3 z + c4 z 2 + c5 x 3 ) 1 . el punto indica millares) Año 1.5. 2.8 2.783940.774579.'*'. N = [sum(x. Generamos las ecuaciones normales de la recta de regresión: m = length(x). sum(x). 1.337472.262721.067830. 2. construimos primero la matriz de van der Monde.362373. 2.^2.6 2.y = [2. plot(x..6 1.427015. 2.4 2. x. A'*A A'*y N\c N = .8 1... 2.4066 2. x.x). sum(x).659820.2 2 1.0e+004 * 4. obtenemos las ecuaciones normales.y.598920].*y).471228.. multiplicando por la transpuesta y las resolvemos. p = N\c yp = polyval(p. 1. . La evaluamos en t y la representamos junto con los datos.575873. 2.^3.^2).8536 0. 2.yp) title('Recta de regresión') p = -0.0024 La solución proporciona los coeficientes de la recta P1 ( x) = a1 x + a2 . A N c p = = = = [x.4 1990 1992 1994 1996 1998 2000 2002 b) Para determinar el ajuste mínimo-cuadrático de grado 3. .x. 1. x. sum(y)] N = 43824286 21956 21956 11 c = 1.^0]. m] c = [sum(x.0938 189. yg = polyval(p.0000 c = 1.2001). debido a la diferencia relativa de los valores de los coeficientes del polinomio.xgn).^2.4176 ans = 8.0000 0. Results may be inaccurate.xg. xn. xg = linspace(1991.xg).0e+005 * 0.0207 -0.205179e-035.0035 0. . cond(N) ans = 1.'*'.0000 0.0000 0.0e+020 * 6.0000 0.0033 -0.ygn).0000 Warning: Matrix is close to singular or badly scaled.0000 0. El sistema es casi singular. A = [xn. ygn = polyval(pn.^3.0000 0.0010 0.xg.0000 0.7791 this El número de condición el sistema es muy elevado.0035 0. xn = x-xm. xgn = xg-xm.) p = 1.1.9562 0.0000 0.1361e+035 Repretimos el cálculo centrando los datos xm = mean(x).0000 -0.0000 0.0000 0. xn.0e+011 * 1.^0]. xn.0000 0.0000 0. N = A'*A c = A'*y. (Type "warning off MATLAB:nearlySingularMatrix" to suppress warning. RCOND = 3.y. plot(x.0000 0.9329 0.0023 -1.0000 0.1523 2.yg.5584e+003 Comparando gráficamente los resultados se aprecia que al ajustar con las abscisas iniciales se pierde el término de grado 3.':'. pn = N\c cond(N) N = 41030 0 1958 0 0 1958 0 110 1958 0 110 0 0 110 0 11 pn = 0. Primero con las abscisas originales: MATLAB avisa de la necesidad de centrar los datos.4 2.4 1990 1992 1994 1996 1998 2000 2002 c) Error cuadrático: evaluamos el polinomio en las abscisas y lo comparamos con las ordenadas: yp = polyval(pn. p = polyfit(x.2.6 1. Remove repeated data points or try centering and scaling as described in HELP POLYFIT. I = (norm(yp-ym)/norm(y-ym))^2 I = 0.3) yg = polyval(p. polyval(pn.y.8 1. E2 = norm(y-yp)^2 E2 = 0.4702 e) Repetimos los cálculos con polyfit.) > In C:\Matlab\toolbox\matlab\polyfun\polyfit.xn).m at line 75 p = 1.0e+007 * .2002-xm) ans = 1. Warning: Polynomial is badly conditioned.2 2 1. Evaluamos el polinomio para comparar con los otros ajustes. aunque el resultado es más preciso que el obtenido a partir de las ecuaciones normales.6 2.9411 d) El valor del polinomio en 2002 (previo desplazamiento) estima el número de parados de ese año.0876 Índice de determinación: comparamos las desviaciones de las ordenadas calculadas y de las ordenadas de los datos respecto a su media: ym = mean(y).8 2. (Type "warning off MATLAB:polyfit:RepeatedPointsOrRescale" to suppress this warning.xg). 0033 [4x4 double] 7 0.3) ygn = polyval(p.0207 -0.xg.1199 -0.'*'.xgu).3) xgu = (xg-mu(1))/mu(2).4176 R: df: normr: mu = 1.ygu.'+'.s.y. p = 0.8866e-015 2.5051 2.2 2 1.0000 0.4176 La sintaxis más compleja de polyfit centra y normaliza las abscisas.'o') max(abs(ygn-yg)) max(abs(ygn-ygu)) ans = 6. La diferencia entre los dos últimos es del orden de 10 −15 y la de éstos con el primero.0039 -2.ygn. del orden de 10 −8.yg. proporcionando el polinomio con coeficientes más equilibrados.xg.8 2.0000 -0. p = s = 0.0.6 1.0033 -0.9960 0.xgn).2272 -0. plot(x.8 1.2960 * Los valores de los tres ajustes son suficientemente aproximados para no ser gráficamente distinguibles.6221 Los coeficientes del polinomio ajustado tienen escalas muy diferentes: de 10 −4 a 10 4.y.y.1523 2.0e+003 1.xg.6 2.mu] = polyfit(x.4 1990 1992 1994 1996 1998 2000 2002 . ygu = polyval(p.4 2. Centrando las abscisas a la media evitamos el aviso de inestabilidad y obtenemos un polinomio cuyos coeficentes están mejor escalados: p = polyfit(xn. [p.8915e-008 ans = 2. 2 9.9886 Aumentamos el grado y comprobamos que el polinomio pedido es el de grado 4. p = polyfit(h.9990 0.4 2. r = [556 369 191 75 26.0000 -0.4 0.'*'.r.1253 b) Evaluamos el polinomio para varias alturas y lo representamos junto a los datos hg = 5:5:65.'o'.r.1097 1.33 0.8 0.7017 -70.8466 941. y probamos con un polinomio de tercer grado p = polyfit(h. rm = mean(r).0131 1.h).9 4.4) rp =polyval(p. rm = mean(r). indice=(norm(rp-rm)/norm(r-rm))^2 p = 1.h.3) p = -0.1436 El error cuadrático será norm(rp-r)^2 ans = 359.5 0.hg.h).Figura 5 Ajustes de polyfit con distintas abscisas Problema 2 a) Ajuste polinómico Almacenamos los datos en sendos vectores h = [7 10 15 21 27 34 39 43 47 51 55 59 61]. plot(h.0001 0.0039 -0.r.25].9188 Para hallar el índice de determinación evaluamos el polinomio y comparamos con los datos: rp =polyval(p. indice=(norm(rp-rm)/norm(r-rm))^2 indice = 0.rg) 700 600 500 400 300 200 100 0 -100 0 10 20 30 40 50 60 70 .rp. rg = polyval(p.0e+003 * indice = 0.3 1.hg). 1459 7. como se aprecia en el gráfico siguiente.r.1) p = -0.hg). y=exp(ly).yg) 800 700 600 500 400 300 200 100 0 0 10 20 30 40 50 60 70 Figura 7: Ajuste exponencial .3088 Evaluamos el polinomio en h para obtener el error cuadrático ly=polyval(p. lyg=polyval(p. norm(r-y)^2 ans = 1. c) Proponemos un modelo del tipo ρ = e Ah+ B que se linealiza tomando logaritmos: log ρ = Ah + B Realizamos los cálculos con MATLAB ajustando un polinomio de grado 1 al logaritmo de la presión: lr=log(r).lr.hg. pero ahora se obtiene una función positiva decreciente. yg=exp(lyg).'*'.Figura 6: Ajuste polinómico El ajuste no representa adecuadamente los datos porque para altura grande toma valores negativos y finalmente se hace creciente. con menor error para valores grandes de h.3918e+003 El error cuadrático es mayor que el del ajuste polinómico. plot(h.h). p=polyfit(h. 0000 1.9006 6. Formamos las ecuaciones normales: N = A'*A. plot(t.6124 1.0417 0. s = std(t). y = [7.0017 0. 20].'*'. 12.0085 0. 19.0851 0.0417 -1.0417 2.1406 0. 18.0000 1.9173 -1. 15.0000 1.9173 2. 21.2296 -0.1684 1.2159 -2.y. a) La matriz del sistema sobredeterminado es A = [x.1406 1. x = (t-m)/s.0085 0.2296 1.yg) .0206 -0.0631 -0. Normalizamos las abscisas: m = mean(t).4289 -1.5488 Representémoslo gráficamente: xg = (tg-m)/s.0206 19.0631 2.^0] A = 4.0000 La columna de términos independientes es el vector de temperaturas.^4 x.6124 -0. Resolviéndolas obtenemos los coeficientes del polinomio buscado: p = N\c p = 2. 18.4866 -9.2041 0.0417 0.3750 0. 12.0000 1.Problema 3 Introducimos los datos en columna: t = [6.3750 1.2041 0.^3 x. 9.tg.1684 -2. yg = polyval(p. 10].4289 1.0017 0. 10. 14.0206 1. c = A'*y.0417 0.0000 1. 8.0417 1. 16.0000 1.^2 x x.0851 4.xg).0000 1. 4304 -0.0231 0.5794 -0.0000 1.4031 0 0 0 -0.j) = A(:. [m.j)).1632 0.2415 0.R = [].2001 0.2398 -0.0497 0.j)).8204 0 0 0.0423 -0.2398 0.3676 0.6626 -0. Q(:.j).1957 0.0019 0.6670 -0.0003 0.1946 0.k)*Q(:.4863 -0.0497 0.5794 0. for k = j+1:n R(j.R]=miqr(A) % % Factorización de la matriz a en q ortogonal % y r triangular superior invertible % Las columnas de a deben ser independientes Q = [].k) = A(:.0019 0.1810 0 0.4509 0 0.3676 0.22 20 18 16 14 12 10 8 6 6 8 10 12 14 16 18 20 b) El algoritmo de Gram-Schmidt modificado se traduce en la siguiente función de MATLAB function [Q.2415 -0.4863 0. end end Esta función descompone A en los factores Q R Q = 0.0947 0 0 0 0 -0.j)/R(j.Q(:.1780 0.0000 2.4304 -0.6839 0.0522 -0.6839 6.1946 0.n] = size(A).6347 0.0231 0.7707 0 1.4443 R = .6626 0 4.k).0423 1.6347 0.2001 0.1957 -0.1632 3. A(:.1780 0.0522 0.j). for j = 1:n R(j.k)-R(j.9965 0 0.j) = norm(A(:.0003 0.k) = dot(A(:. 5488 e) Obtenemos ahora el polinomio directamente con polyfit pe = polyfit(x.0019 0.1957 -0.6670 0.4866 -9.1946 -0.9006 6.6626 -0.5488 d) El polinomio que resulta resolviendo el sistema sobredeterminado es pd = A\y pd = 2.0000 -1.0000 -0.La solución mínimo cuadrática del sistema sobredeterminado Ax = b se obtiene resolviendo el sistema triangular Rx = Q T b .1632 -3.0497 -0.6347 -0.2415 -0.0206 19.0497 -0.0000 -1.0206 19.^0].6839 -0.0206 19. pb = R\(Q'*y) pb = 2.4) pe = 2.2159 -2.5488 .4863 -0.1780 -0.5794 -0. factorizamos A por el algoritmo qr de MATLAB A = [x.y.^4 x.1810 -0.3676 -0.2001 0.4866 -9.2398 -0.9006 6.0423 -1.0003 -0.^3 x.1957 0 2.2001 0.5488 c) En lugar de Gram-Schmidt.2159 -2.0231 -0.1946 -0.4304 -0.2159 -2.9965 0 -0.0003 -0.7707 0.4304 -0.3676 -0. [Q.2398 0.R] = qr(A.4443 y la solución se obtiene igual pc = R\(Q'*y) pc = 2.5794 0.1780 -0.0947 0 0 0 0 -0.0423 0.^2 x x.6626 0 4.0) Q = -0.0231 -0.4509 0 0.9006 6.2415 0.0206 19.2159 -2.4031 0 0 0 0.1632 -0.8204 0 0 0.0019 0.4863 0.4866 -9.6347 -0.0522 -0.6839 R = -6.0522 0.4866 -9.9006 6. 0552 -0.7831 Deshacemos el cambio de variables para obtener el módulo y la fase de la señal: Q F = P2 + Q2 .x(1)) F = 2.5283]'. Almacenamos los datos en columna: t=(0:1. con la precisión mostrada.0713 -2. tan(ϕ ) = P F = norm(x) fi = atan2(x(2). N=A'*A.8403 2. Las diferencias en valores del polinomio entre los distintos apartados son del orden de 10−14. Problema 4 Determinamos M y N resolviendo por mínimos cuadrados el sistema obtenido al sustituir cada par de datos en la ecuación y = M sin(ωt ) + N cos(ωt ). x=N\c x = -2.5:6)'. Efectuamos los cálculos con MATLAB. Los apartados c) y e) dan exactamente el mismo resultado. c=A'*y.2658 -0.Comprobamos que. el resultado es siempre el mismo. pues polyfit aplica qr a la matriz del sistema. Construimos la matriz del sistema y resolvemos las ecuaciones normales: A=[sin(t) cos(t)]. y=[-0.1641 0.1994 fi = -2.7776 3 2 1 0 -1 -2 -3 0 1 2 3 4 5 6 7 Evaluamos el resultado en los datos y calculamos el error: . E2= norm(y-1. evaluamos el ajuste en un rango más detallado: tg = linspace(0. plot(t. E2 = norm(y-yp)^2 E2 = 0.tg.yp./y.'+'. Invirtiendo ambos términos se obtiene un modelo lineal: ax 2 + b = 1 / y El sistema sobredeterminado tiene matriz A y términos independientes 1/y.1). Lo resolvemos directamente con MATLAB: p = A\c p = 0.y.7675 Para hacer el gráfico. y = [4 4 11 10 15 18 16 8 9 2 3]'./zp)^2 E2 = 49. .yg) 3 2 1 0 -1 -2 -3 0 1 2 3 4 5 6 7 Problema 5 a) Editamos unos vectores columna con los datos: x = (-1:0. yg = F*sin(tg+fi).'*'.^0].^2 x.yp = A*x. A=[x.2*pi)'.0605 Hallamos el error cuadrático en términos de los datos originales zp = A*p.t. c=1.0025 Representamos gráficamente el ajuste: xg = linspace(-1.2:1)'.2908 0. '*'.xg. observando que es ligenrmente superior al del modelo anterior.y.7298 Hallamos el error cuadrático en términos de los datos originales. p = A\c p = 2.^2). zp = A*p.zg) b) Linealizamos el modelo tomando logaritmos log y = log K − ax 2 Resolvemos las ecuaciones normales: A=[x.1)./(p(1)*xg. plot(x.^2]. c=log(y).xg.4532 Representamos gráficamente el ajuste: xg = linspace(-1.zg = 1.'*'.^0 -x. E2= norm(y-exp(zp))^2 E2 = 51.^2+p(2)).zg) .y. zg = exp(p(1)-p(2)*xg. plot(x.6840 1. sum(y)]. 1995)..x_graf..4554 (NOTA: %norm hace la raiz de la suma de los cuadrados NORM(V. sum(x) length(x)]. NORM(V) = norm(V. >> p = N\c p= 1.0015 --> la pendiente -2.2). >> E2 = norm(y-yp)^2 E2 = 3.y..*y). >> y = [28.8892 --> corte con eje y -.20Matematicas/Practica%2014%20-%20MinimoCuadratica/practica%2014.'.'.6 35.5]'. >> bar(x.^P)^(1/P).4 37.1 30 32.Jiustificacion utilizando la premultiplicacion por la traspuesta: ->> A = [x x. >> c = [sum(x.3 36.x_graf).. >> plot(x.x).y) >> N = [sum(x.5 38.^2) sum(x).^0] A= 1988 1 1989 1 1990 1 file:///E|/Documentos/Estudios/Documentacion%20Asignat.y_graf) -.Practica%2014%20-%20MinimoCuadratica/practica%2014.txt (1 of 5) [09/03/2008 13:49:33] .P) = sum(abs(V).txt Recta de Regresión ----------------->> x = (1988:1995)'.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labora.Representacion Gráfica: ->> x_graf = linspace(1988.3 34.Error Cuadrático: ->> yp = polyval(p.0e+003 * 0. ) -. >> y_graf = polyval(p. >> N = A'*A.'.x_graf.txt (2 of 5) [09/03/2008 13:49:33] . >> plot(x.20Matematicas/Practica%2014%20-%20MinimoCuadratica/practica%2014.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labora. >> c = A'*y. >> hold on >> p = N\c..4314 0..^0].x_graf).x).y.0e+005 * 5. >> y_graf = polyval(p.^2 x x.0027 1 1 1 1 1 15932 8 >> p = N\c Ajuste con polinomio de mayor grado: ----------------------------------->> A = [x.Reduccion del condicionamiento -- file:///E|/Documentos/Estudios/Documentacion%20Asignat.6005 Es un error cuadrático bastante menor -.'..Practica%2014%20-%20MinimoCuadratica/practica%2014.. E2 = norm(y-yp)^2 E2 = 0.y_graf) -.txt 1991 1992 1993 1994 1995 >> N = A'*A N= 31728620 15932 >> c=A'*y c= 1.Error cuadrático: ->> yp = polyval(p. Practica%2014%20-%20MinimoCuadratica/practica%2014.^2 xn xn.^0]. >> p = N\c. >> c = A'*y.x_graf-mean(x)).'.^2 xn xn.x_graf.mean(x) xn = -3.x). -.Indice de determinacion ->> I=norm((yp-mean(y))/norm(y-mean(y)))..y_graf. >> c = A'*y.'g') -.x_graf.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labora.x_graf-mean(x)). >> plot(x.5238 -.5000 -0.5000 >> A = [xn. >> N = A'*A.'g') >> yp = polyval(p.'. >> y_graf = polyval(p.y. >> N = A'*A..txt >> xn = x .'.xn). >> plot(x. >> E2 = norm(y-yp)^2 E2 = 0..5000 -2. >> p = N\c..9944 file:///E|/Documentos/Estudios/Documentacion%20Asignat.Mayor grado ->> A = [xn.y.5000 3.5000 1.Error cuadratico ->> yp = polyval(p.y_graf.txt (3 of 5) [09/03/2008 13:49:33] .5000 2.20Matematicas/Practica%2014%20-%20MinimoCuadratica/practica%2014.^3 xn.5000 -1.'.^0].5000 0.^2 I= 0. >> y_graf = polyval(p. 20Matematicas/Practica%2014%20-%20MinimoCuadratica/practica%2014.712 108.955]' -------------------------------Linealizacion de una exponencial ------------------------------->> y_exp = [11..file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labora.296 257. >> x_exp = [1988:1995]'. % Comprobacion de que lo lineal esta bien file:///E|/Documentos/Estudios/Documentacion%20Asignat.txt --.451 180.R] = qr(A) >> p = R\(Q'*y) p= 0.250 411. >> p = N\c.. >> A = [t t.Factorizacion QR -[Q..930 928.783 54.250 411.3627 34.3627 34. >> t = x_exp.0114 -0.689 29.955]'.689 29.7719 % Utilizando la 'magnificiencia' de Matlab xD >> A\y ans = 0..txt (4 of 5) [09/03/2008 13:49:33] .7719 y = [11.1304 1.^0]. >> c=A'*y.930 928.712 108.783 54. >> N = A'*A.1304 1.Practica%2014%20-%20MinimoCuadratica/practica%2014.451 180. %Linealizacion y = Ke^(a*t) --> log y = log K + a*t >> y = log(y_exp).0114 -0.296 257. 3 34.x_graf)).3 36.1995)).1995).'.x_graf.4 37.txt >> x_graf = linspace(1988.20Matematicas/Practica%2014%20-%20MinimoCuadratica/practica%2014. ------- ---Ejemplo --->> x = (1988:1995)'.y) >> A = [x.6 35.y_exp. linspace(1988. >> y_graf = exp(polyval(p.Practica%2014%20-%20MinimoCuadratica/practica%2014.'. >> plot(linspace(1988.txt (5 of 5) [09/03/2008 13:49:34] .'... >> y = [28.y_graf) -----Estudiando..^0]. >> c = A'*y. >> yg = polyval(sol. bar(x. >> plot(t. >> sol = N\c >> xg = linspace(1988.x_graf.1995)..'.5]'. >> N = A'*A.x_graf)) % 'Deshacer el cambio' >> x_graf = linspace(1988.y) >> bar(x.y.polyval(p. >> plot(x_exp.5 38...1995). yg) file:///E|/Documentos/Estudios/Documentacion%20Asignat.1 30 32.^2 x x.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labora.1995). 0-%20Funcional%20minimocuadratica/practica%2015.x).txt (1 of 2) [09/03/2008 13:49:34] ..7884 el polinomio se ha obtenido de menor a mayor grado.Convendria aumentar el grado del polinomio El problema de este método es que los calculos hechos no tienen file:///E|/Documentos/Estudios/Documentacion%20Asignatu.y) -.Creamos el sistema >> N = hilb(3).*x).y.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labora. >> b(3) = trapz(x.y.actica%2015%20-%20Funcional%20minimocuadratica/practica%2015. Hay que darle la vuelta.txt. >> b(2) = trapz(x.^2). >> y = sin(pi*x.y.Los puntos serviran tanto para plot como para integrar con trapz >> h = 0. -.':'..001. -.*x.3552 3. %matriz coeficientes >> b(1) = trapz(x.. %vector terminos independientes -.Dibujamos la funcion >> plot(x.y). >> b = b(:).z) -.5790 -2.x.txt Aproximacion funcional mínimo cuadrática ---------------------------------------- -.Dibujamos la aproximacion >> z = polyval(p.txt. >> x = 0:h:1.Resolvemos el sistema >> c = N\b c= -0. pero matlab funciona al reves. >> p = flipud(c).. >> plot(x.^2). ':'.txt ninguna utilidad. >> c = N\b c= 0. >> plot(x.2993 -8..1) = trapz(x. Hay que recalcularlo todo.z) -.*x.x.txt.x).Condicionamiento >> cond(N) ans = 1.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labora. >> N = hilb(4).^3). >> z = polyval(p.actica%2015%20-%20Funcional%20minimocuadratica/practica%2015..txt (2 of 2) [09/03/2008 13:49:34] ..y.5514e+004 --------------------------------Funcion desarrollo en serie de Legendre -------------------------------------- file:///E|/Documentos/Estudios/Documentacion%20Asignatu.0-%20Funcional%20minimocuadratica/practica%2015.6560 10. >> b(4.0811 -1.txt.7251 >> p = flipud(c).y.. llamadas funciones base: g ( x) = c1 g1 ( x) + c2 g 2 ( x) + L + cn g n ( x) 1 . Aproximación Funcional Mínimo-Cuadrática Dada una función f real o compleja. pero ahora definido en un espacio infinito dimensional. x2. sino toda una función en un intervalo mediante una combinación lineal de funciones base. x. En este tema. 15. y lo que es peor. que contiene en particular a las funciones continuas en el intervalo de trabajo. con respecto a distintos productos escalares. adecuadas cada una de ellas para aproximar distintos tipos de funciones y que tienen importantes aplicaciones. El cálculo de la proyección ortogonal desemboca en la formulación de las ecuaciones normales. Aproximación funcional mínimocuadrática. La aproximación polinómica se puede realizar considerando distintos sistemas de polinomios ortogonales.______________________________________________________________________ 15. Para ello usaremos también un producto escalar. no un número finito de puntos. como son la integración numérica y la resolución de ecuaciones en derivadas parciales. En la práctica. Conviene. obtenidos al aplicar el método de ortogonalización de GramSchmidt a los polinomios básicos 1. por lo tanto. Planteamos en primer lugar el problema de la aproximación funcional mínimo cuadrática y lo interpretamos como la minimización de una norma procedente de un producto escalar.. el sistema lineal resultante suele ser mal condicionado. Polinomios ortogonales En el tema anterior obteníamos el polinomio p(x) de cierto grado que mejor aproximaba un número finito de puntos en el sentido de hacer mínimo el error cuadrático. .. Los polinomios ortogonales más utilizados en intervalos acotados son los de Legendre y los de Chebyshef. . definida en un intervalo [a. la obtención de estas ecuaciones resulta muy costosa. Estos inconvenientes aconsejan la utilización de bases ortonormales en los subespacios de las funciones aproximantes. Analizaremos varias de estas bases ortonormales. Tal producto se define mediante una integral y su cálculo práctico es más costoso que el de un producto escalar en dimensión finita.1. La solución viene dada por una proyección ortogonal respecto a dicho producto escalar. trabajar con bases ortonormales para efectuar el mínimo número posible de productos escalares. se trata de aproximarla mediante una función g combinación lineal de funciones sencillas. además de la aproximación propiamente dicha. b]. el objetivo es aproximar. Ejemplo 1 Aproximemos la función f ( x) = sin(πx 2 ) en el intervalo [0. g i > donde hemos omitido el término que se anula < h. ortogonal a las mismas: f = g + h = c1 g1 + c2 g 2 + L + cn g n + h Al imponer la ortogonalidad de h a las funciones base. 1] mediante un polinomio p(x) de grado 2 que minimice el error cuadrático E2 = f − p = 2 ∫ 1 0 f ( x) − p ( x) 2 dx Descomponemos f(x) en suma de un polinomio de grado 2. g i > . Si las funciones toman valores complejos. g es la proyección ortogonal de f sobre el subespacio engendrado por las funciones base. Una elección sencilla consiste en considerar un peso constante. en primer lugar. y el otro. Por las propiedades del espacio euclídeo. g i > + c2 < g 2 . descomponemos f en dos sumandos: uno. Para obtener dicha proyección. Supongamos que las funciones toman valores reales. Volviendo a nuestro problema. para que el producto escalar té bien definido. a menor distancia de f. Se define el producto escalar mediante la integral < f . En este tema consideramos distancias que provienen de un producto escalar. Veamos pues. < f . hemos de conjugar uno de los factores < f . p(x) y una función. combinación lineal de las funciones base. la distancia entre f y g: d( f . g ) = f − g .Aproximación funcional mínimo-cuadrática 2 Las funciones base gi son dadas y los coeficientes ci se determinan de modo que se minimice la distancia entre f y g. q(x).g > = ∫ b a w( x) f ( x ) g ( x ) dx Distintas elecciones del peso dan lugar a diferentes productos escalares. f > = ∫ b a w( x) f ( x ) f ( x ) dx = ∫ b a w( x ) f ( x ) dx 2 y a partir de la norma. f ( x) = c0 + c1 x + c 2 x 2 + q( x) Exigimos que q sea ortogonal a 1. A partir del producto escalar se define la norma f 2 =< f . g i > + L + cn < g n . x y x2: . tratamos de hallar la función g. g i > = c1 < g1 . cuya solución proporciona los coeficientes de la proyección buscada. se obtiene el sistema de ecuaciones normales. denominada peso. combinación lineal de las funciones base.g > = ∫ w( x) f ( x) g ( x) dx a b donde w(x) es una función no negativa en el mismo intervalo. cómo se define el producto escalar en un espacio de funciones. x 2 > = c0 < 1 .2 0. 1 >    2 < f ( x).8 0. x > + c1 < x . x 2 > + c2 < x 2 .3 Aproximación Funcional Mínimo-Cuadrática + c2 < x 2 . x > + c2 < x . 1 > + c1 < x . x >   < f ( x).4 0. % Nodos equiespaciados s = h/3*(y(1) + y(n) + 4*sum(y(2:2:n-1)) + 2*sum(y(3:2:n-2))). 1 > Los elementos de la matriz del sistema se pueden calcular analíticamente ni j =< x i −1 . Tomamos bastantes nodos para que la estimación de la integral por trapecios sea suficientemente . x 2 > + c1 < x. podemos aplicar la función trapz de MATLAB o editar un programa como el siguiente que aplica el método de Simpson. en lugar de la función que evalúa el integrando. x 2 >  < f ( x).4 0.2 0 0 0. x j −1 >= ∫ 1 0 x i −1 x j −1 dx = 1 i + j −1 resultando así la llamada matriz de Hilbert 1 0. pero en general hay que aplicar una fórmula de cuadratura numérica. Por ejemplo. Para no tener que editar un fichero de función por cada integrando. function s = simpson(x. Determinemos el polinomio mínimo-cuadrático operando con MATLAB.8 1 1  N =1 2 1 3   1 4  1 5 1 3 Los términos independientes se obtienen analíticamente en este ejemplo con un poco más de esfuerzo. 1 > = c0 < 1 . x > = c0 < 1 .6 0.y) n = length(x). h = x(2)-x(1).6 1 2 1 3 1 4 0. utilizamos un método de integración que acepte como parámetro de entrada los valores del integrando en los nodos. b(2) = trapz(x.Aproximación funcional mínimo-cuadrática 4 precisa (en caso de duda.*x).y.5 0 -0. b = b(:) c = N\b b = 0. z = polyval(p. x = 0:h:1.7884 Ordenamos los coeficientes del polinomio de mayor a menor grado y lo representamos gráficamente.2187 c = -0.x. p = flipud(c). plot(x.(y-z).y).z) 1 0.^2) . Representamos la función a aproximar.3183 0. E2 = trapz(x. y = sin(pi*x.3552 3.5049 0.*x. directamente y los términos independientes evaluando las integrales. La matriz. h = 0. deberíamos usar trapecios iterativo u otro método de mayor orden).001. b(1) = trapz(x.y) Construimos y resolvemos el sistema de ecuaciones normales.8 1 Estimamos el error cuadrático integrando el cuadrado de la diferencia entre la función y la aproximación.x).y.5 0 0.5790 -2.^2). b(3) = trapz(x.6 0. plot(x.^2).2 0. N = hilb(3).4 0.y. 1)*J. trapz(x. Podemos obtener la matriz del sistema mediante dos bucles anidados: for i=1:5 for j=1:5 k=i+j-1. N(i. [y. mínimocuadrático con respecto a la norma integral en el intervalo [1. end end Una alternativa más eficiente por no usar bucles. ones(5. Aplicando trapz a una matriz cuyas columnas son los sucesivos integrandos.^4]. pero realizando las integrales en el intervalo [1.*x. J'.j)=(10^k-1)/k. y.Y)' b = . La matriz del sistema tiene elementos ni j =< x i −1 .01. y. x j −1 >= y los términos independientes son bi =< f ( x).^3.5 E2 = 0./x. I+J-1.10]. (10.*x. y. Ejemplo 2 Aproxima la función f ( x) = 1 / x por un polinomio de cuarto grado. x i −1 ∫ 10 1 x i −1 x j −1 dx = 10 i + j −1 − 1 i + j +1 >= ∫ 10 1 1 i −1 10 i −1 − 1 x dx = x i + j +1 para y los términos independientes son Efectuamos los cálculos con MATLAB. Procedemos como en el ejemplo anterior.0278 Aproximación Funcional Mínimo-Cuadrática Ejercicio 1 Dibuja el polinomio mínimo cuadrático de tercer grado que aproxima la función dada.*x. (1:h:10)'./K.^K-1).10].^2. y.*x. 1. obtenemos de una vez los términos independientes: h x y Y b = = = = = 0. sugerida por el código de la función hilb es la siguiente: J J I K N = = = = = 1:5. z = polyval(p.0495 0.3330 2.6 0.y.(y-z).z) c = 1.4 0.1920 -0.0008 1 0.Aproximación funcional mínimo-cuadrática 1. lo que limita en la práctica el grado del polinomio de aproximación.8266e+009 .8 0.0023 0.x).0e+003 * 0. cond(N) ans = 6. c = N\b p = flipud(c).0019 La condición del sistema de ecuaciones normales es elevada.2 0 1 2 3 4 5 6 7 8 9 10 El error cuadrático es: E2 = trapz(x.^2) E2 = 0.0199 0.5641 -0.x.8302 0. plot(x.4998 6 Resolvemos el sistema para obtener el polinomio mínimo-cuadrático y lo representamos junto a la función a aproximar.0090 0. Cada sumando ck g k es la proyección ortogonal de f sobre la dirección gk y al ser estas direcciones ortogonales. se reduce el número de integrales a calcular (la matriz es diagonal. g 2 . se asegura. x2. Multiplicando escalarmente la descomposición f = g + h = c1 g1 + c2 g 2 + L + cn g n + h por gj se obtienen unas ecuaciones normales de solución inmediata < f .2.7 15. De este modo. la "máxima" independencia posible entre las funciones base y. Para ello. trabajaremos siempre con bases ortogonales para obtener aproximaciones funcionales mínimo cuadráticas. si tenemos un sistema ortogonal de polinomios de grado creciente. se denominan polinomios de Legendre. 1].3. g j = 0 . g k > = ck < g k .. el error cuadrático se expresa sencillamente como suma de los cuadrados de las normas de las proyecciones en la dirección de los vectores básicos. pues g k . pues las operaciones previas se aprovechan completamente. n.. Polinomios de Legendre Consideremos el espacio de las funciones continuas en el intervalo [−1. por una parte. como sugiere la semejanza de sus gráficas. podemos ortogonalizar sucesivamente los polinomios 1. En el caso de base no ortogonal.. Esto se debe a que las funciones 1.. Así. por otra. podemos obtener sucesivamente la mejor aproximación de cada grado. K. salvo un factor constante. Los polinomios ortogonales resultantes. f −g 2 = f 2 − g 2 = c1 g1 + c2 g 2 2 2 + L + cn g n 2 El añadir un elemento más a la base ortogonal supone el mínimo trabajo. g n } del subespacio sobre el que proyectamos.. xn. con respecto a dicho producto escalar. para k = 1. obteniéndose mediante el cálculo aproximado de n(n+1)/2 integrales (es simétrica). son "poco" independientes en el intervalo [0. cambia completamente la solución de las ecuaciones normales. x. al cambiar de grado. .g > = ∫ b a f ( x ) g ( x ) dx Tratamos de obtener una base ortogonal del subespacio de los polinomios de grado menor o igual que n. lo que supone un coste considerable. Aproximando en otros intervalos o respecto a otras funciones. Debido también a la ortogonalidad. 15. el sistema de ecuaciones normales del que se obtiene el polinomio mínimo-cuadrático es mal condicionado. x2. g k >. por ejemplo. Bases ortogonales Aproximación Funcional Mínimo-Cuadrática En los ejemplos anteriores. x. Los primeros polinomios son: . recurrimos a una base ortogonal {g1 . a partir de ahora. la proyección ortogonal g sobre el subespacio generado es la suma de estas proyecciones. Por estas razones. Para evitar estos problemas. . la matriz no tiene una expresión analítica tan sencilla. 1] con el producto escalar definido por la integral < f . 2. …. para i ≠ j ) y se mejora la estabilidad numérica. 8 -1 -1 -0.Aproximación funcional mínimo-cuadrática 8 P0 ( x) = 1 P1 ( x) = x 3x 2 − 1 P2 ( x) = 2 5 x 3 − 3x 2 35 x 4 − 30 x 2 + 3 P4 ( x) = 8 P3 ( x) = Los polinomios de Legendre verifican la siguiente relación recursiva.5 1 P3 P4 P5 P1 P2 P1 ( x) = x Figura 1: Polinomios de Legendre en [−1.2 -0.6 0.2 0 -0. P0 ( x) = 1 Pk +1 ( x) = ((2k + 1) xPk ( x) − kPk −1 ( x) ) (k + 1) para k = 1. end .k*[0 0 r])/(k+1) r = q.1] Aplicando formalmente la recursión.5 0 0.4 -0.8 0.4 0. 2. puedes comprobar el resultado tal como aparece en las tablas. … P0 1 0. Si ejecutas el programa siguiente con format rat. q = p. function p = polegend(n) r = 1 % p0(x) = 1 q = [1 0] % p1(x) = x for k = 1 : n-1 % Polinomio de grado k+1 p=((2*k+1)*[q 0].6 -0. que se utiliza para generarlos. obtenemos los coeficientes del polinomio de Legendre de cualquier grado. 6 0.2 0 0.8 1 function c = serielegnorm(f. ….4 grado 2 grado 0 0. utilizando los polinomios de Legendre P0.4 0. . Para efectuar 2k + 1 los cálculos editamos un programa de MATLAB que trabaja con los valores de los polinomios de Legendre.4 -0.6 -0.9 Ejemplo 3 Polinomios de Legendre 1 en [−1.6 grado 4 0. La aproximación pedida es Aproximemos la función de Runge f ( x) = g = c0 P0 + c1 P1 + +c2 P2 + L + c6 P6 donde los coeficientes ck se obtienen de las expresiones Pk ( x) dx < f .8 -0. El denominador 1. P1. 1] por un polinomio 1 + 25 x 2 mínimo-cuadrático de grado 6.1] m = 100*(n+1).n) % Aproximación de f por polinomios de Legendre de grado n en [-1. Pk > ( Pk ( x)) 2 dx ∫−1 2k + 1 1 1 f ( x) Pk ( x) dx ∫ 2 es el cuadrado de la norma del polinomio Pk. Pk > ∫−1 −1 1 + 25 x 5 = 1 = ck = 2 < Pk . El programa obtiene un polinomio ortogonal en cada paso utilizando la relación de recurrencia.2 0 -0.2 -1 -0.2 0. P6.2 1 0. P2. en lugar de su expresión analítica. proyecta al mismo tiempo la función a aproximar sobre dicho polinomio y acumula las proyecciones obteniendo la mejor aproximación para cada grado.8 grado 6 0. Z = z. c(k+2) = trapz(x. cos t. c(2) = trapz(x.x). ∫ 0 si j ≠ k  π π cos( j + k )t + cos( j − k )t  dt = π si j = k = 0 cos( jt ) cos(kt ) dt = 0 0 2  π 2 si j = k > 0  ∫ Si hacemos el cambio de variable x = cos(t).y. Z = [Z..4.*p)*(2*k+3)/2.1. Tras el cambio de variable.y.y.*q-k*r)/(k+1).Aproximación funcional mínimo-cuadrática x = linspace(-1. y = feval(f. c(1) = trapz(x.x. π]. plot(x. la ortogonalidad de los cosenos se convierte en ortogonalidad entre polinomios . 10 % P0 % Coeficiente de P0 % Aproximación de grado 0 % P1 % Coeficiente de P1 % Aproximación de grado 1 % Pk+1 % Coeficiente de Pk+1 % Aproximación de grado k+1 % Términos de la recursión end 15.. z]. plot(x.Z).':'.y.':'. z = z+c(k+2)*p.Z).':'. . z = z+c(2)*q.':'). Polinomios de Chebyshev Las funciones 1.x. pause r = q.*r)/2. cos nt forman un sistema ortogonal con respecto al producto escalar definido en el intervalo [0. Z = [Z. llamado polinomio de Chebyshef de grado n.y.. pause q = x. z].y. plot(x. mediante relaciones trigonométricas podemos expresar estas funciones como polinomios en x: T0 ( x) = 1 T1 ( x) = cos(t ) = x T2 ( x) = cos(2t ) = cos 2 (t ) − sin 2 (t ) = cos 2 (t ) − (1 − cos 2 (t )) = 2 cos 2 (t ) − 1 = 2 x 2 − 1 T3 ( x) = cos(3t ) = cos(2t ) cos(t ) − sin(2t ) sin(t ) = 4 cos 3 (t ) − 3 cos(t ) = 4 x 3 − x M En general podemos poner Tn ( x) = cos(n arccos( x) ) teniendo el cuenta que en realidad es un polinomio.*q)*3/2. q = p. z = c(1)*r. pause r = ones(size(x)).y.m)'.x.Z). pause for k = 1:n-1 p = ((2*k+1)*x. cos 2t. plot(x. g >= ∫ 1 f ( x) g ( x) 1− x 2 −1 dx Alternativamente.6 0. 2 T0 ( x) = 1 T1 ( x) = x Tk +1 ( x) = 2 xTk ( x) − Tk −1 ( x) para k = 1.8 1 En el gráfico apreciamos la propiedad fundamental de los polinomios de Chebyshef: que toman alternativamente valores máximos y mínimos iguales a +1 y –1 entre cada par de raíces consecutivas. los polinomios de Chebyshef cumplen una relación de recurrencia que es la vía más eficaz para su obtención.2 0 0.6 -0.1] 1− x2 < f . Dichos valores se alcanzan en el intervalo [−1.2 0 -0.2 0.6 0.. 1].4 0. .2 -0. estos polinomios se obtienen ortogonalizando las funciones 1. 2.8 -0. … 1 0. x ..8 -1 -1 -0.4 T3 T4 T5 T0 T1 T2 0.4 -0. el polinomio de grado n tiene extremos en los puntos .. x.4 -0. Como en el caso de Legendre. en concreto.6 -0. que los polinomios de Chebyshef son ortogonales respecto a un producto 1 escalar integral con peso en [−1.8 0. con respecto a este producto escalar.11 cos t = x cos( jt ) cos(kt ) dt =  dt = − 1  1− x2   =    Polinomios de Chebyshev 0 si j ≠ k  T j ( x) Tk ( x)  dx = π si j = k = 0 2 −1 1− x  π 2 si j = k > 0  1 ∫ π 0 ∫ es decir. n. n 12 Otra propiedad interesante. Como la evaluación numérica de integrales impropias es poco precisa. % Nodos de integracion % Cambio de variable . K. feval(f. g >= ∫ 1 f ( x) g ( x) 1− x2 −1 cos(t ) = x dx =  dt = − 1  1− x2   =    ∫ f (cos(t )) g (cos(t ))dt 0 π Ejemplo 4 Aproximemos la función de Runge f ( x) = 1 en [−1. cos(t). la integral existe si f es acotada. 2n Aproximando una función con respecto a la norma que genera los polinomios de Chebyshef. Las raíces se obtienen fácilmente de su definición trigonométrica: el polinomio de grado n se anula en rk = cos (2k − 1)π . function c = seriechebnorm(f. n. K. que comparten con otros polinomios ortogonales como los de Legendre.x). 1] por un polinomio de 1 + 25 x 2 grado 6. < f . g >= ∫ f ( x) g ( x) 1− x 2 −1 dx Aunque el integrando tiende a infinito en los extremos del intervalo.n) % Aproximación de f por polinomios de Chebyshef de grado n en [-1. 2. modificando adecuadamente la recurrencia para generar los polinomios de Chebyshef y efectuando las integrales con el cambio de variable x = cos(t ) para evitar las singularidades del integrando. k = 1. es que el polinomio de grado n tiene n raíces distintas en el intervalo [−1. Tk > < Tk . Tk > 1 donde el producto escalar viene dado por la integral < f .1] m h t x y = = = = = 100*(n+1). mínimo-cuadrático respecto a la norma asociada a los polinomios de Chebyshef. (0:h:pi)'. pi/m. Los coeficientes de la aproximación g = c0T0 + c1T1 + +c2T2 + L + cnTn se obtienen de las expresiones ck = < f . Utilizamos un programa análogo al caso de Legendre. 1].Aproximación funcional mínimo-cuadrática xk = cos kπ . obtenemos el polinomio de determinado grado que menos se desvía en valor absoluto de la función dada en el intervalo [−1. 1]. k = 0. haremos el cambio de variable x = cos(t ) que evita la anulación del denominador. 1. 4 0.*q .2 0 0. z = z+c(2)*q.y. plot(x. Compara gráficamente los errores de ambas aproximaciones. q = p.*q)*2/pi.5.y. plot(x.x.2 0 -0.*p)*2/pi.Z).Aproxima la función f ( x) = e x en el intervalo [0..4 -0.4 grado 2 grado 0 0.':'.2 Polinomios de Chebyshev % P0 % Coeficiente de P0 % Aproximación de grado 0 % P1 % Coeficiente de P1 % Aproximación de grado 1 % Pk+1 % Coeficiente de Pk+1 % Aproximación de grado k+1 % Términos de la recursión 1 0.Z). plot(x.2 0.2 -1 -0. pause q = x.x. z].y. c(k+2) = trapz(t.6 grado 4 0.':'). Enunciados 1.':'. z].y.1.Z). end 1. c(1) = trapz(t.6 -0. Z = [Z.y. Z = [Z.8 grado 6 0.r.13 plot(x.y. z = c(1)*r.x. c(2) = trapz(t.':'. pause r = q. . Z = z.8 -0. z = z+c(k+2)*p. Halla el error cuadrático.8 1 15. Aproxímala ahora por el polinomio de Taylor del mismo grado. Problemas 15.5.y)/pi. Halla el error cuadrático. pause r = ones(size(x)). 3] mediante un polinomio quinto grado.6 0. pause for k = 1:n-1 p = 2*x. Aproximación funcional mínimo-cuadrática 2. es decir. demuestra la fórmula explícita de los mismos: Tn ( x) = n / 2  ∑  n  n−2 k 2  x ( x − 1) k  2k   k =0  7. . x. explica cómo calcularías los coeficientes de su expresión como combinación lineal de los polinomios de Chebyshef.El potencial en un punto P creado por una carga situada en el punto Q es inversamente proporcional a la distancia R entre ambos. 3.Utilizando la relación e inθ = cos nθ + i sin nθ = (cosθ + i sin θ ) n y la definición de los polinomios de Chebyshef Tn ( x) = cos nθ = Re(cosθ + i sin θ ) n donde x = cosθ . que éstos son los coeficientes de rn en el desarrollo de f en serie de potencias de r. c y d para que la integral 14 2 ∫ 1 −1 e x − (a + bx + cx 2 + dx 3 ) dx sea mínima.Desarrollando cos(n±1)θ. …. 8.. 6.. b) Comprueba que f es una función generatriz de los polinomios de Legendre.Verifica la fórmula de Rodrigues para los primeros polinomios de Legendre: Pn ( x) = 1 dn 2 ( x − 1) n n n 2 n! dx 5.-Expresa el polinomio de Tchebyshev de grado n como producto de polinomios de grado 1.Aproxima f ( x) = x en [−1. x5 como combinación lineal de los polinomios de Chebyshef de grado no superior a 5. 4. demuestra la ley de recurrencia que verifican los polinomios de Chebyshef.Halla a... b.Expresa las funciones 1. Dado un polinomio cualquiera de grado no superior a 5.. el potencial en el punto P está determinado por la función r R 1 f (r ) = O θ P 1 + r 2 − 2rx donde x = cosθ. x2. utilizando polinomios de Legendre. 9... 1] por un polinomio de grado 4. r) a) Prueba que R 2 = 1 + r 2 − 2r cosθ Q Por tanto.1) y el punto Q en una posición arbitraria de coordenadas polares (θ. Sitúa el punto P en (0. El error cuadrático es 2. se obtiene el polinomio mínimo-cuadrático que es P(x) = 0.1 0 -0.1 -0.5 3 0 0. Taylor 2 2.005 0 -0. El polinomio de Taylor del mismo grado es P(x) = 1 + x + x2 x3 x 4 x5 + + + 2 6 24 120 El polinomio de Taylor se ajusta mucho mejor cerca del origen.005 -0.2 0 0.1796 x 2 + 0.0474 x 5 Gráficamente.-Procediendo como en el Ejemplo 2.15 Problemas 10.6044.5 1 1. pero tiene un error muy grande en la parte derecha del intervalo. Soluciones 1.5 2 2.5 -2 0.1455 x 4 + 0.01 0 -0.9915 + 1.5 3 .2 0. 15. Error min-cuad 0.5 3 0 0. respecto de la norma de Chebyshev.5. este polinomio es indistinguible de la función exponencial.5 Min-cua vs.2.5 -1 -1. Los errores puntuales de ambos ajustes se comparan en la gráfica adjunta. 1] por un polinomio de grado 4.5 Error Taylor 2 2..01 0.5360 ⋅10 −5.Aproxima f ( x) = x en [−1. Su error cuadrático es 0. Compara el resultado con el del problema 3.1083x + 0.5 1 1.5342 x 3 − 0.5 1 1. obviamente mayor que el del polinomio mínimo-cuadrático. 2 0 0. d = 0.4 -0. 2. 1].8 -0. Como la función es par. 1.Aproximación funcional mínimo-cuadrática 16 2.La fórmula de Rodrigues es Pn ( x) = n n 2 n! dx Para n = 0.5367.2 0. se obtiene trivialmente P0 ( x) = 1.9963.6 0.2289e−005. P1 ( x) = 1 d 2 ( x − 1) = x 2 dx 1 d2 4 1 3 1 ( x − 2 x 2 + 1) = (12 x 2 − 4) = x 2 − P2 ( x) = 2 2 2 2! dx 8 2 2 .5 P0 ( x) + 0. c = 0. 3..4 0. 1] es 0. Efectuando las integrales por trapecios con paso 0.Los valores pedidos son los coeficientes del polinomio mínimo-cuadrático de tercer grado que ajusta la función exponencial en el intervalo [−1. La figura muestra los sucesivos polinomios de aproximación.8 0. sólo aparecen en el desarrollo polinomios pares.El desarrollo de Legendre de la función f ( x) = x en [−1..6 -0.1874 P4 ( x). 4.2 1 0.2 0 -1 -0.4 1.6 0.6250 P2 ( x) − 0. b = 0.1762 y el valor mínimo de la integral..9979.4 0.8 1 1 dn 2 ( x − 1) n .001 se obtienen los valores a = 0. 0) a Q(r cosθ . 2! 2 7. r sin θ ) es R 2 = (1 − r cosθ ) 2 + (r sin θ ) 2 = 1 − 2r cosθ + r 2 (cos 2 θ + sin 2 θ ) = 1 − 2r cosθ + r 2 b) Calculemos los coeficientes del desarrollo de Taylor de f (r ) = f (0) = 1 = P0 ( x) f ′(r ) = − 1 1 + r 2 − 2rx .Aplicando las fórmulas del ángulo suma.a) El cuadrado de la distancia de P (1. f ′(0) = x = P1 ( x) f ′′(r ) = − (r − x) 1 + r 2 − 2rx  = −  1 + r 2 − 2rx  [ ( ) −3 / 2 ]′ = ( ) −5 / 2 ( ) −3 / 2  −3 2 + (r − x)  1 + r − 2rx  2   ( 2r − 2 x )   f ′′(0) 1 = − (1 − 3x 2 ) = P2 ( x) . tenemos cos(n + 1)θ = cos nθ cosθ − sin nθ sin θ cos(n − 1)θ = cos nθ cosθ + sin nθ sin θ de donde podemos despejar cos(n + 1)θ = 2 cos nθ cosθ − cos(n − 1)θ Haciendo x = cosθ y teniendo en cuenta la definición de los polinomios de Chebyshev obtenemos la relación pedida. 2 1 + r 2 − 2rx ( 2r − 2 x ) 3/ 2 ... Tn+1 ( x) = 2 xTn ( x) − Tn−1 ( x) 9.Los polinomios de Chebishev hasta el grado 5 son .17 P3 ( x) = Soluciones 1 d3 6 1 5 3 ( x − 3x 4 + 3 x 2 − 1) = (120 x 3 − 72 x) = x 3 − x 3 3 2 3! dx 48 2 2 1 d4 8 ( x − 4 x 6 + 6 x 4 − 4 x 2 + 1) = P4 ( x) = 4 4 2 4! dx 1 35 30 3 (1680 x 4 − 1440 x 2 + 144) = x 4 − x 2 + = 16 ⋅ 24 8 8 8 5.. .0625 Para expresar un polinomio cualquiera en función de polinomios de Chebyshev. La matriz inversa es B = inv(A) B = 1.5000 0 0.6366T0 ( x) + 0. Por ejemplo. 1] es 0.El desarrollo de Chebyshev de la función f ( x) = x en [−1.4244T2 ( x) − 0. la última columna expresa x5 como x5 = 10T1 ( x) + 5T3 ( x) + T5 ( x) 16 10.7500 0 0..6250 0 0. La inversa de esta matriz proporcionará las expresiones pedidas.5000 0 0 0 0 0.3750 0 0.0000 0 0 0 0 0.0000 0 0 0 0 0 0 1.5000 0 0. basta multiplicar esta última matriz por los coeficientes del polinomio.Aproximación funcional mínimo-cuadrática T0 ( x) = 1 T1 ( x) = x T2 ( x) = 2 x 2 − 1 T3 ( x) = 4 x 3 − 3x T4 ( x) = 8 x 4 − 8 x 2 + 1 T5 ( x) = 16 x 5 − 20 x 3 + 5 x 18 Construimos una matriz cuyas columnas sean los coeficientes de los polinomios de Chebyshev.2500 0 0 0.1250 0 0 0. Efectuamos los cálculos con MATLAB.0849T4 ( x).3125 0 0. A = [ 1 0 -1 0 1 0 0 1 0 -3 0 5 0 0 0 0 2 0 0 4 -8 0 0 -20 0 0 0 0 8 0 0 0 0 0 0 16]'. 2 0 -1 -0.2 0 0.8 -0.6 -0.2 0.6 0. 1.8 1 .19 Soluciones Como la función es par.4 1.4 -0.4 0. 1 0.8 0.2 0. sólo aparecen en el desarrollo polinomios pares.2 1 0.8 1 En esta figura superponemos las aproximaciones de Legendre y de Chebyshef.4 -0.8 0.4 0.6 0.2 0 -1 Legendre Chebyshev -0.6 -0.4 0.8 -0.2 0 0.6 0.6 0.4 0. La figura muestra los sucesivos polinomios de aproximación. y.*sin(t))/pi. >> b(3) = trapz(t. >> b(5) = trapz(t. %abscisas. y sólo tiene componentes en el seno.y.y.*sin(7*t))/pi. b= 1.y. >> t = (0:h:2*pi)'.s.y.'.*sin(6*t))/pi. >> %Vamos a representar >> s = b(1)*sin(t). en la onda cuadrada.*sin(3*t))/pi.2732 -0.4244 -0. nodos de integracion >> >> y = sign(pi-t). >> b(6) = trapz(t.2546 -0. sólo hay terminos del seno y sólo k impar >> plot(t.'g') >> s = s + b(5)*sin(5*t).txt Aproximacion Teorica -------------------Funcion Onda cuadrada: --------------------->> m = 2000.y.'.'. que tambien es impar.0000 0.'. >> b(4) = trapz(t.1819 %Se comprueba que para k par.s. >> b(7) = trapz(t.y. file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Practica%2016%20-%20Aproximacion%20Trigonometrica/practica16.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Practica%2016%20-%20Aproximacion%20Trigonometrica/practica16.txt (1 of 3) [09/03/2008 13:49:38] . >> h = 2*pi/m.t. porque la onda es impar.*sin(5*t))/pi. %se evalua la integral >> b*pi %comprobacion ans = 4.0000 >> b(2) = trapz(t.t.0000 0.'.*sin(2*t))/pi.y.0000 0.') Creamos los coeficientes >> b(1) = trapz(t.y.y.'r') >> hold on >> %Vamos acumulando en s la funcion con cada vez mas términos s = s + b(3)*sin(3*t) %recordemos que en este caso. el coeficiente da cero.*sin(4*t))/pi. %funcion a evaluar >> plot(t. >> plot(t. s.0000 0.^0 cos(t) sin(t) cos(2*t) sin(2*t) cos(3*t) sin(3*t) cos(4*t) sin(4*t) cos(5*t) sin(5*t) cos(6*t) sin(6*t)].'m') >> %Comparamos coeficientes teoricos y numericos >> c = 4/pi*[1 1/3 1/5 1/7 1/9].0000 0. >> t = (0:h:2*pi-h)'.txt >> plot(t.2546 -0.'. >> y = sign(pi-t).0000 -0.0000 0.y.'.0000 0.txt (2 of 3) [09/03/2008 13:49:38] .y) %obtener representacion %para evaluar d eun golpe todos los productos escalares implicados: >> M = [t. % arreglamos el principio para obtener simetria >> >> stem(t.0000 0.2440 0 -0.0893 file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Practica%2016%20-%20Aproximacion%20Trigonometrica/practica16. c= 1. sólo puedo 12 >> M = [t.2732 -0.0000 -0.4244 -0.0000 0.1819 0.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Practica%2016%20-%20Aproximacion%20Trigonometrica/practica16.2546 0.1819 Aproximacion con la fórmula discreta ----------------------------------->> N = 12 N= 12 >> h = 2*pi/N.t.1415 >> b b= 1.0000 1.2732 0. %Me he equivocado pues he puesto 13 vectores independientes.4244 0.^0 cos(t) sin(t) cos(2*t) sin(2*t) cos(3*t) sin(3*t) cos(4*t) sin(4*t) cos(5*t) sin(5*t) cos(6*t)] >> T = M'*y*2/N T= 0 0.3333 -0. %funcion a evaluar >> y(1) = 0. 0000 0.0000 0. y NO de la onda cuadrada.Z.0000 0.3333 -0. el 7 y el 11.2546 -0.0000 0. me ahorro trabajo.'r') >> Z = Z + T(7)*sin(3*tg) %como se que se me anulan todos menos el 3.'k') Vemos que la aproximacion ya es perfecta en el mundo discreto file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Practica%2016%20-%20Aproximacion%20Trigonometrica/practica16.Z. Representemosla >> tg = linspace(0.4244 -0.txt (3 of 3) [09/03/2008 13:49:38] . En general habria uqe evaluar todos los términos: mirar transparencias >> plot(tg.Z.0000 -0. %a efectos graficos utilizamos una variable continua >> Z = T(3)*sin(tg).0000 0.0893 0 Hay bastante diferencia utilizando 12 puntos en comparacion con 2000.1819 >> T' ans = Columns 1 through 8 0 0.2440 0 -0.0000 0. Aunque hay uqe pensar que la aproximacion obtenida asi es de la funciom discreta de sólo 12 puntos.txt 0 >> T(12) = T(12)/2 %en general >> b %comparandolos con B b= 1.'g') >> Z = Z + T(11)*sin(5*tg) >> plot(tg.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Practica%2016%20-%20Aproximacion%20Trigonometrica/practica16. >> hold on >> plot(tg.2732 -0.0000 1.2*pi).0000 Columns 9 through 12 -0. por lo que su determinación reviste gran importancia en las aplicaciones técnicas. Generalmente basta un reducido número de estas componentes. La luz. El origen del sonido. En las aplicaciones no se suele disponer de una expresión analítica de la función a analizar. como sabemos. como la noción de convergencia uniforme o la aclaración de la propia idea de función. las componentes elementales de una onda reflejan muchas de sus propiedades físicas. Por comodidad. El Sistema Trigonométrico Una función de variable real f es periódica de periodo L. Esta a su vez se corrige para volver a la presión normal y comienza de nuevo el ciclo. Es necesario por tanto. que proporcionen información a partir de un número finito de datos. La afirmación del matemático francés J. repitiéndose periódicamente. Las oscilaciones se estudian matemáticamente descomponiéndolas en suma de funciones periódicas sencillas como son las funciones trigonométricas seno y coseno. pero ni mucho menos los únicos. f (t + kL) = f (t ) para cualquier k entero. elaborar versiones discretas de la aproximación de Fourier. 1 .B. por citar un ejemplo. también llamadas armónicos. estos métodos se adaptan mejor al cálculo con ordenador. Además. Desde el punto de vista práctico. salvo que se atenúa su intensidad. Desde el punto de vista teórico. Fourier de que cualquier función periódica podía representarse como suma de senos y cosenos causo una notable controversia de la que surgieron importantes avances en el conocimiento matemático. Consecuentemente. El ciclo elemental consta de un incremento de la presión que llega a un máximo y disminuye de nuevo provocando ahora una depresión. Estas variaciones se producen con gran rapidez en relación con la duración de un sonido y son muy uniformes en un sonido puro. Aproximación trigonométrica Los fenómenos ondulatorios son muy frecuentes en la naturaleza y en las aplicaciones técnicas. sino de valores de la misma medidos a intervalos regulares de tiempo. La amplitud y frecuencia de los armónicos se obtiene técnicamente con los osciloscopios y analíticamente mediante la teoría de Fourier que desarrollaremos en este tema. para reproducir la información significativa del fenómeno ondulatorio estudiado. La velocidad con la que se suceden los incrementos y disminuciones de la presión determinan el tono del sonido.______________________________________________________________________ 16. que trabaja con una cantidad finita de información.1. 16. está en las variaciones rítmicas de la presión del aire o medio en el que se produce. la característica fundamental de las ondas es la periodicidad. si f (t + L) = f (t ) para todo valor de t. ocupa una estrecha banda en el amplio espectro de las radiaciones electromagnéticas y el sonido es un caso de vibración mecánica. Quizás la luz y el sonido sean los ejemplos más cotidianos. pero los resultados se aplican fácilmente a funciones de periodo L arbitrario. sin(x). La mejor aproximación es la que minimiza el error cuadrático E 2 = f − sn = π∫ 1 π −π f (t ) − s n (t ) dt 2 y es precisamente la proyección ortogonal de f sobre el subespacio generado por las 2n+1 primeras funciones del sistema trigonométrico. Una función periódica queda determinada por sus valores en cualquier intervalo de longitud igual al periodo. El sistema trigonométrico está constituido por las funciones 1/2. salvo 1/2. se calculan mediante las expresiones siguientes.. cos(nx).Aproximación trigonométrica 2 consideraremos funciones de periodo 2π.1 > 1 2 = 1 1 < 2. podemos expresar el error cuadrático como una suma de cuadrados E 2 = f − sn 2 = f 2 − sn 2 = f 2 2 2 2 − ( a 0 / 2 + a12 + b12 + a 2 + b 22 + L + a n + b n2 ) Ejemplo 1 Los sistemas de alimentación ininterrumpida (SAI) almacenan energía en baterías para suministrarla a determinados aparatos en caso de cortes del fluido eléctrico. cos(x).g > = 1 π ∫ f (t ) g (t ) dt 0 2π Además. La integral puede efectuarse en cualquier intervalo de longitud 2π. La ortogonalidad del sistema trigonométrico puede comprobarse aplicando conocidas fórmulas de trigonometría que transforman sumas en productos (ver problema 1). Debido a la ortogonalidad del mismo. cos(2x).. son unitarias. sin(nx). sin(kt ) > = < sin(kt ).2 > π ∫ f (t )dt 0 2π 1 < f . Dada una función f de periodo 2π. conocidas como fórmulas de Euler: a0 = ak = < f.. cos(kt ) > = < cos(kt ). sin(kt ) > π ∫ f (t ) sin(kt)dt 0 2π También gracias a la ortogonalidad. la combinación lineal de las funciones anteriores s n (t ) = a0 + 2 ∑ (a k =1 2 n k cos(kt ) + bk sin( kt ) ) que mejor se aproxima a f..1) bk = 1 < f . Dichos aparatos suelen funcionar con corriente alterna.. π]. . por lo que el SAI debe convertir la . cos(kt ) > π ∫ f (t ) cos(kt)dt 0 2π (16. sin(2x). cuya norma es 1 / 2. los llamados coeficientes de Fourier. Estas funciones son ortogonales respecto al producto escalar dado por la integral < f . . . se denomina polinomio de Fourier de orden n asociado a f. por ejemplo en [−π. cuando los interruptores impares están cerrados. la intensidad en la carga presentará el aspecto de la figura. y así sucesivamente.3 El Sistema Trigonométrico corriente continua que genera en corriente alterna. los pares están abiertos y viceversa. La figura muestra el esquema de un sencillo circuito inversor. llamado de puente. Los interruptores T1 y T3 se cierran simultáneamente. Intensidad τ 2τ T1 y T3 cerrados T2 y T4 cerrados . Los dispositivos que realizan esta conversión se denominan inversores. La carga P está conectada a la batería a través de cuatro interruptores. Si durante un tiempo τ mantenemos la corriente en un sentido. se invierte el sentido de la tensión y la corriente en la carga. lo mismo que T2 y T4. τ. pero alternando su estado con los anteriores. la invertimos entonces durante un periodo igual. Al invertir el estado de los interruptores. Es decir. La figura siguiente muestra el paso de la corriente cuando los interruptores impares están cerrados. Supongamos que el inversor produce una corriente unidad durante el intervalo de 0 a τ = π y una corriente opuesta en el intervalo siguiente de la misma duración. Es importante obtener este armónico y calcular la potencia del resto de los armónicos. etc. Acumularemos en s los sucesivos términos del desarrollo.y. con 200 nodos para obtener el polinomio trigonométrico de orden 10.*sin(t))/pi. Cuantos más términos del desarrollo de Fourier queramos obtener. s = s+a(1)*cos(t)+b(1)*sin(t). obtenemos una expresión general para el polinomio de Fourier de orden 2n de esta función. h = 2*pi/m. b(1) = trapz(t. por lo que se impone su minimización o anulación mediante los blindajes y filtros adecuados. a(1) = trapz(t. aprovechará la parte de la intensidad recibida correspondiente al primer armónico del desarrollo de Fourier de dicha intensidad. tomando suficientes nodos para obtener la precisión adecuada. calentamientos. evaluaremos las integrales por el método de los trapecios. Dicha corriente se representa mediante la función 2π-periódica cuyos valores entre 0 y 2π son  1 si 0 < t < π   f (t ) = sign (π − t ) =  0 si t = π  − 1 si π < t < 2π  Aplicando las fórmulas de Euler (1). .y. plot(t. En efecto. s = a0/2*ones(size(t)). Evaluamos la función en los nodos y la representamos gráficamente. s 2 n (t ) = 4 sin(3t ) sin(5t ) sin((2n − 1)t )  + +L+  sin(t ) +  π 3 5 2n − 1  Para el cálculo práctico de los coeficientes de Fourier.).y. por ejemplo.s) En este caso. más nodos utilizaremos en su cálculo. y = sign(pi-t). el término constante es nulo. Trabajamos. m = 200. repitiéndose este ciclo indefinidamente.y) Calculamos el coeficiente del término constante del desarrollo y representamos éste gráficamente. pues sus efectos son indeseables en todas las aplicaciones del inversor (perturbaciones.y)/pi.*cos(t))/pi. Calculemos los siguientes coeficientes. plot(t.. a0 = trapz(t. t = (0:h:2*pi)'. Observa que sólo contiene términos en seno por tratarse de una función impar ( f (−t ) = − f (t )).t.. si el aparato conectado al inversor está diseñado para trabajar con una corriente alterna de forma sinusoidal.Aproximación trigonométrica 4 La eficiencia de un circuito de este tipo puede analizarse teóricamente mediante la aproximación de Fourier. 5 0 -0.y.(y-s). Los términos de orden 2 se anulan ambos.^2)/pi-a0^2/2-norm(a)^2-norm(b)^2 . ortogonal al coseno.*sin(2*t))/pi.y.*sin(k*t))/pi. end plot(t.5 plot(t.5 0 1 2 3 4 5 6 7 Podemos hallar el error cuadrático directamente o a partir de los coeficientes. s = s+a(k)*cos(k*t)+b(k)*sin(k*t). b(2) = trapz(t.y. b(k) = trapz(t. s = s+a(2)*cos(2*t)+b(2)*sin(2*t).t. debido a que la función es impar y.5 -1 -1. Evaluamos los términos restantes y representamos la aproximación.y.y.^2)/pi E2 = trapz(t.s) 4 3 2 1 0 -1 -2 -3 -4 El Sistema Trigonométrico 0 1 2 3 4 5 6 7 Observamos que el término en cos(t) es nulo.y. por tanto.*cos(2*t))/pi. for k=3:10 a(k) = trapz(t.t.y.*cos(k*t))/pi.5 1 0. E2 = trapz(t. debido al distinto tipo de simetría con respecto a π/2 de la función y de sin(2t) y cos (2t): a(2) = trapz(t.s) 1. 2. En el apartado anterior hemos tomado N suficientemente grande para que la precisión de los coeficientes hasta el orden n fuera buena. así como a situaciones experimentales en las que no conocemos la función a aproximar. En este ejemplo. sino únicamente valores de la misma medidos a intervalos regulares. el primer sumando y el último son iguales ak ≅ Ak := 2 ( y0 cos(kt0 ) + y1 cos(kt1 ) + L + y N −1 cos(kt N −1 )) N . Estimamos el coeficiente de Fourier ak.7336 -0. 1. de la función f mediante la fórmula de los trapecios con N subintervalos ak = ≅ 1 π ∫ f (t ) cos(kt)dt ≅ 0 2π 1 ( y0 cos(kt0 ) + 2 y1 cos(kt1 ) + L + 2 y N −1 cos(kt N −1 ) + y N cos(kt N )) N Al ser las funciones del integrando 2π-periódicas. que se adapta mejor al cálculo con ordenador. k = 0. aunque la precisión disminuye conforme aumenta el orden.0e-003 * -0. Supongamos que f es una función de periodo 2π y que estimamos sus coeficientes de Fourier de modo aproximado mediante la fórmula de los trapecios con N intervalos. …. Vamos a considerar el problema de aproximación trigonométrica desde este punto de vista. 2π]. 1.0721 E2 = 0. y nos preguntamos cuántos coeficientes del desarrollo de Fourier podemos estimar a partir de dichos valores. trabajamos en un espacio euclídeo de dimensión finita en el que el producto escalar se define mediante sumas y productos. En otras palabras. b(1:2:9) . sin embargo. En la práctica.0721 6 Los resultados numéricos se aproximan bastante a los teóricos. Sea h = 2π / N y t j = jh.1047 -0. en lugar de continua. podíamos evaluarla en tantos puntos como quisiéramos. estamos resolviendo un problema de aproximación discreta. N. cuyo producto escalar es una integral.Aproximación trigonométrica E2 = 0.3142 -0. observamos que en las operaciones solamente intervienen los valores de la función a desarrollar y los de las funciones trigonométricas en un número finito de nodos equiespaciados. en lugar de trabajar en un espacio de dimensión infinita. para j = 0. la función a desarrollar es discontinua.9437 16. por lo que el error es mayor. sucede que disponemos de un número limitado N de valores de f en el intervalo del periodo. …. Transformada de Fourier Discreta Al estimar los coeficientes de Fourier por el método de trapecios siempre con el mismo número de nodos. Conociendo analíticamente la función./(1:2:9) ans = 1.4/pi. [0.2. En realidad. 2. Denotamos por yj el valor de f en tj.5238 -0. La clave está en la ortogonalidad de estos vectores. bk = ≅ Bk := 1 π ∫ f (t ) sin(kt )dt ≅ 0 2π 2 ( y0 sin(kt0 ) + y1 sin(kt1 ) + L + y N −1 sin(kt N −1 )) N Vamos a comprobar que los n primeros sumandos de la expresión Tn (t ) = A0 + A1 cos(t ) + B1 sin(t ) + A2 cos(2t ) + B2 sin(2t ) + L 2 (16.5000 G = 3. N−1.0000 -0. por lo que los vectores son ortogonales. M'*M 0. es 4 = N.0000 -0.5 = N/2. 2*pi/N. 1. (1.0000 0. (0:h:2*pi-h)'.0000 La matriz de Gram G es diagonal. En primer lugar.0000 G = 4. 2*pi/N. (0:h:2*pi-h)'. proporcionan la proyección ortogonal de la función discreta f(t) sobre el subespacio generado por n primeros vectores que aparecen en ella. − 1) . 1. …. M'*M -0.2) donde n ≤ N .0000 2. − 1.0000 0. j = 0.0000 -0. 2.0000 0 0.0000 2.^0 cos(t) sin(t) cos(2*t)]. a lo sumo hay N generadores independientes.0000 1. El cuadrado de la norma de la función discreta constante 1 es obviamente 3 = N.0000 4. [t. comprobemos la ortogonalidad de las funciones trigonométricas discretas en los casos particulares de N = 3 y N = 4. 1. En el caso N = 4 tenemos N h t M G = = = = = 4.0000 0.0000 0.0000 0. . que es (1. 1).0000 0. Análogamente se aproximan los coeficientes en seno.0000 0 En este caso notamos que el cuadrado de la norma del último vector.5000 -0. La norma al cuadrado de los otros vectores es 2 = N/2. [t.^0 cos(t) sin(t)]. N h t M G = = = = = 3.0000 0. Llamaremos funciones discretas a estos vectores y las denotaremos igual que las correspondientes funciones reales.0000 0. Como el espacio es N-dimensional. al igual que la del primero. mientras que para los vectores restantes es 1.0000 -0. 1.0000 1.7 Transformada de Fourier Discreta La expresión entre paréntesis es el producto escalar en el espacio euclídeo Ndimensional de los vectores cuyas componentes son los valores de f (t) y de cos(kt) en los puntos tj. K ( N − 1) / 2 sin(kt ). . Tomaremos sin embargo N = 12. el último vector es sin   2  N  norma.Aproximación trigonométrica 8  N −1  t  y el cuadrado de su En general. (1. ya que los coeficientes que aparecen en ella son: Ak = 2 ( y0 cos(kt0 ) + y1 cos(kt1 ) + L + y N −1 cos(kt N −1 )) = N f (t ).1. N/2. La 2  fórmula (16. K ( N − 1) / 2 cos(kt ). Como el valor de f en 2π no interviene en el cálculo y la función tiene una discontinuidad. h = 2*pi/N. cos(kt ) = .2) proporciona las proyecciones ortogonales buscadas.K. concretamente al doble de la frecuencia máxima deseada. Si f es una función de variable real t.K.−1. le asignamos en 0 el valor medio entre los valores por la izquierda y por la derecha. la aproximación TN(t) es un polinomio trigonométrico que la interpola en los N nodos del muestreo. Para que la transformada detecte frecuencias más altas.−1). 2.−1) = . f (t ) ≈ 4 sin(3t ) sin(5t )  +  sin(t ) +  3 5  π hemos de tomar al menos N = 11. N = 12.1.−1) f (t ). 1 2 N Bk = 2 ( y0 sin(kt0 ) + y1 sin(kt1 ) + L + y N −1 sin(kt N −1 )) = N f (t ). N. para preservar la simetría de la función. hay que tomar más valores de la función. si N es impar. Si N es par.K. 1 A0 1 = ( y0 + y1 + L + y N −1 ) = 1. cos(kt ) AN = 2 1 ( y0 cos( N t0 ) + y1 cos( N t1 ) + L + y N −1 cos( N t N −1 )) = 2 2 2 N f (t ). k = 1. (1. Ejemplo 2 Para aproximar los tres primeros términos no triviales del desarrollo de Fourier de la función f (t ) = sign (π − t ) del Ejemplo 1. En otros términos. Ajustamos el valor de la función en 0 para que resulte periódica. 2. sin(kt ) La aproximación discreta TN(t) de mayor orden coincide con el vector f(t). La frecuencia más alta que aparece es N/2 veces la frecuencia fundamental y se denomina frecuencia de Nyquist. si N es par (1.1. Los términos de la aproximación tienen frecuencias que son múltiplo de la frecuencia fundamental.−1. sin(kt ) = . el último vector es cos  t  y el cuadrado de su norma. k = 1. pues el último término es un seno y (N−1)/2=5. hay que muestrear la señal a frecuencias mayores.−1. tg = linspace(0.4244 0.2546 Salvo el primero. T(12) = T(12)/2.3701 0 0..'*'.0893 Los coeficientes en seno. M = [t. pero ahora lo que pretendemos es observar las propiedades de la aproximación discreta.0e-015 * 0.300). plot(t. yg = sign(pi-tg).0000 0. A0 = T(1) Ak = T(2:2:12) Bk = T(3:2:11) A0 = 0 Ak = 1.2405 -0. plot(t.yg) Evaluamos la transformada discreta. como hemos visto en el Ejemplo 1.2440 -0.y.^0 cos(t) sin(t) cos(3*t) sin(3*t) cos(5*t) sin(5*t) T = M'*y*2/N. Representamos primero la función y los nodos usados para hallar la transformada. cos(6*t)]. Se puede alcanzar más precisión tomando N más elevado.9 t = (0:h:2*pi-h)'. cos(4*t) sin(4*t) .2732 0.y.'*') Transformada de Fourier Discreta Evaluamos las funciones base en los nodos tk y hallamos los productos escalares. Los coeficientes del término independiente A0. de los cosenos Ak y de los senos Bk son... cos(2*t) sin(2*t) .3333 -0.2*pi.3331 0 Bk = 1.0000 0. la aproximación es bastante pobre.5934 -0. . Los Bk no nulos corresponden a los coeficientes de los senos impares del desarrollo de Fourier ordinario S = 4/pi*[ 1 1/3 1/5] S = 1. y = sign(pi-t).tg. Ak son prácticamente nulos.. respectivamente. y(1) = 0. for k=1:5 s=s+S(2*k)*cos(k*tg). aunque tal vez ajuste mejor la función entorno a las discontinuidades.5 -1 -1.yg.5 0 -0.5 -1 -1.y. Transformada rápida de Fourier (FFT) La transformada de Fourier tiene innumerables aplicaciones y en la mayoría se necesitan valores de N elevados. z=z+T(2*k+1)*sin(k*tg). end z=z+T(12)*cos(12*tg).tg.z) 1. s = S(1)/2*ones(size(tg)).5 0 1 2 3 4 5 6 7 Observamos que esta aproximación oscila más que la discreta.5 0 1 2 3 4 5 6 7 10 Comparamos ahora con el desarrollo de Fourier ordinario.3.5 1 0.'*'. plot(t. for k=1:5 z=z+T(2*k)*cos(k*tg).5 0 -0. s=s+S(2*k+1)*sin(k*tg). 16.y. El coste de la obtención de la transformada es del .yg. end plot(t.Aproximación trigonométrica z = T(1)/2*ones(size(tg)).s) 1.tg.tg.5 1 0.tg.'*'. k = 0. ± 1.2. es mucho menor que N 2 . N − 1. K. los coeficientes de su desarrollo de Fourier en senos y cosenos están relacionados con las del desarrollo complejo mediante las expresiones { } ck = c−k = ak − ibk 2 que permiten pasar fácilmente del desarrollo real al complejo y viceversa. que permiten su aplicación a problemas de gran tamaño. llamados rápidos. g >= 1 { } 2π ∫ 2π 0 f (t ) g (t ) dt Dada una función f(t) compleja. se define su desarrollo de Fourier complejo de orden n como s n (t ) = k =−n ∑c e k n ikt donde c k =< f . lo que no parece mucho en comparación con otros algoritmos como el de eliminación gaussiana o la factorización QR que son de orden N 3 . 1. de variable real y periódica de periodo 2π. N   Estos coeficientes permiten expresar el vector y como combinación lineal de exponenciales complejas ortogonales yj = 1 N ∑C j =0 N −1 k  2π  exp ikj  N   . que para N grande. k = 0. ± n . K. Si f toma valores reales. e ikt > = 2π ∫ 1 2π 0 f (t ) e −ikt dt En otros términos. ± 1. Para introducir la FFT. Sin embargo.11 Transformada rápida de Fourier (FFT) orden de N 2 . ± n forman un sistema ortonormal para el producto escalar definido por < f . 16. 16. Transformada de Fourier discreta Los coeficientes de la transformada discreta de N valores de una función 2π-periódica 2π y j = f (t j ) = f ( jh) = f ( j ) se definen como N 1 Ck = N ∑ j =0 N −1 1 y j exp(−ikt j ) = N ∑y j =0 N −1 j 2π   exp − ikj  . Desarrollo de Fourier complejo Las funciones complejas e ikt . K.3.3. es conveniente utilizar la versión compleja del desarrollo y de la transformada de Fourier discreta. ± 1. la popularidad de la transformada discreta se debe en gran parte al descubrimiento de algoritmos de menos coste. sn es la proyección ortogonal de f sobre el subespacio generado por las funciones e ikt . El algoritmo de la transformada rápida de Fourier (FFT) tiene un coste del orden N ⋅ log(N ). ± 1.1. para k = 0. 3. programado en una función de MATLAB del mismo nombre. El cálculo de la transformada de Fourier discreta se optimiza mediante el algoritmo FFT. los restantes coeficientes contienen información redundante. Ejemplo 3 Calculemos la transformada rápida de 12 muestras de la función f (t ) = sign (π − t ) en el intervalo [0.1667i 7 through 9 10 through 12 + 0. correspondiendo a la anulación de los coeficientes en coseno de la transformada discreta. h = 2*pi/N. En general.6220i 0 0 + 0.0. concretamente C N −k = Recíprocamente.3. y(1) = 0.0.Aproximación trigonométrica 12 Si f es real. Los restantes coeficientes son los conjugados de los anteriores por lo que pueden ignorarse. C = fft(y)/N C = Columns 0 Columns 0 Columns 0 Columns 0 1 through 3 4 through 6 . 2 1≤ k < N / 2 Si N es par.0.1667i 0 . C N / 2 = AN / 2 − iBN / 2 . 2π ] y comparemos los resultados con los del ejemplo anterior. En el caso real. . t = 0:h:2*pi-h.0447i 0 0 + 0. Transformada rápida de Fourier Ak + iBk . 1 ≤ k < N / 2 16. Aplicando esta función a un vector y. 2 1 ≤ k ≤ N / 2. 2 Ck = Ak − iBk . y = sign(pi-t).0447i 0 0 0 . N = 12. podemos obtener estos coeficientes a partir de los 6 primeros coeficientes complejos. que a su vez estiman los coeficientes del desarrollo de Fourier ordinario.6220i Todas las componentes tienen parte real nula. A partir de ellos obtenemos los coeficientes de la transformada real. los coeficientes Ck están relacionados con los de su transformada de Fourier discreta en senos y cosenos mediante las expresiones C0 = A0 . se obtiene un vector de elementos NCk. donde N es el número de componentes de y y Ck son los coeficientes de la transformada de Fourier discreta compleja. Ak = 2 real(Ck ) 0≤ k < N /2 AN / 2 = real(C N / 2 ) si N es par Bk = −2imag(Ck ). .g > = 1 π ∫ f (t ) g (t ) dt . z = zeros(size(t)).0000i . Sometido el diodo a una tensión sinusoidal.. El circuito rectificador más elemental contiene de un diodo que deja pasar la corriente en un sentido mientras que impide que circule en sentido opuesto.0000i -1. sin(2x). Estudia la aproximación de Fourier continua y sin(t ) 0 < t < π  que da la corriente por el circuito.El barrido del haz de electrones por la pantalla de un tubo de rayos catódicos se consigue mediante un campo magnético variable en forma de diente de sierra.4. 0 2π 2.0.0000i -1. cos(x).0000i -1.0000i 1.0000i 16. sin(x).0000i + 0.0000i + 0.0.0. Problemas 16. Ak = 2*real(C(2:6)).0000 7 through 9 -1.0000 .Comprueba la ortogonalidad del sistema trigonométrico 1/2.0000 10 through 12 .0000 1 through 3 1.0000 .0000 4 through 6 . la corriente por el circuito es una sinusoide en la que se ha anulado la parte negativa...0. end z z = Columns 0 Columns 1. discreta de la función f (t ) =   0 π < t < 2π  3.0000 Columns -0.0000i 1. cos(nx). .0447 La inversión de la transformada discreta compleja es fácil con MATLAB. for k=1:12 z=z+C(k)*exp(i*(k-1)*t). − π < t < π .0000 + 0..0000 Columns -1.1...0000 + 0. con respecto al producto escalar integral < f .0.0.0000i 1.6220 0 0. Enunciados 1. cos(2x). . Representa gráficamente diversas aproximaciones periódicas de esta función. obteniéndose el vector inicial..4. Transformada rápida de Fourier (FFT) Los coeficientes en seno son Bk = -imag(C(2:6)) Bk = 0.Los dispositivos que transforman la corriente alterna en continua se denominan rectificadores.0000 .1667 0 0.13 A0 = 2*C(1). sin(nx). f (t ) = t / 2. . Aproximación trigonométrica 4. 2 2 kπ 0 2π 2π k = 1. K < 1 . < sin( jt ). Aplicamos la fórmula de transformación de productos de funciones trigonométricas en suma. sin( kt ) > = 2 π ∫ 2π k = 1. 2.Comprobemos en primer lugar la ortogonalidad de la función constante con respecto a los senos y cosenos. sin( kt ) > = = 1 π 1 ∫ sin( jt ) sin(kt ) dt = 0 2π π ∫ 2π 0 0. K Las integrales se anulan por ser el sen(kt) y cos(kt) 2π-periódicas. 2 si j = k La ortogonalidad entre senos y cosenos se comprueba igualmente. dt = 2 2kπ 0 sin( kt ) cos( kt ) dt = − = 0. < sin( jt ). cos( kt ) > = ∫ sin( jt ) cos(kt ) dt = sin(( j + k )t ) − sin(( j − k )t ) 1 = ∫ dt = 0 2 π 1 2π π 0 2π 0 2.Aproxima la función de Runge f (t ) = trigonométricos. cos( kt ) > = 1 2 1 π 1 ∫ 0 2π 0 cos( kt ) sin( kt ) = 0.2. < cos( jt ). cos( kt ) > = = 1 π 1 ∫ cos( jt ) cos(kt ) dt = 0 2π π ∫ 2π 0 0.4. Comprobemos la ortogonalidad de los cosenos.. cos(( j − k )t ) − cos(( j + k )t )  dt =  1 2 π  si j ≠ k ∫ 2π 0 1 dt = 1. 14 1 . o de forma directa teniendo en cuenta que los senos son impares y los coseno pares.. 2 si j = k Análogamente se prueba para los senos.. − π < t < π mediante polinomios 1+ t 2 16. < . 2. Soluciones 1.Calculemos los coeficientes del desarrollo de Fourier a0 = π∫ 1 2π 0 f (t )dt = sin(t )dt = − (cos(π ) − cos(0)) = π∫ π π 1 0 π 1 2 . cos(( j + k )t ) + cos(( j − k )t )  dt =  1 2 π  si j ≠ k ∫ 2π 0 1 dt = 1. Estimamos ahora los coeficientes de esta aproximación mediante la transformada rápida de Fourier.4 0.6 0. Como el coeficiente en sen(4t) es nulo.2 0 -0.8 0. basta tomar 8 puntos.2 1 0. h=2*pi/8.*sin(t). t = 0:h:2*pi-h. C = fft(y)/N C = .15 Soluciones ak = 1 π ∫ ∫ 2π 0 f (t ) cos(kt )dt = 1 π ∫ sin(t ) cos(kt)dt = 0 π sin((k + 1)t ) − sin((k − 1)t ) 1  cos((k + 1)t ) π cos((k − 1)t ) π  − = = + dt = 2 2π  π 0 k +1 k −1 0 0   si k impar 0  = 1  2 2  −2 1  2π  k + 1 − k − 1  = π k 2 − 1 si k par    1 π b1 = bk = = 1 π 1 ∫ 2π 0 2π f (t ) sin(t )dt = 1 π 1 ∫ π 0 sin 2 (t )dt = 1 π ∫ π 0 1 − cos(2t ) 1π 1 dt = = 2 π 2 2 π ∫ ∫ 0 0 f (t ) sin(kt )dt = π ∫ sin(t ) sin(kt)dt = 0 π 1 π π cos((k − 1)t ) − cos((k + 1)t ) 1  sin((k − 1)t ) π sin((k + 1)t ) π   =0 − dt = 2 2π  k −1 k +1 0 0   El polinomio de Fourier de orden 2n es s n (t ) = sin(t ) 2  1 cos(2t ) cos(4t ) cos(6t ) cos(2nt )   +  − − − − L− 2 2 3 15 35 ( 2n) 2 − 1  π  1.2 0 1 2 3 4 5 6 7 La figura muestra el seno rectificado y su aproximación de Fourier de orden 4. N = 8. y = (t<pi). Estimamos los coeficientes del desarrollo .2500i -0.2 1 0.6 0.0000 -0.6366 0 0. que f (−t ) = f (t ).0..0000 Bk = 0.5000 -0.0518 7 through 8 .0000 0. En primer lugar. Ak(4) = real(C(5)) Bk = -2*imag(C(2:5)) A0 = 0.2 0 1 2 3 4 5 6 7 0. o sea. 4.0000 0 -0.0424 0 En el gráfico de la aproximación discreta se aprecia la diferencia respecto a la aproximación analítica.1250 + 0.2 0 -0. a0 = 2/pi a = 2/pi*[0 -1/3 0 -1/15] b = [1/2 0 0 0] a0 = a = b = 1. el desarrollo sólo tendrá términos en coseno.2122 0 0 0 -0.0000 .5000 -0.6036 Ak = -0.8 0.Aproximación trigonométrica Columns 0.0000 Columns -0.0000 + 0.4 0. A0 = 2*C(1) Ak(1:3) = 2*real(C(2:4)).a) Coeficientes del desarrollo de Fourier.0000i -0.0518 0 Los valores correspondientes del desarrollo analítico antes calculado son bastante aproximados a los de la transformada discreta.0000i 16 Obtengamos de aquí los coeficientes de la transformada discreta. notemos que al tratarse de una función par.2500 -0.0.2500i 0.1250 1 through 3 4 through 6 -0.3018 Columns 0. pongamos 500.0080 El polinomio de Fourier resultante se confunde casi con la función.y. T(7) = T(7)/2 T = 0.1282 0. recordando que los bk son nulos.0163 0. b) Transformada de Fourier discreta Obtendremos los mismos coeficientes con distintos valores de N para observar cómo se aproximan a los del desarrollo analítico. 1. a0 = trapz(t.17 Soluciones de Fourier mediante la fórmula de trapecios con un número relativamente alto de intervalos.3889 0./(1+t. [t..0101 0. 2*pi/m. N h t y M 12.^2). (-pi:h:pi-h)'. Calculamos el coeficiente del término constante del desarrollo y Acumularemos en s los sucesivos términos del desarrollo./(1+t.*cos(k*t))/pi. (-pi:h:pi)'. 1. .^2).8031 0.0013 = = = = = cos(2*t) cos(5*t) cos(3*t) . cos(6*t)]. end Los coeficientes en coseno son a a = 0.0532 0.0542 0.0157 0.. Calculamos únicamente los coeficientes es las funciones pares. 2*pi/N.^0 cos(t) cos(4*t) T = M'*y*2/N. m h t y = = = = 500.1275 0.3897 0. a0 = 0.y)/pi s = a0/2*ones(size(t)). s = s+a(k)*cos(k*t).8038 Calculamos los siguientes coeficientes. for k=1:5 a(k) = trapz(t. 1275 0.1275 0.0000i .3897 0.0542 0.0157 0.12822471822888 0.38889236036422 0.Aproximación trigonométrica La tabla adjunta muestra cómo se estabilizan los valores calculados al aumentar N.05423075163348 0. hay que evaluar la función en el intervalo [0.38892207380461 0.8031 0.3897 + 0.01627556617975 0.0101 0. Basta cortar el vector y en dos trozos y pegarlos cambiando el orden.01567242107834 0. Por la periodicidad. Coef A0 A1 A2 A3 A4 A5 A6 N = 12 0.01630553536884 0. fft(yb)*2/N ans = 0.0000i De las 7 primeras componentes se obtienen los coeficientes de la transformada discreta.0542 0.1:n]). los valores de π a 2π son los mismos que los de −π a 0.05326441580220 0.00077973274210 18 c) Transformada rápida Para obtener la transformada mediante el algoritmo rápido.0027 0.0157 0.12819495390619 0.80381223853720 0.00076457501605 N = 120 0.12745841540200 0.00804793366750 0.05323456637931 0.0101 0.0.0000i + 0. .80305543116051 0.0. n=floor((N+1)/2).00807805792346 0. 2π].0000i . yb = y([n+1:N.80378254202805 0.38969093028561 0.00134128211459 N = 60 0.01007848390572 0. a partir de la formulación de la ecuación diferencial como una ecuación integral. nos proporciona una idea intuitiva del método de las poligonales de Euler. Euler modificado y Runge-Kutta y los aplicaremos a algunos ejemplos. La interpretación geométrica de una ecuación diferencial con un campo de direcciones que siguen las curvas solución. Bajo ciertas condiciones. Los ejemplos que analizamos sí tienen solución cerrada. la ecuación resultante es p' = a·p Si p0 es la población en es tiempo t = 0. lineales o no. que suelen reducirse a la resolución de sistemas algebraicos. Ejemplo 1: Modelos de población de Malthus y Verhulst. la solución casi nunca puede obtenerse analíticamente mediante una fórmula cerrada. Heun. y (t )). Malthus supone que la velocidad de crecimiento de una población es proporcional al tamaño de la misma en cada momento. La evaluación numérica de esta integral por distintas fórmulas de cuadratura da lugar a los métodos básicos de resolución de ecuaciones diferenciales. 17.1 Problemas de valor inicial El Problema de Valor Inicial (PVI) consiste en hallar la solución y(t) de la ecuación diferencial ordinaria de primer orden y '(t ) = f (t . a diferencia de los problemas de frontera. disponemos de diversos métodos numéricos que proporcionan aproximaciones de la solución con la precisión requerida en las aplicaciones. que usaremos como ejemplos ilustrativos de los métodos numéricos. p a la población y p' a su derivada respecto al tiempo. Afortunadamente. En la siguiente. Si llamamos a al coeficiente de proporcionalidad.17 Ecuaciones Diferenciales Ordinarias Los problemas de valor inicial de ecuaciones y sistemas de ecuaciones diferenciales suelen resolverse por métodos directos. comprobando el orden de error de cada uno de ellos. se demuestra que el PVI tiene solución única. aplicamos estos métodos a las ecuaciones diferenciales de orden superior al primero y a los sistemas de ecuaciones diferenciales de primer orden. Formulamos el llamado Problema de Valor Inicial para la ecuación diferencial de primer orden e indicamos su aplicación a los Modelos de Población. pero otros métodos más sofisticados se obtienen más fácilmente por vía analítica. Programaremos los métodos de Euler. Esta Práctica aborda los métodos numéricos para el problema de valor inicial de ecuaciones diferenciales ordinarias de primer orden. a ≤ t ≤ b. lo que nos permite estudiar el error de los métodos numéricos desarrollados. que en t = a toma un valor determinado y0. Sin embargo. la solución del PVI es p = p0 ·e at . Para representar su campo de direcciones hacen falta dos matrices con las coordenadas de los nodos en los que trazar las direcciones y otras dos con las coordenadas de vectores que en cada punto tienen la pendiente deseada.2:5. quiver(tt. su crecimiento se ve afectado por la competencia por conseguirlos entre los miembros de la población. dy = f(tt. quedando la ecuación diferencial como p ' = a· p − bp 2 Notemos que el modelo de Malthus es un caso particular del de Verhulst con b = 0. Verhulst introduce en la ley de Malthus una corrección proporcional al número de encuentros que pueden producirse entre los miembros de la población en la búsqueda de los recursos.yy). Sin embargo. editamos un fichero f.p) a = 4.2:3. obtenemos curvas cuya pendiente en cada punto (t. MATLAB dispone de una función. Si no conocemos las soluciones.b*p. b = 1.yy.dy) Siguiendo las flechas visualizamos la forma de las soluciones.m que devuelva los valores de la ecuación diferencial del ejemplo 4 function z = verhulst (t. 17. [tt. quiver.3 Métodos Numéricos para el Problema de Valor Inicial . Representándolas obtendremos la forma aproximada de dichas soluciones. z = a*p . uno = ones(size(tt)). apropiada para visualizar el campo de direcciones de una ecuación diferencial. cuando los recursos de que dispone la población son limitados. Los vectores son escalados convenientemente por la función quiver.y).^2. La solución del PVI correspondiente al modelo de Verhulst es a p0 p(t ) = b p0 + (a − b p0 )e− at 17. t = 0:. y = 0:. la ecuación diferencial proporciona sus pendientes en cada punto del plano.El modelo de Malthus se aplica con bastante precisión a poblaciones pequeñas con recursos prácticamente ilimitados o a otros fenómenos como la desintegración radiactiva (con a < 0). y) es el valor de f en dicho punto. En primer lugar.yy] = meshgrid(t.uno.2 Campo de direcciones Si representamos en el plano cartesiano las soluciones de una ecuación diferencial para distintos valores iniciales. esta ecuación integral es la base tanto para la demostración teórica de la existencia y unicidad de la solución del problema de valor inicial. En el caso numérico. obtenidas con paso distinto. y así hasta obtener la convergencia. si el error máximo tiende a cero a la misma velocidad que hp.. expresamos el problema de valor inicial en la forma t y (t ) = y (t0 ) + ∫t0 f ( s. y(t1).. y(t0).Los métodos numéricos no dan una expresión analítica de la función que permitiría evaluarla en cualquier t. Denotamos por y0. El resultado se asigna a y1(t). El límite es la solución buscada. como para la aproximación numérica de las mismas.. definidos éstos como la distancia en cada nodo entre la solución exacta y la aproximada. Por el contrario. Curiosamente. yn las aproximaciones calculadas de los valores de la solución en los nodos correspondientes. y1. . Para resolverla.. comparamos la solución obtenida con la exacta para problemas en que ésta puede determinarse analíticamente. algunos métodos hacen en cada paso una predicción del valor buscado y luego integran de nuevo para corregir esta predicción. < tn = b Los tk se consideran como nodos de integración y suelen tomarse equiespaciados para simplificar la aplicación del método. los métodos analíticos obtienen la solución mediante transformaciones efectuadas sobre la forma diferencial del problema de valor inicial. Además de ser convergente. Para analizar la precisión de un método numérico. interesa que un método se aproxime lo más rápidamente posible al límite.. sino valores aproximados de la misma en un número finito de instantes a = t0 < t1 < ... Se dice que un método es convergente si el error máximo tiende a 0 cuando el paso se hace pequeño. que es el siguiente iterado. la evaluación de la integral mediante fórmulas de cuadratura ha de enfrentar la dificultad de que en el integrando aparece la función y(t) que se trata de obtener. Tomamos como medida del error el máximo de los errores locales. . Cuando no se dispone de la solución exacta. y(tn). Decimos que un método es de orden p. La distancia entre nodos consecutivos es el paso de integración h.. se considera la ecuación integral como una ecuación de punto fijo de incógnita y(t) y se itera sustituyendo a la derecha la estimación inicial y0(t) = y0. y ( s )) ds y evaluamos numéricamente la integral del segundo miembro. Ejemplo 2: (Continuación de ejemplo 1) . se comparan dos soluciones aproximadas. En el caso teórico. Para obtenerlas. cuando h tiende a 0. Comparamos esta rapidez con la tendencia a cero de las potencias de h. Repitiendo este proceso sucesivamente para cada nodo. obtenemos la estimación de la solución en el nodo t1: y1 = y0 + h· f (t0 . 17. Para estimar y(t1). Supondremos pues que el integrando toma en todo el intervalo el valor f(t0. pero sólo conocemos el integrando en el punto t0. 1.. y0./(b*p0+(a-b*p0)*exp(-a*t)). yk ) El siguiente algoritmo calcula estos valores y los almacena en un vector y. y0 ). obtenemos las aproximaciones de la solución en los nodos del intervalo. con lo que la integral buscada se aproxima por h ⋅ f (t0 . y(k)) . Llevando este valor al segundo miembro de la ecuación integral. Para k = 0. t1]. b. y(t ))dt en el intervalo [t0. b = 1. p = a*p0.Codifiquemos la solución exacta del modelo de población de Verhulst: a p0 b p0 + (a − b p0 )e − at p (t ) = function p = logistic(t. y0).p0) a = 4. hemos de evaluar la integral t1 ∫t0 f (t .m que utilizaremos para hallar los errores de los distintos métodos. y0 )... 2. Algoritmo de Euler Entrada: Proceso: a. .n-1 hacemos yk +1 = yk + h· f (tk . por el llamado método de Euler. n Paso de integración h = (b–a)/n Nodos de integración t = (a : h : b)' valor inicial y(1) = y0 for k = 1 : n y(k+1) = y(k) + h* f(t(k).4 Método de Euler El método de Euler aproxima la integral de forma bastante rudimentaria. Guardamos la función en un fichero logistic. [t.y) Si hemos puesto la solución exacta en el fichero logistic.0. calculamos el error mediante max(abs(y-logistic(t.5 3 3.20) Almacenamos los nodos y las iteraciones en columna para facilitar la representación gráfica de la solución de sistemas de ecuaciones diferenciales que veremos en la Práctica siguiente.1) Codificamos el algoritmo de Euler en MATLAB y lo guardamos en mieuler.m porque es una función del sistema).3.5 1 1.1))) .m (no se puede usar euler.dy) 5 4 3 2 1 0 -1 0 0.Salida: end t. Para resolver el modelo de población. Es conveniente inicializar y como un vector columna de n+1 ceros. ejecutamos y representamos la salida sobre el campo de direcciones anterior: quiver(tt.5 2 2.5 hold plot(t.uno.yy.0.1. Así ahorraremos tiempo en las asignaciones de cada iteración.y] = mieuler(0.m. y y = zeros(n+1. basta aproximar la integral en cada paso mediante un método más preciso. como puede ser el de los trapecios.0. 17.y] = mieuler(0.5 0 0 0. .y) 4.5 1 1.y] = mieuler(0. 3 Método de Heun Para mejorar la precisión del método de Euler.6616 Comprobamos que duplicando el número de subintervalos.0. Ejemplo 3 [t.5 1 0.5 2 1. [t. y a 0 si la población inicial es nula.5 3 Repetimos el proceso con distintos valores iniciales para comprobar que la solución tiende al valor límite a/b. 10 por ejemplo. produciéndose oscilaciones en el resultado. se advierte que el método se hace inestable.40) Tomado menos intervalos. El método de Euler es de orden h. el error se divide aproximadamente por 2.3.10) plot(t.1.5 2 2.3.5 4 3.5 3 2.1.ans = 0. partiendo de un valor positivo. Algoritmo del método de Heun k=1:n k1 = f(t(k). por ejemplo en el primer paso. y0 ) + f (t0 . y lo guardamos en heun. prediciendo primero un valor por Euler y ajustándolo después por trapecios. variando sólo la forma de obtener el paso siguiente. En general. y(k)) Predicción yp = y(k) + h*k1 k2 = f(t(k)+h. yp) Corrección y(k+1) = y(k) + h/2*(k1+k2) fin para k Para Codificamos el algoritmo de Heun en MATLAB. A falta del valor de y1. y1).m. y1 ) ( p ) Análogamente obtenemos y2 a partir de y1. y0 ) Ahora ya podemos aplicar la fórmula de trapecios y corregir el valor de y1. del que sólo se diferencia en la forma de obtener la y en cada paso. yk ) + f (tk + h. tenemos el inconveniente de que. y1 = y0 + h 2 ⋅ f (t0 . ykp+1 ) ) Obtenemos así el llamado método de Heun. yk ) b) Corregir la predicción mediante trapecios yk +1 = yk + h 2 ⋅ ( f (tk . . lo estimamos por Euler: y1p = y0 + h ⋅ f (t0 . La estructura del algoritmo correspondiente es igual a la del algoritmo de Euler.Sin embargo. no conocemos f(t1. dado que y1 es justamente el resultado de este paso. el paso k consiste en: a) Predecir un valor de yk+1 mediante ykp+1 = yk + h ⋅ f (tk . modificando el fichero de Euler. 9185 5.1] con h = 0.8 m/s2 y k = 0. a) Resuelve el PVI en el intervalo [0. Si la resistencia del aire es proporcional al cuadrado de la velocidad.11 kg se lanza verticalmente hacia arriba en el aire con una velocidad inicial de 8 m/s.8638 4.1379 -1.y) k = 0. m = 0.11.5000 0.10) t = 0 0. ¿Hacia qué tiende v? Solución Codificamos la ecuación diferencial en f.8427 -0.1168 -2.k/m*y.6000 0.8315 3. z = -g .002. a velocidad constante.8.3000 0.1000 0.02 kg·m–1 es el coeficiente de resistencia del aire.1] la velocidad parece decrecer linealmente como si fuese un movimiento de caída uniformemente acelerado.8170 2.8.0000 6. En el intervalo [0.*abs(y).Ejemplo 4: Caída en un medio resistente Un proyectil de masa m = 0.4000 0.0916 . g = 9.m function z = proyectil(t.8264 0.8166 1.1.0000 y = 8.9000 1. b) Representa la solución v gráficamente e interpreta físicamente el resultado obtenido.1.y]=heun(0.2000 0.7000 0.8000 0. se satisface la ecuación diferencial v ' = − g − k ·v·| v | / m donde g = 9. Al tomar un intervalo mayor observamos que la velocidad tiende a cierto límite y el proyectil cae finalmente con movimiento uniforme. por el método de Heun. a) [t. La velocidad tendería a –∞. yk +1/ 2 ) El método de Euler modificado tiene error de orden 2. lo aproximamos por Euler y1/ 2 = y0 + h / 2· f (t0 .5 Método de Euler Modificado Utilizando como método de integración el del punto medio. y1/ 2 ) El primer paso del método modificado de Euler queda pues como y1 = y0 + h· f (t0 + h / 2.17. yk ) yk +1 = yk + h· f (tk + h / 2..4000 0. obtenemos yk+1 a partir de yk mediante las operaciones yk +1/ 2 = yk + h / 2· f (tk . Como aún no disponemos de él.10) t = 0 0. como el de Heun. obtenemos el llamado método de Euler modificado para ecuaciones diferenciales. y(k)) % Estimación de yk+1 y(k+1) = y(k) + h* f(t(k) + h/2. .1000 0. t1] por la fórmula de punto medio que da h· f (t0 + h / 2.5000 0.8. t1]. Algoritmodel método de Euler modificado Para k = 1 : n %Estimación de yk + h/2 y12 = y(k) + h/2* f(t(k). 2. 1.7000 . y1/ 2 ) En la etapa k . y12) fin para k Ejemplo 5 [t. pongamos por ejemplo en [t0.n-1.2000 0.1.. Para evaluar la integral en un intervalo.3000 0. t0 + h/2.y]=mieulerm(0. para k = 0.6000 0. y0 ) Con esta aproximación. necesitamos el valor de y en el punto medio del mismo. evaluamos la integral en [t0. yk) k2 = f(tk+h/2.8190 1. obtenemos yk+1 de yk mediante las expresiones siguientes k1 = f(tk.y1) k4 = f (t1 . obtenemos el primer paso del método de Runge-Kutta. Observando los términos de la fórmula de integración aproximada vemos que.0000 6. yk + h/2·k2) k4 = f(tk+1.8649 4. y1/2) k2 = f (t1/ 2 .8000 0.0889 17.6 Método de Runge-Kutta El método elemental que más se utiliza para resolver numéricamente ecuaciones diferenciales es. que dependen de valores de y aún no disponibles.y = 0.8190 2.1135 -2.9190 5. Basado en la regla de Simpson de integración numérica. yk + h/2·k1) k3 = f(tk+h/2. y1 = y0 + h / 6·(k1 + 2k2 + 2k3 + k4 ) En general. Llamando k1 = f (t0 . hay que estimar f(t1/2.8460 -0. estimamos y1 por Euler con pendiente k3 y evaluamos f en (t1. yk + h·k3) yk+1 = yk +h/6·(k1 + 2k2 + 2k3 + k4) . el de Runge-Kutta.0000 8. y1).8330 3. y0 + h / 2·k2 ) Finalmente.8292 0. resulta como éste de orden 4. y1/2) y f(t1. en lugar de k1 y volvemos a evaluar f k3 = f (t1/ 2 . y0 + h / 2·k1 ) Estimamos ahora y1/2 por Euler con pendiente k2. sin duda. en el primer paso. Denotamos por t1/2 a t0+h/2. y0 + h·k3 ) Combinando adecuadamente estas estimaciones de f en la regla de Simpson.9000 1.1342 -1. y0 ) estimamos y1/2 por Euler y evaluamos f en (t1/2. 5000 0.10) t = 0 0.1 Enunciados 1.8000 0.9000 1.8643 4. .6000 0.1. se lanza verticalmente hacia arriba con una velocidad inicial de 8 m/s siendo frenado por la acción de la gravedad y por la resistencia del aire.9187 5.7. Se satisface la ecuación diferencial m·v’ = − m·g − k·v|v| donde g = 9. Un proyectil de masa m = 0.0000 y = 8.8179 1.0000 6.8180 2.1358 -1.0901 17.1150 -2.8322 3.002 Kg/m. Tomando un intervalo de tiempo mayor.8279 0.y]=rk4('proyectil'.7 Problemas 17.8. Obtén éste analítica y numéricamente.4000 0.8 m/s2 y k = 0. Justificar el orden de error de cada método.1000 0.11 Kg. Halla la velocidad al cabo de 2 segundos usando el a) Método de Euler con h = 20 g) Método de Euler modificado con n = 20 b) Método de Euler con h = 10 h) Método de Euler modificado con n = 10 c) Método de Euler con h = 5 i) Método de Euler modificado con n = 5 d) Método de Heun con h = 20 j) Método de Runge-Kutta con n = 20 e) Método de Heun con h = 10 k) Método de Runge-Kutta con n = 10 f) Método de Heun con h = 5 l) Método de Runge-Kutta con n = 5 Halla la solución analíticamente.8445 -0.2000 0.0.7000 0.3000 0.Ejemplo 6 [t. comprobar que la velocidad “crece” hasta llegar a cierto límite. Representa gráficamente la solución. Supongamos que la altura inicial del líquido es de 3 m y el volumen inicial de 180p/3 m3. x es la altura de la superficie del líquido desde el vértice del cono y A(x) es el área transversal del depósito a una altura x. Si h=180 n sera lo siguiente : n=(b-a)/h.) Método de Euler con h = 180 El algoritmo del método de euler lo modificaremos porque en este ejercicio nos dan como dato el paso de integración luego tendremos que sacar n. 17.2 Soluciones 2.6πr2sqrt(2g)*sqrt(x)/(π*20/3*x2) b.2. al cabo de una hora t=3600s Entonces la ecuación diferencial quedara de la siguiente manera : Dx/dt= -0. Justificar el orden de error de cada método. Luego : N=(3600-0)/180=20 .6πr 2 2g dt A( x ) orificio. x. . Halla el nivel del agua al cabo de una hora. Un líquido de baja viscosidad fluye de un tanque cónico invertido por un orificio dx x circular a razón de donde r = 3 mm es el radio del = −0. Representa gráficamente la solución. Donde b=t=3600s y a=t0=0. V0=60*pi m3 Nos piden calcular el nivel del agua.7.- A(x)= 3*Volumen/altura=pi*20*x2/3 A(x) x Supongamos: x0=3m. mediante a) Método de Euler con h = 360 g) Método de Euler modificado con h = 360 b) Método de Euler con h = 180 h) Método de Euler modificado con h = 180 c) Método de Euler con h = 90 i) Método de Euler modificado con h = 90 d) Método de Heun con h = 360 j) Método de Runge-Kutta con h = 360 e) Método de Heun con h = 180 k) Método de Runge-Kutta con h = 180 f) Método de Heun con h = 90 l) Método de Runge-Kutta con h = 90 Halla la solución analíticamente. y0.1)=y0.1)+h*f11(t(k). % El siguiente algoritmo calcula estos valores y los almacena en un % vector y. % Nodos de integración y=zeros(n+1. end Si lo ejecutamos con los valores dados en el enunciado : [t.n) % % Obtenemos las aproximaciones dela solución en los nodos del intervalo.m en el que pondremos la ecuación diferencial. El algoritmo es el siguiente : function z=f11(t.20) . % h=(b-a)/n. for k=1:n y(k+1.3.6*pi*r^2*sqrt(2*g)*sqrt(y).y]=mieuler(0.y]=mieuler(a.3600.1) % Así ahorraremos tiempo en las asignaciones de cada % iteración. el error % obtenido por la formula [max(abs(y-logistic(t.b. El método de euler es de orden h.1).8. Ahora pasamos a aplicar los métodos./(pi*20/3*y.b. % Valor inicial y(1. El algoritmo del método de euler es el siguiente : function [t.y) %ejercicio 2 de propuestos. g=9.n) % % [t. % por el llamado método de euler. z=-0.1)=y(k.^2). r= 0. y=x Antes de aplicar los algoritmos de cada método tendremos que crear un archivo de ombre f11. %paso de integración t=(a:h:b)'.y]=mieuler(a.La nomenclatura : y0=x0=3 m.y0. % % >>>>>>>>>> CONCLUSIONES: duplicando el numero de subintervalos. % % ¡¡ NOTA !!: Es conveniente inicializar 'y' como un vector columna % de n+1 ceros: y=zeros(n+1.y(k.003.1)).y0)))] se divide % aproximadamente por 2. 9981 2.9979 2.9983 2.9976 2.9995 2.9999 2.9991 2.9986 2.9984 2.9985 2.9980 2.0000 2.9975 .9988 2.9989 2.9996 2.9990 2.t = y = 0 180 360 540 720 900 1080 1260 1440 1620 1800 1980 2160 2340 2520 2700 2880 3060 3240 3420 3600 3.9993 2.9978 2.9994 2.9998 2. Luego : n=3600/180=20.y0.9975m.n) % % Para mejorar la precision del metodo euler basta aproximar la integral en cada paso mediante un metodo mas preciso (como puede ser el de trapecios).) Método de Heun con h = 180 x=2.El nivel del agua al cabo de una hora serà : e. y0=x0=3m.y1) dado que y1 es el resultado de este paso. y=x Es el resultado que buscamos. Al igual que en el apartado anterior el paso de integración es un dato del problema entonces tendremos que hallar la n para poder introducirla como datos de entrada en la cabecera del algoritmo. % Obtenemos el llamado metodo Heun.y]=Heun(a.y]=Heun(a. h=(b-a)/n.b. % Entonces ya podremos utilizar trapecios y corregir el valor de y1. % Pero tenemos el inconveniente de que en el primer paso no conocemos f(t1. t=(a:h:b)'. Entonces : n=(b-a)/h siendo b=t=3600s y a=t0=0s.n) % % % [t. entonces estimaremos el valor de y1 por euler. % Paso de integración % Nodos de integración .y0.b. El algoritmo del método de Heun es el siguiente : function [t. y=zeros(n+1.y(k.yp).1)).9990 2.9992 2.9976 . yp=y(k.9985 2.9986 2.9982 2.1)+h/2*(k1+k2).1)+h*k1.9991 2.9988 2.3.9993 2. y(k+1.9996 2.0.9995 2. % Predicción k2=f11(t(k)+h.1)=y(k.9980 2.9987 2.9978 2.0000 2. % Valor inicial y(1.3600.1).9977 2.9998 2.9983 2. for k=1:n k1=f11(t(k).y]=Heun('deposito'.9981 2.1)=y0.9997 2.20) t = 0 180 360 540 720 900 1080 1260 1440 1620 1800 1980 2160 2340 2520 2700 2880 3060 3240 3420 3600 y = 3. % Corrección end Introducimos los datos y ejecutamos el algoritmo y los resultados son : [t. 9992 2.9993 2. La solución exacta de la ecuanción diferencial : La ecuación diferencial se puede resolver por partes ya que tiene la forma siguiente : Dx/dt=A*(sqrt(x)/x3/2) entonces la solución exacta es : Utilizando la función logistic : function y=sdeposito(t.73 10-8 y para el método de Heun 2. y=(y0^(5/2)-t*0.2.9998 2./(pi*20/3)*5/2).8.y0)).9996 2. .9997 2.y0) r= 0. g=9.9991 0 500 1000 1500 2000 2500 3000 3500 4000 El nivel del agua al cabo de una hora serà : x=2.9975m.9994 2.6*pi*r^2*sqrt(2*g).9995 2. El error se calcula utilizando la función sdeposito.0001 3 2.68 10-13. en la cual tenemos que poner la solución exacta de la ecuación para luego poder hallar el error máximo poniendo max(y-sdeposito(t.9975 Método de Heun 3.^(2/5). Con esta función obtenemos que el herror para el método de Euler es 7.003.9999 2. file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo.0:0..0.y.0.005:1.0.0110 >> y3-y2 ans = file:///E|/Documentos/Estudios/Documentacion%20Asigna.2).0:0.2).0:0. y2 = y(end) >> [t..0:0.y] = mieuler('verhulst'.y.y.0:0.txt CAMPO DE DIRECCIONES ------------------->> campo('verhulst'.0:0.y] = mieuler('verhulst'.005:3.'k') end CALCULO DEL ERROR ----------------GRAFICAMENTE ------->> [t.01:3.0:0.2).y.0.k).y] = mieuler('verhulst'.01:3.2).0.y] = mieuler('verhulst'.0025:1.0025:3.2).%20-%2019%20(Cualitativa)/practica%2017%20-%20EDO.6) >> hold on METODO NUMERICO: EULER --------------------->> for k=0:0.3.0.1:6 [t.01:1. y3 = y(end) >> y2-y1 ans = 0.y] = mieuler('verhulst'. y1 = y(end) >> [t.txt (1 of 3) [09/03/2008 13:49:42] . >> plot(t. >> plot(t.y] = mieuler('verhulst'..'b') CALCULO >> [t..0.2).y] = mieuler('verhulst'.'g') >> [t.%20(Sistemas)%20-%2019%20(Cualitativa)/practica%2017%20-%20EDO. plot(t.0. >> plot(t.'r') >> [t. >> y1 = y(end) >> [t. >> y2= y(end) y2 = 2.2). >> y1 = y(end) y1 = 2.%20-%2019%20(Cualitativa)/practica%2017%20-%20EDO.0025:1..0.005:1.9673 >> (y2 .0:0.0..2).9609 % aprox 4.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo.2).%20(Sistemas)%20-%2019%20(Cualitativa)/practica%2017%20-%20EDO. >> y2= y(end) file:///E|/Documentos/Estudios/Documentacion%20Asigna.01:1. Lineal.2). Es muy malo METODO NUMERICO: HEUN --------------------CONVERGENCIA >> [t.01:1..y1)/(y3-y2) ans = 3.txt 0.0:0.0054 El doble de orden reduce el error a la mitad.2).0:0.005:1.0:0..0.y] = eulermod('verhulst'. >> y3 = y(end) y3 = 2.9670 >> [t.y] = eulermod('verhulst'.y] = heun('verhulst'.y] = heun('verhulst'.0:0. Aumentar al doble de puntos mejora en 4 la aproximacion es cuadrático METODO NUMERICO: EULER MODIFICADO --------------------CONVERGENCIA >> [t.0.0.txt (2 of 3) [09/03/2008 13:49:43] .y] = heun('verhulst'.9673 >> [t. 0:0.2).file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labo.y] = eulermod('verhulst'.0.y.0:0.0025:1..y1)/(y3-y2) ans = 3.txt >> [t.y] = mieuler('verhulst'..0.3:3.txt (3 of 3) [09/03/2008 13:49:43] .9475 Convergencia cuadratica Justificacion de la importancia de utilizar método preciso ---------------------------------------------------------Utilizando un metodo malillo: >> [t. plot(t.0:0..6:40.0:0.y] = mieuler('verhulst'.0.y] = mieuler('verhulst'..2).%20-%2019%20(Cualitativa)/practica%2017%20-%20EDO.y.2).0.y.'r') se desmadra totalmente file:///E|/Documentos/Estudios/Documentacion%20Asigna. >> plot(t.7:3.%20(Sistemas)%20-%2019%20(Cualitativa)/practica%2017%20-%20EDO.'r') >> [t. >> y3 = y(end) >> (y2 .'k') >> [t.2). >> plot(t. dan lugar a ecuaciones diferenciales de orden superior... generalizaremos dichos métodos a situaciones que involucren la variación con respecto a t de varias magnitudes. b]. y m (t ))    M  ′ y m (t ) = f m (t . éstos son realmente útiles cuando no se dispone de una expresión analítica adecuada de la solución.. Sistemas de ecuaciones diferenciales En el tema anterior hemos desarrollado métodos numéricos para resolver ecuaciones diferenciales ordinarias de primer orden.______________________________________________________________________ 18. la derivada primera de cada función puede expresarse explícitamente en términos de la variable independiente y de las funciones incógnita.1. aquellas en la que intervienen derivadas de y de orden mayor que 1. y1 (t ).. y m (t ))  1 . o bien. En este tema.. consistiendo básicamente en trabajar con vectores en lugar de escalares. pues la aceleración es la derivada segunda de la posición. y m (t ))  ′ y 2 (t ) = f 2 (t . Como estas ecuaciones se resuelven analíticamente. Ecuaciones de orden superior y sistemas Una sistema de ecuaciones diferenciales expresa las relaciones que verifican varias funciones desconocidas. Naturalmente. Un ejemplo típico de sistema diferencial surge al estudiar la evolución de dos poblaciones biológicas relacionadas entre sí. con tantas ecuaciones como el orden de la ecuación dada.. y en el segundo de las ecuaciones diferenciales de orden superior. y 2 (t ). El objetivo es determinar estas funciones en un intervalo [a. y1 (t ).. La generalización buscada es directa y sencilla. y2(t). . que aparecen en las aplicaciones cuando se conoce cómo varía una magnitud y con respecto a otra. en este caso de orden 2. 18. generalmente el tiempo t... En el caso más sencillo. Los programas se modifican mínimamente gracias a la capacidad vectorial de MATLAB. y 2 (t ).. Aplicaremos los métodos desarrollados a la resolución de circuitos eléctricos LRC. ym(t) y sus derivadas respecto a la variable t. En el primer caso se trata de los sistemas de ecuaciones diferenciales. en lugar de desarrollar métodos específicos para ecuaciones de orden superior. ′ y1 (t ) = f1 (t . y1 (t ).. que dan lugar a ecuaciones diferenciales lineales de segundo orden con coeficientes constantes. se prefiere transformarlas en sistemas de primer orden. Por la misma razón. y1(t)... en cualquier momento podemos comprobar la precisión de los resultados numéricos.. y 2 (t ). F = m·a.. Conocidas leyes físicas. como la ley de Newton. a su vez.Sistemas de ecuaciones diferenciales 2 Las m ecuaciones admiten una escritura compacta en términos vectoriales. y (t )). Si no fuera por los zorros. si hay demasiados zorros. Llamando y1 a la función incógnita y. K . Los conejos son devorados por los zorros a velocidad proporcional al producto del número de zorros. Estas ideas se resumen en el sistema diferencial c' = α c − β c z   z ' = −γ z 2 + δ c z  donde α. K y ( m−1) ) Las ecuaciones diferenciales de orden superior al primero se transforman en sistemas mediante un cambio de variables. y (t )) El Problema de Valor Inicial consiste en resolver este sistema dado el valor en el instante inicial a. c(t). Considerando las incógnitas como componentes de una función vectorial de una variable y (t ) = ( y1 (t ). con la derivada de mayor orden expresada en función de las demás y en su caso de la variable independiente. y (t ). que suponemos proporcional al número de encuentros entre zorros y conejos. y2 (a). y (t )) = ( f1 (t . β. han de competir entre ellos por el alimento. es proporcional al producto de sus poblaciones respectivas. es decir. zorros y conejos. γ y δ son constantes apropiadas. por ejemplo. Ejemplo 1 Dos especies viven en determinado medio y una de ellas se alimenta de la otra. K. El factor de competencia se considera proporcional al cuadrado de la población de zorros. y (a) = ( y1 (a). f m (t . como componentes de una función vectorial de varias variables f (t . que. los conejos se reproducirían proporcionalmente a su población. y ′(t ). y ( m ) (t ) = f (t . pues encuentran en el medio suficientes recursos para alimentarse. K. z(t). y m (t ) ) : IR → IR m y las ecuaciones. Supondremos que la ecuación está en forma explícita. por el número de conejos. Asimismo. y ′′(t ). y 2 (t ). La proliferación de los zorros depende de la cantidad de conejos que pueden cazar. queda el sistema equivalente . y (t )). y2 a su derivada y'. y3 a la derivada segunda y". ym (a) ) = ya La notación vectorial sugiere la extensión de los métodos numéricos de ecuaciones diferenciales ordinarias a los sistemas de ecuaciones diferenciales. y (t )) ) : IR m+1 → IR m el sistema diferencial se escribe formalmente igual que una ecuación diferencial y ′(t ) = f (t . Las ecuaciones diferenciales de orden m involucran la función incógnita y(t) y sus derivadas hasta el orden m. f 2 (t . y así sucesivamente. efectuando componente a componente las operaciones de estos métodos. b]. y 2 (t ). el método de Euler se aplica igual que en el caso unidimensional. entonces. . Al fijar los valores de Q e I en t = 0 se obtiene un problema de valor inicial. y (a) = y a Para cada t.. Método de Euler Consideramos el problema de valor inicial asociado a un sistema de m ecuaciones diferenciales y a unos valores iniciales dados y ′(t ) = f (t . una bobina y un condensador conectados en serie con una fuente de energía eléctrica.2. y m (t ))  Ejemplo 2 ′ y1 (t ) = y 2 (t ) ′ y 2 (t ) = y3 (t ) Un circuito eléctrico LRC consta de una resistencia.. el comportamiento del circuito viene dado por la ecuación LI ′ + RI + Q = E (t ) C R C E(t) donde Q es la carga en el condensador e I = Q′ es la intensidad de la corriente por el circuito. t ∈ [a. Dividimos el intervalo [a. por L la inductancia de la bobina y por C la capacidad del condensador y suponemos que la tensión en la fuente viene dada por una función del tiempo E(t). obtenemos el sistema equivalente de primer orden Q′ = I   Q    I ′ =  E (t ) − − RI  L  C    18.. Salvo este pequeño detalle. Si denotamos por R el valor de la L resistencia. Si expresamos I e I' en función de Q. queda una ecuación diferencial de segundo orden LQ′′ + RQ′ + Q = E (t ) C Tomando en cambio como variables Q e I. y1 (t ). y(t) e y'(t) son vectores m-dimensionales. b] en n partes iguales h = (b − a ) / n t k = a + (k − 1) * h .3 Ecuaciones de orden superior y sistemas     ′ y3 (t ) = y 4 (t )   M  ′ y m (t ) = f (t . y (t )) . :))'. ya que son de paso fijo. 2. ….y0) donde odefun es el fichero de la ecuación diferencial. Damos a continuación un posible código del método de Euler. el algoritmo determina los puntos a evaluar. MATLAB requiere que al evaluar un sistema diferencial. y k ) Vamos a programar el método de Euler para sistemas diferenciales. En el primer caso. y(t0)=y0. . Nuestros algoritmos usan la versión extensa de tspan. y(1.y(k. h = diff(t). vemos que la sintaxis más sencilla es [t.Sistemas de ecuaciones diferenciales y estimamos iterativamente el valor de la solución en cada nodo según y (t1 ) = y1 = y a 4 Para k = 1. La salida proporciona una matriz y cuyas columnas son las componentes de la solución en los instantes dados por t. tspan es el intervalo de integración e y0 la condición inicial. Consultando la ayuda de ODE23. al algoritmo añade una fila a la matriz y con el valor calculado de la solución para el instante siguiente.:) = y(k. end Curiosamente. o bien un vector que contenga todos los instantes en los que se requiere conocerla. function [t. mediante una función cuyas entradas y salidas sean análogas a las de los métodos implementados en MATLAB. de acuerdo con estas observaciones. El vector tspan puede ser de la forma [a. La llamada a la función odefun dy = odefun(t. y debe producir una columna dy con las derivadas dadas por el sistema diferencial.b]. las derivadas se obtengan en columna. % % en los instantes dados por t n = lenght(t). y). Cada fila de y contiene el valor de la solución en el instante correspondiente de t.y]=mieuler(f.y) tiene dos argumentos de entrada. mientras que genera la solución por filas.tspan. f(t. siendo a y b los extremos del intervalo en que se quiere calcular la solución. m y (t k +1 ) ≅ y k +1 = y k + h· f (t k .:) + h(k)*feval(f.:) = y0.t(k). Por este motivo aparece la transpuesta en el código de mieuler.y0) % Método de Euler para el problema de valor inicial % % y'(t) = f(t.t. for k=1:n y(k+1.y] = ode23(odefun.y(t)). aunque no utilice el primero. En cada paso. en función de la precisión requerida. 01.4. d=0. [t. plot(t.[10. dz].tspan. Resolvamos el problema de valor inicial con partiendo de c = z = 10.03:30.01. por el método de Euler con 1000 subintervalos. El gráfico muestra la evolución de las poblaciones con el tiempo. en un tiempo de 30 unidades. observándose que tienden a una situación estable con 40 individuos de cada especie.y) % Modelo presa-rapaz (zorros. z = y(2). g=0. dz = g*c*z-d*z^2. % Variables c = y(1).5 Ejemplo 3 Método de Euler El fichero siguiente evalúa el sistema diferencial del Ejemplo 1 con determinados valores de los parámetros. % Ecuacion dc = a*c-b*c*z.y) .y] = mieuler('presarap'. % Salida dy = [dc. tspan = 0:0. c' = α c − β c z   z ' = −γ z 2 + δ c z  function dy = presarapaz(t. conejos) % Parametros a=0. b=0.10]).01. la de zorros aumenta. plot(y(:. lo que a su vez hace disminuir .2)) xlabel('conejos') ylabel('zorros') 55 50 45 40 35 zorros 30 25 20 15 10 10 20 30 40 conejos 50 60 70 Cada punto de la trayectoria muestra las poblaciones de ambas especies en un momento dado.Sistemas de ecuaciones diferenciales 70 6 60 50 40 30 20 10 0 5 10 15 20 25 30 En este otro gráfico se observa la interrelación entre ambas poblaciones. La trayectoria se recorre en sentido antihorario.y(:. Se observa que cuando la población de conejos es grande.1). dI = (E-Q/C-R*I)/L. pero con otros valores.dI]. = 0. Ejemplo 4 Consideremos circuito eléctrico LRC en el que no hay tensión impresa y la resistencia es cero. con lo que la población de zorros se reduce. La solución general de la ecuación diferencial del circuito LQ′′ + es Q =0 C R L E(t) C Q = A cos ω0 t + B sin ω 0 t donde A y B dependen de las condiciones iniciales. I = y(2). function dy=lrc(t. los valores reales suelen estar en diferente escala. En ausencia de resistencia. por ejemplo. el circuito no pierde energía y presenta oscilaciones periódicas sinusoidales de frecuencia angular ω0 = 1 LC. = 1. el aumento de zorros provoca mayor competencia entre ellos además de escasez de conejos. % Ecuación dQ = I. El fichero siguiente codifica el sistema diferencial Q′ = I   Q    I ′ =  E (t ) − − RI  L  C    de un circuito genérico LRC. la extinción de una especie.y) % Circuito LRC % LI' + RI + Q/C = E(t) % L R C E Prametros del circuito = 2. = 0. provocando. En este caso los valores de los parámetros hacen que el sistema tienda al equilibrio rápidamente.7 Método de Euler el número de conejos. Damos valores convencionales a los datos para simplificar los cálculos. % Variables Q = y(1). % Salida dy = [dQ. En el propio fichero se establecen los parámetros del circuito concreto. el comportamiento puede ser distinto. . Podemos mejorar la precisión aumentando el número de pasos de integración.y) grid 1. plot(t. como puede ser el método de Heun o el de Runge-Kutta. porque supone que el circuito genera energía. pero así aumenta también el coste computacional. t ∈ [a. 18.Sistemas de ecuaciones diferenciales 8 Resolvamos el circuito por el método de Euler en un intervalo de 30 segundos con 1000 subintervalos tspan = 0:0. y (a) = y a Dividimos el intervalo [a.03:30.5 -1 -1.y] = mieuler('lrc'.tspan. y (t )) . La alternativa es recurrir a un método de mayor orden.3. [t.[1.5 0 5 10 15 20 25 30 El gráfico tiene algo inesperado. pues la amplitud de las oscilaciones va en aumento. Concluimos que es debido a la limitada precisión del método de Euler. b] en n partes iguales h = (b − a ) / n t k = a + (k − 1) * h y estimamos iterativamente el valor de la solución en cada nodo según y (t1 ) = y1 = y a . en lugar de mantenerse constante. Método de Runge-Kutta Recordemos las fórmulas de Runge-Kutta del caso escalar y las adaptamos al problema de valor inicial y ′(t ) = f (t .0]).5 1 0. Esto no tiene sentido físico.5 0 -0. b]. obtenemos un resultado más coherente con lo esperado desde el punto de vista físico.t. teniendo en cuenta las observaciones anteriores sobre la sintaxis de estas funciones.:)+h(k)/2*k1)'. y(k. y k + h / 2·k1 ) k 3 = f (t k + h / 2. for k=1:n-1 k1 = feval(f.y] = rungekut('lrc'. function [t.t(k+1). 2. ….:))'. tspan = 0:0. % % en los instantes dados por t h = diff(t). y(k.0]).t(k). plot(t. y(1. [t.9 Para k = 1. y(t0)=y0. y k + h / 2·k 2 ) k 4 = f (t k + h.tspan. m k1 = f (t k .y(k. k4 = feval(f. k3 = feval(f.y]=rungekut(f.:)+h(k)*k3)'. y k + h·k 3 ) Método de Runge-Kutta y (t k +1 ) ≅ y k +1 = y k + h / 6(k1 + 2 * k 2 + 2 * k 3 + k 4 ) Codificamos el método de Runge-Kutta para sistemas. y(k. y(k+1.t(k)+h(k)/2.y0) % Método de Runge-Kutta para el problema de valor inicial % % y'(t) = f(t.t(k)+h(k)/2.[1. n = length(t).:) = y0.:) = y(k.y(t)).:)+h(k)/2*k2)'. y k ) k 2 = f (t k + h / 2. end Ejemplo 5 Aplicando Runge-Kutta al problema de valor inicial del ejemplo anterior con el mismo número de subintervalos. k2 = feval(f.:)+h(k)/6*(k1+2*k2+2*k3+k4).y) grid .03:30. R L E(t) C . I = y(2).4. se producen oscilaciones o no.m cada vez que se desea modificar uno de ellos. En ausencia de fuentes de potencial. la resistencia siempre es positiva y parte de la energía eléctrica se transforma en calor. % Salida dy = [dQ. Las variables globales se asignarían desde el espacio de trabajo o desde otro fichero. % Variables Q = y(1). function dy=lrcg(t.5 0 -0. Paso de parámetros mediante variables globales Para analizar el modelo del circuito LRC con distintos parámetros no resulta muy cómodo tener que editar el fichero de la función lrc.y) % Circuito LRC % LI' + RI + Q/C = E(t) % Prametros del circuito global L R C E = 0. Por ejemplo. dI = (E-Q/C-R*I)/L. Este inconveniente se puede evitar definiendo como variables globales aquellos parámetros que deseamos modificar. Dependiendo del valor de la resistencia. previamente hay que declarar globales dichas variables.5 -1 10 0 5 10 15 20 25 30 18. Ejemplo 6 En un circuito eléctrico real. La sintaxis del fichero del sistema de ecuaciones diferenciales quedaría como sigue. En ambos casos. la intensidad y la carga en el circuito se anulan con el tiempo. % Ecuación dQ = I.dI].Sistemas de ecuaciones diferenciales 1 0. hasta que se anula la corriente. [1. es que en estos últimos.C=1. Heun. Euler.01:10.5 0 -0. La diferencia fundamental entre los métodos elementales que hemos programado.5 0 -0. [t.11 Método de Runge-Kutta tomando R = 0. con R = 2. en función del comportamiento de la ecuación . Runge-Kutta y los de MATLAB. se producen oscilaciones de amplitud decreciente (subamortiguadas).y) grid 1 0.5. plot(t. el paso de integración se determina dinámicamente. Consultando la ayuda de cualquiera de ellas.y] = rungekut('lrcg'. global L R C L=1.03:30.tspan.5 0 1 2 3 4 5 6 7 8 9 10 18. Los métodos elementales corresponden a las funciones ODE23 y ODE45.y] = rungekut('lrcg'.2.0]). aplicando en cada caso métodos apropiados.y) grid 1 0. tspan = 0:0.5 -1 0 5 10 15 20 25 30 En cambio. [t. Uso de las funciones de MATLAB para sistemas diferenciales MATLAB dispone de diversas funciones para resolver ecuaciones diferenciales. tspan = 0:0.tspan. el circuito está sobreamortiguado y no se producen oscilaciones en el tránsito a la estabilidad.0]). R=2.[1.2.R=0. se obtiene además la lista de métodos disponibles. plot(t. Sistemas de ecuaciones diferenciales 12 y con el objetivo de que el error estimado esté dentro de cierta tolerancia.5 0 -0. x ' = 3 x + 2 y − ( 2t 2 + 1) e 2t x ( 0 ) = 1 t ∈ [ 0. Como ya hemos indicado. 1 0. Compara. el resultado obtenido en cada caso con la solución exacta. 2] z ( 0) = 1 y ' = − x − 2et +1 y ( 0 ) = 0 e 5 t 2e − t y (t ) = + + t 2e2t 3 3 .[0.6.5 0 1 2 3 4 5 6 7 8 9 10 Como se aprecia en la figura.0]).10].[1. Si queremos forzar que la solución se evalúe en puntos determinados. todos los nodos.. En la ayuda se describen numerosas variantes y opciones de estos comandos.6. 18. la llamada básica a las funciones de MATLAB es del tipo [t. numérica y gráficamente. Por ejemplo. mientras que en los métodos que hemos programado nosotros.Emplea el método de Runge-Kutta aplicado a sistemas para aproximar las soluciones a los siguientes problemas de valor inicial. o bien.y] = ode23(odefun. el paso es fijo. como antes. tal como la hacemos con nuestros algoritmos. se obtiene la gráfica de la solución. sólo los extremos del intervalo.1] a) y ' = 4 x + y + ( t 2 + 2t − 4 ) e2t y ( 0 ) = 1 e5t e − t − + e2t Solución exacta: x ( t ) = 3 3 b) x' = y z ' = − x − et +1 x ( 0 ) = 1 t ∈ [ 0. hemos de introducirlos en tspan. ode23('lrcg'.tspan.y0) donde tspan puede contener. omitiendo los argumentos de salida.1. Problemas 18. los nodos no están equiespaciados. Enunciados 1. .Un péndulo de Foucault proporciona la demostración empírica de la rotación terrestre: el plano de oscilación del péndulo gira con el tiempo de manera que tras un cierto periodo que depende de la latitud del observador. Las ecuaciones de movimiento son: x′′ − 2ω sen (ϕ ) y '+ k 2 x = 0 y′′ + 2ω sen (ϕ ) x '+ k 2 y = 0 donde ω = 7.. y = 0 y se deja en movimiento libre.Estudia el circuito R=10 Ohm L=8 H C=10-3 F I2 I1 E(t)=sin(100t) Comprueba numéricamente que el método de Runge-Kutta es de orden 4 comparando los resultados en un punto con diferentes pasos. Calcula la posición del péndulo en el instante t = 3600 con un paso temporal de 0. Estudia su comportamiento para distintos valores iniciales de la velocidad. vuelve a su posición original. Denotamos por y la desviación en radianes del péndulo respecto a la vertical y suponemos que la resistencia del aire es proporcional a la velocidad del péndulo. Para iniciar el movimiento se sitúa el péndulo en la posición x = −6. c) Considera ahora que el péndulo que recibe un impulso exterior h(t)=cos(t). con una latitud de 40º? ¿Cuánto tiempo tarda el plano de oscilación en girar 360º en el polo norte? ¿Y en el ecuador? . sometido a la acción de la gravedad y a la resistencia del aire. ϕ es la latitud g del observador y la constante k 2 = depende de la aceleración de la gravedad g y la l longitud del péndulo l. ¿Cuánto tiempo es necesario para que un péndulo de 10 m de longitud gire su plano de oscilación 45º en Valencia. 3. La ecuación que rige su movimiento será y '' = − g k − seny (t ) − y ' l m a) Resuelve el movimiento del péndulo no amortiguado (k=0) con distintos métodos y diferente número de puntos..13 Solución exacta: x ( t ) = cos t + sen t − et +1 y ( t ) = − sen t + cos t − et Problema z ( t ) = − sen t + cos t 2. b) Estudia el comportamiento del péndulo amortiguado para distintos valores de k.5 segundos. 4.Una masa m suspendida de un alambre inextensible de longitud l y masa despreciable oscila en un plano vertical.29 ⋅ 10−5 s −1 es la velocidad angular de la rotación terrestre. 6. situada en el origen de coordenadas y µ = G ⋅ ( M T + mS ) ≅ 398598.Utiliza el algoritmo de Runge-Kutta para aproximar la solución del problema de valor inicial: y′′′ = −6 y 4 y (1) = −1 t ∈ [1.309 km3 s −2 es el llamado parámetro gravitacional.911 km y ( 0 ) = 0 km x ' ( 0 ) = −1. en el que se considera nula la masa de satélite respecto a la de la Tierra. Soluciones 2.9] y ' (1) = −1 y′′ (1) = −2 Emplea el paso h = 0. .07168 km s -1 y ' ( 0 ) = 2. solución exacta y ( t ) = t−2 18. con la 1 . numérica y gráficamente. a) Convierte el sistema de orden 2 en uno de primer orden. r  x '(0) = vx 0    y '(0) = v y 0    donde r = x 2 + y 2 es la distancia a la Tierra. Representa dicha trayectoria situando en el origen de coordenadas una esfera de radio RT = 6378. r3 y y " = − µ 3 .Sistemas de ecuaciones diferenciales 14 -Las ecuaciones del movimiento de un satélite puesto en órbita desde la Estación Espacial Internacional son x " = −µ x .81. Consideramos que la estación espacial está situada en el punto x0 del eje de abscisas y vx0. vy0 son las componentes de la velocidad inicial. encontrando la posición del satélite respecto a la Tierra transcurridas 24 horas desde su lanzamiento.2.a) Primero definimos la función function dy=pendulo(t.1 km.1. m=1.y) k=0. b) Considerando las condiciones iniciales: x ( 0 ) = 42167. y (0) = 0. podemos considerar la trayectoria del satélite en el espacio situada en un plano que contiene al ecuador terrestre. x(0) = x0 .8827 km s -1 Resuelve el problema de valor inicial empleando la función de MATLAB ode23.. g=9. l=1.-g/l*sin(y(1))-k/m*y(2)].05 y compara los resultados.. c) Dado que las variables x e y dependen del tiempo. %Resistencia del medio %Masa %Aceleración de la gravedad %Longitud del péndulo dy=[y(2). 7. 201).y.1 -0.10001).0.y2]=mieuler('pendulo'.]).'-'. [t.t2.1.5 y 10.y3]=rungekut('pendulo'.t.1 0 -0.t.0]).[0.[0.]).5. t2=linspace(0.1.'--') title('Péndulo-Método de Euler') Péndulo-Método de Euler 1.y.1. k=10.0.t.y2.t2. k=0.5 -1 0 1 2 3 4 5 6 7 8 9 10 Como pasaba con el circuito eléctrico.t.t.'--'.10] con el método de Euler con dos pasos diferentes: t=linspace(0.0.t.[0.y2.401). Si utilizamos el método de Runge Kutta dividiendo el intervalo en 200 subintervalos se obtiene t=linspace(0.y]=rungekut('pendulo'.10.[0.5 0 -0.1. plot(t.0]).0]).y2]=rungekut('pendulo'.y2.201).5 1 0.y]=mieuler('pendulo'.[0.15 Problema Luego calculamos la solución en el intervalo [0.1.10.10.10.y.[0.4 0 1 2 3 4 5 6 7 8 9 10 b) Vamos a tomar por ejemplo k=0.401). Con el método de Runge-Kutta no sucede esto t=linspace(0.y]=rungekut('pendulo'.0. k=0. [t2.t2.[t. [t2.3 -0. [t.title('Péndulo amortiguado') .y3.'-'.t2. si se toman pocos puntos la energía aumenta.y2]=rungekut('pendulo'. t2=linspace(0.2 0.') .t.]).'-.[0.1.3 0.[t.'--') Péndulo-Método de Runge-Kutta 0.'-'.10. plot(t.4 0.2 -0. plot(t.0]).[t.1. se puede suponer que hay una parte transitoria que decrece exponencialmente y al final de la oscilación sigue la de cos(t). Vamos a resolver el sistema partiendo del reposo y con una velocidad inicial 2.2. c) Añadimos al fichero de la ecuación del péndulo el término del forzamiento externo. Parece que cada vez el comportamiento es menos caótico.y(:.-g/l*sin(y(1))-k/m*y(2)+cos(t)]. function dy=pendulo(t.3 0. . %Resistencia del medio %Masa %Aceleración de la gravedad %Longitud del péndulo dy=[y(2). Podemos probar con una velocidad inicial 2. por ejemplo 2.[0.3 y 2.1. m=1.5]).7]).200.1 0 -0.5.4 0. Esto podría ser debido a que se le ha dado demasiado impulso. [t.[t. t=linspace(0.3 -0. Ahora el péndulo se estabiliza antes.2 0.2 -0.t.1 -0. Por analogía con el caso del oscilador lineal.1)). Para valores grandes no se producen oscilaciones. l=10. plot(t.81..Sistemas de ecuaciones diferenciales Péndulo amortiguado 0.y) k=0.2.y]=rungekut('pendulof'.4 16 0 1 2 3 4 5 6 7 8 9 10 Para valores pequeños de k el péndulo va oscilando hasta que se detiene.hold La gráfica indica que el péndulo da unas cuantas vueltas completas antes de estabilizarse. Sin embargo el comportamiento del sistema hasta alcanzar el estado estacionario es difícil de prever.2001).y]=rungekut('pendulof'.t. Se puede probar con menos velocidad.7.[0. g=9. Se observa que es difícil hacer predicciones para un tiempo futuro. se obtiene R=10 Ohm L=8 H C=10-3 F I2 I1 E(t)=sin(100t) . La caída de potencial en la malla derecha y la ley de los nudos proporcionan Q1 + ( I1 + I 2 ) R = E (t ) C Derivando y teniendo en cuenta que Q1′ = I1 .1 -5 0 20 40 60 80 100 Tiempo 120 140 160 180 200 En el caso de 2.5 Ángulo 15 10 w0=2..1 parece que vuelva a empezar a oscilar.9 Péndulo forzado 35 30 25 20 Ángulo 15 10 5 0 -5 0 20 40 60 80 100 Tiempo 120 140 160 180 200 Ahora el comportamiento vuelve a ser bastante caótico. 3.3 hay menos oscilaciones. pero en para 2.17 Péndulo forzado 30 w0=2.Igualando la diferencia de potencial en el condensador y en la bobina obtenemos la ecuación Q1 ′ = LI 2 C donde Q1 es la carga del condensador. Podemos probar con 1.7 Problema 25 20 w0=2.3 5 0 w0=2. y) L=8.01 0. quedando un comportamiento periódico.[0.08 0. dI2=Q/L/C. % Salida dy = [dQ. dE = 100*cos(100*t).0]).R=10.03 0.04 0. I1 = y(2). % Variables Q1 = y(1).y1) grid 0.09 0.1 segundos y representamos el resultado.05 0 -0. Resolvemos el problema en un intervalo de 0.y1] = rungekut('lrc2'. plot(t1.05 0.07 0.1 0. obtenemos la solución en un punto.1 por ejemplo con pasos diferentes.1 El aparente aumento de la amplitud de las oscilaciones cesa en poco tiempo.1 0 0. cada uno la mitad del anterior. 0. dI1 = (dE-I1/C-Q1/L/C)/R. queda el sistema diferencial siguiente Q1′ = I1 I Q   I1′ =  E ′(t ) − 1 − 1  R C LC   Q ′ I2 = 1 LC Este sistema se codifica en el fichero siguiente function dy=lrc2(t. % Ecuación dQ1 = I1. .05 -0. [t1.dI1.dI2].0.06 0. Para comprobar el orden del método de Runge-Kutta.02 0.0:1e-3:1e-1. I2=y(3). I1 e I2.Sistemas de ecuaciones diferenciales I1 ′ + ( I1′ + I 2 ) R = E ′(t ) C 18 Tomando como variables Q1. Estimando el error mediante la diferencia entre la solución con paso h y la solución con paso h/2.C=1e-3. title('Representación de las curvas x(t).1:2)). Al observar en detalle la posición del péndulo el primer minuto notamos el carácter ondulatorio del movimiento.[0.1:2)).z0).:) Si representamos gráficamente el movimiento cada una de las componentes de la posición y velocidad del péndulo respecto al tiempo): plot(t. z(4) . definimos los valores de las constantes: global fi k2 om fi=40*pi/180.1252 16.vx(t)') . plot(t(1:120). -2*om*sin(fi)*z(2)-k*z(3)].z) global fi k om w=[z(2) ..:)). (y1(end. y resolvemos con el método de Runge-Kutta y las variables de entrada ya definidas: [t./(y2(end.0. sol1=y(end. para ello definimos las variables: z1 = x z2 = x ' z3 = y z4 = y ' cuyas derivadas nos permiten definir el sistema de primer orden: ′ z1 = z2 ′ z2 = 2ω sen (ϕ ) z4 − k 2 z1 ′ z3 = z4 ′ z4 = −2ω sen (ϕ ) z2 − k 2 z3 que almacenamos en la función: function w=foucault(t. title('Representación de las curvas x(t).:)-y3(end.Comenzaremos transformando el sistema de orden dos: x′′ − 2ω sen (ϕ ) y '+ k 2 x = 0 y′′ + 2ω sen (ϕ ) x '+ k 2 y = 0 en uno de primer orden.0:0.y]=rungekut('foucault'. 2*om*sin(fi)*z(4)-k*z(1) . om=7.2393 4.5:3600.t.y3] = rungekut('lrc2'.[0. [t3.0:0. k2=9. [t2.25e-3:1e-1.0.y(1:120.29e-5. donde declaramos como variables globales la latitud ϕ y las constantes w y k. Para estudiar el comportamiento del péndulo de Foucault en Valencia (latitud 40º).:)-y2(end.y(.0]).0]).1313 16.y2] = rungekut('lrc2'.5e-3:1e-1. t=0:. Definimos el vector de condiciones iniciales y el vector de nodos: z0=[-6 0 1 0].:)) ans = 16.8/10.vx(t)') observamos cómo la atracción gravitatoria hace que la amplitud de oscilación (en ambas variables) disminuya con el tiempo.19 Problema comprobamos que ésta se divide aproximadamente por 24=16 cada vez que el paso se divide por 2. Sistemas de ecuaciones diferenciales Representación de las curvas x(t),vx(t) 6 20 4 2 0 -2 -4 -6 0 500 1000 1500 2000 2500 3000 3500 4000 Representación de las curvas x(t),vx(t) 6 4 2 0 -2 -4 -6 0 10 20 30 40 50 60 plot(t,y(:,3:4)) title('Representación de las curvas y(t),vy(t)') Representación de las curvas y(t),vy(t) 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 0 10 20 30 40 50 60 Por otra parte, la representación conjunta de las variables x e y nos muestra cómo el plano de oscilación gira con el tiempo: plot(y(:,1),y(:,3)) 21 1.5 Problema 1 0.5 0 -0.5 -1 -1.5 -6 -4 -2 0 2 4 6 Para averiguar cuánto tiempo necesita el plano de oscilación del péndulo de Foucault situado en Valencia para girar 45 grados, calculamos el ángulo (en grados) girado en la primera hora de movimiento: angfi=atan2(y(end,3),y(end,1)) angin=atan2(1,-6) horang=abs(angfi-angin)*180/pi angfi = 2.8080 angin = 2.9764 horang = 9.6498 y el tiempo necesario para girar 45º es de 4 horas, 39 minutos y 47.88 segundos: t45=45/horang t45 = 4.6633 Al cambiar de situación geográfica, un aumento de latitud provoca una aceleración del giro del plano de oscilación del péndulo, mientras que el acercamiento del péndulo al ecuador hace que el plano de oscilación permanezca constante. Para observar este efecto, basta con modificar el valor de la variable latitud. En el polo norte, la latitud es de 90º; observemos el giro del plano de oscilación en el mismo intervalo de tiempo: fi=pi/2 % latitud en radianes [t,y]=rungekut('foucault',t,z0); plot(y(:,1),y(:,3)) Sistemas de ecuaciones diferenciales 1.5 22 1 0.5 0 -0.5 -1 -1.5 -6 -4 -2 0 2 4 6 A continuación calculamos el ángulo de giro por hora: angfi=atan2(y(end,3),y(end,1)) angin=atan2(1,-6) horang=abs(angfi-angin)*180/pi angfi = 2.7144 angin = 2.9764 horang = 15.0123 de lo que se deduce que, en un día, el plano de oscilación del péndulo situado en el polo norte da una vuelta completa: horang*24 ans = 360.2964 Sin embargo, en el ecuador el plano de oscilación no gira: fi=0; [t,y]=rungekut('foucault',t,z0); plot(y(:,1),y(:,3)) 23 1 0.8 Problema 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 -6 -4 -2 0 2 4 6 El problema de valor inicial x " = −µ x , x(0) = x0 , r3 y y " = − µ 3 , y (0) = 0, r  x '(0) = vx 0    y '(0) = v y 0    puede reescribirse como un sistema de cuatro ecuaciones diferenciales de primer orden, introduciendo las nuevas variables: z1 = x cuyas derivadas definen el sistema: ′ z1 = z2 ′ z2 = − nu ⋅ ′ z3 = z4 ′ z4 = − nu ⋅ z1 z2 = x ' z3 = y z4 = y ' (z (z 2 1 2 + z3 ) 3 2 2 1 2 + z3 ) z3 3 2 Almacenamos este sistema en la función satelite.m: function w=satelite(t,z) nu=398598.309; den=(z(1)^2+z(3)^2)^(3/2); w=[z(2); -nu*z(1)/den; z(4); -nu*z(3)/den]; Para aproximar la trayectoria del satélite en torno a la Tierra, definimos en primer lugar el vector de condiciones iniciales: z0=[39511.0557, -1.07168, 14693.8542, 2.8827]; Sistemas de ecuaciones diferenciales El vector de nodos que emplearemos en la resolución del problema es t=0:60:24*3600; 24 y la posición y velocidad del satélite en ese instante: [t,y]=ode23('satelite',t,z0);y(end,:) ans = 1.0e+004 * 4.48250114876932 0.00002440421634 1.95975100215809 0.00026074263059 - Se comprueba fácilmente que un intervalo de tiempo menor no permite al satélite completar la órbita en torno a la Tierra. Concluimos, por tanto, que el periodo orbital es de un día. [t,y]=ode23('satelite',0:60:22*3600,z0);plot(y(:,1),y(:,3)) 5 4 x 10 4 3 2 1 0 -1 -2 -3 -4 -5 -5 -4 -3 -2 -1 0 1 2 3 4 x 10 5 4 Para representar una esfera centrada en el origen con radio RT, y la trayectoria del satélite en torno a ella: [t,y]=ode23('satelite',t,z0); plot3(y(:,1),y(:,3),zeros(size(y(:,1)))), hold on [X,Y,Z]=sphere(50); X=6378.1*X; Y=6378.1*Y; Z=6378.1*Z; plot3(X,Y,Z), axis equal 25 Problema 5000 0 -5000 4 3 2 x 10 4 4 1 0 -1 -2 -3 -4 -4 -3 -1 -2 0 1 x 10 4 3 2 file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labor...%20(EDO)-%2018%20(Sistemas)%20-%2019%20(Cualitativa)/practica18.txt Zorros contra Conejos -------------------->> tspan = 0:0.03:30; >> [t,y] = mieuler('presarapaz',tspan,[10,10]); ----------------------Grafico vs tiempo >> plot(t,y(:,1),'g'); >> hold on >> plot(t,y(:,2),'r'); ----------------------Conejos vs Zorros >> plot(y(:,1),y(:,2)) Circuito LRC (sin R) ----------->> [t,y] = mieuler('lrc',tspan,[10,10]); >> plot(t,y(:,1),'g'); hold on plot(t,y(:,2),'r'); Sale que va creciendo sin haber fem! Imposible Se debe a fallos en Euler. Como es lineal requiere muchos calculos -> errores redondeo habria que aumentar la 'resolucion' [t,y] = mieuler('lrc',0:0.003:30,[10,10]); Aun asi sigue aumentando bastante... Solucion: Runge-Kutta (adaptada a vectores) --------------------[t,y] = rungekut('lrc',0:0.03:30,[1,0]); plot(t,y(:,1),'g'); hold on plot(t,y(:,2),'r'); file:///E|/Documentos/Estudios/Documentacion%20Asignatu...18%20(Sistemas)%20-%2019%20(Cualitativa)/practica18.txt (1 of 3) [09/03/2008 13:49:48] file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labor...%20(EDO)-%2018%20(Sistemas)%20-%2019%20(Cualitativa)/practica18.txt Circuito LRC (con R) (fichero lrcg con variables globales) --------------------------------------------------------->> global L R C >> L = 2; R=0.3; C=1; >> [t,y] = rungekut('lrcg',0:0.03:30,[1,0]); plot(t,y(:,1),'g'); hold on plot(t,y(:,2),'r'); se puede ir probando >> R = 3 >> close; [t,y] = rungekut('lrcg',0:0.03:30,[1,0]); plot(t,y(:,1),'g'); hold on; plot(t,y(:,2),'r'); grid >> C = 3 >> close; [t,y] = rungekut('lrcg',0:0.03:30,[1,0]); plot(t,y(:,1),'g'); hold on; plot(t,y(:,2),'r'); grid >> R =0.3 >> close; [t,y] = rungekut('lrcg',0:0.03:30,[1,0]); plot(t,y(:,1),'g'); hold on; plot(t,y(:,2),'r'); grid Funcion de Matlab ----------------(ODE45) >> close; [t,y] = ode45('lrcg',0:0.03:30,[1,0]); plot(t,y(:,1),'g'); hold on; plot(t,y(:,2),'r'); grid Si no le damos salido lo dibuja el solito. Ademas le podemos dar el intervalo y pone los puntos segun convenga >> C = 0.3; R = 2 >> ode45('lrcg',[0,30],[1,0]); Comprobacion de que el error Runge-Kutte es orden 4. -------------------------------------------------------------------------------------------------------El doble de puntos hace un error 2^4 = 16 veces menor ---------------------------------------------------->> h=0.05; [t,y1] = rungekut('lrcg',0:h:2,[1,0]); [t,y2] = rungekut('lrcg',0:h/2:2,[1,0]); [t,y3] = rungekut('lrcg',0:h/4:2,[1,0]); file:///E|/Documentos/Estudios/Documentacion%20Asignatu...18%20(Sistemas)%20-%2019%20(Cualitativa)/practica18.txt (2 of 3) [09/03/2008 13:49:48] 2394 >> (y2(end.:)-y1(end.2394 file:///E|/Documentos/Estudios/Documentacion%20Asignatu.:)) ans = 15.txt (3 of 3) [09/03/2008 13:49:48] .:))..txt (y2(end)-y1(end))/(y3(end)-y2(end)) ans = 17.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Labor./(y3(end.:)-y2(end.%20(EDO)-%2018%20(Sistemas)%20-%2019%20(Cualitativa)/practica18.7684 17.18%20(Sistemas)%20-%2019%20(Cualitativa)/practica18.... .... las soluciones del sistema serán elipses en torno al punto crítico.. Órbitas periódicas: trayectorias cerradas en las que.. estudiaremos los sistemas lineales con coeficientes constantes. mientras que si son imaginarios puros... xn ) es decir. sistemas de ecuaciones diferenciales en los que no aparece de forma explícita la variable independiente t. el origen es un punto de equilibrio. Dado que los métodos analíticos sólo nos permiten resolver algunos casos particulares. el análisis de los sistemas no lineales se centra. ¿permanecerán próximas en el futuro? ¿Se acercarán a una solución del sistema. Empleando notación vectorial.. los valores propios múltiples provocan comportamientos degenerados.. x2 .. puntos a los que tienden las trayectorias o de los que se alejan. cuyo comportamiento en el entorno del punto 1 . el análisis cualitativo de dichas soluciones (si hay comportamientos periódicos. x2 . se alejarán de ella o quizá seguirán caminos distintos?. xn ) y f : n → n . como los lineales con coeficientes constantes. Teoría cualitativa La teoría cualitativa analiza el comportamiento de las soluciones de un sistema de ecuaciones diferenciales sin necesidad de obtenerlas de forma explícita.. x2 . xn ) ′ x2 = f 2 ( x1 ..... por una parte. dichas elipses degeneran en espirales cuando dichos valores propios tienen parte real no nula.…) resulta de gran interés. En este capítulo analizaremos las propiedades cualitativas de las soluciones de sistemas de ecuaciones diferenciales autónomos: ′ x1 = f1 ( x1 . las trayectorias tienden o se alejan de los puntos de equilibrio. x = ( x1 . podemos reescribir el sistema anterior del siguiente modo: x′ = f ( x ) donde x ∈ n M . Las herramientas que nos permitirán describir este tipo de comportamiento serán los valores propios de la matriz de coeficientes del sistema: si los valores propios son simples. siendo solución del sistema. Estabilidad: dadas dos soluciones muy próximas en un instante concreto. En la segunda sección....... xn ) ′ xn = f n ( x1 . en encontrar un sistema lineal próximo. xn ) ) .... xn ) .______________________________________________________________________ 19. en el caso de sistemas lineales. introduciendo ideas que se concretarán más adelante para sistemas no lineales: Soluciones de equilibrio:valores en los que el sistema puede permanecer indefinidamente... En primer lugar. f n ( x1 . f ( x ) = ( f1 ( x1 . el comportamiento se repite tras un cierto tiempo.. 19. con coeficientes constantes: ′ x1 = a11 x1 + a12 x2 + L + a1n xn ′ x2 = a21 x1 + a22 x2 + L + a2 n xn M ′ xn = an1 x1 + an 2 x2 + L + ann xn donde aij. los sistemas no lineales admiten la existencia de soluciones periódicas a las que tienden (o de las que parten) las trayectorias de su entorno. cuando la matriz A es no singular puede concluirse que xe = 0 es el único punto crítico del sistema.…. i = 1.n.n son n2 constantes reales. a. Ejemplo 1 En el modelo de población de Malthus y Verhulst.1. una solución de este sistema es una curva x : → en un cierto instante t es A ⋅ x ( t ) . se verifica: ′ xe = f ( xe ) = 0 Así. las soluciones de equilibrio pe de la ecuación diferencial autónoma de primer orden: p′ = p ( a − b ⋅ p ) . x '(t ) = A ⋅ x de tal modo que la matriz A es denotada por  a11 a12 L a1n  a a22 L a2 n   A =  21  M M O M     an1 an 2 L ann  y puede interpretarse como un campo vectorial sobre n .…. al no depender del tiempo.1. Así. En esta sección de proporcionan algunos resultados teóricos que permiten deducir o descartar la existencia de trayectorias cerradas. x ' ( t ) = A ⋅ x . Es posible reescribir este sistema. x ( t ) = xe constante . j = 1. Para que xe sea solución de equilibrio debe verificar la ecuación diferencial y. 19. empleando notación matricial. Puntos críticos y soluciones periódicas Una solución específica de la ecuación diferencial autónoma x ' = f ( x) se llama solución de equilibrio (o punto crítico) si es constante en el tiempo. A : x ∈ n .1. b > 0 n → n que actúa sobre n cuyo vector tangente . todos los ceros de la función f(x) son soluciones de equilibrio.Teoría cualitativa 2 de equilibrio pueda extrapolarse al sistema no lineal. por otra parte. es decir. Sistemas lineales Consideraremos en esta sección sistemas de n ecuaciones diferenciales de primer orden lineales. En el caso particular de los sistemas lineales. son los llamados cilcos límite. para aplicar sobre cada uno de ellos las técnicas que describiremos a continuación. dejando para la sección siguiente la respuesta correspondiente al caso no lineal. Análisis de estabilidad Consideremos un punto crítico xe de un sistema autónomo lineal x ' ( t ) = f ( x ) y una solución x = x ( t ) de dicho sistema que verifica la condición inicial x ( 0 ) = x0 . la solución es una trayectoria cerrada que puede recorrerse en p unidades de tiempo.3. Si existe p ∈ tal que x ( t + p ) = x ( t ) . recordemos que una solución del sistema x ' = f1 ( x. y ) = ϕ ( t ) que satisface las ecuaciones diferenciales del sistema. es decir. se llama retrato fase del sistema. sometida a las condiciones descritas por el sistema de ecuaciones diferenciales. por lo que pe = 0 y pe = puntos críticos de la ecuación diferencial. y ) y ' = f 2 ( x. Trabajaremos en lo sucesivo con dimensión 2. ¿tenderá dicha trayectoria al valor de equilibrio?. Si interpretamos la solución como la trayectoria de una partícula en movimiento. ¿se mantendrá la trayectoria en las proximidades del punto de equilibrio o se alejará definitivamente de él?. consideremos una solución x = x ( t ) del problema x′ = f ( x ) . T 19.1. En casos de dimensión superior. y en el primer caso. y ) es una función vectorial ( x. cuando x0 es próximo a xe . Responderemos a continuación a estas preguntas para el caso particular de sistemas lineales. diremos que un conjunto de trayectorias en el plano xy.2.1. Para analizar la estabilidad del sistema. interpretaremos las soluciones de x' = a⋅ x + b⋅ y y' = c⋅x + d ⋅ y en términos de los valores y vectores propios de la matriz de coeficientes: . Así. se trata de reducir el problema a varios problemas bidimensionales. que precisa de otro tipo de herramientas. Resulta útil con frecuencia imaginarse la curva solución del sistema como la trayectoria recorrida por una partícula en movimiento cuya velocidad (respecto a cada una de sus componentes) queda especificada en el sistema de ecuaciones diferenciales. o plano fase o plano de fases. 19. dicha solución recibe el nombre de órbita o solución periódica de la ecuación diferencial o sistema. De este modo.3 Sistemas lineales a serán los b son los ceros de la función f ( p ) = p ( a − b ⋅ p ) . Es decir. Por otra parte. nos ceñiremos al caso de un sistema autónomo lineal formado por dos ecuaciones diferenciales. Plano de fase En dimensión dos. Podemos pensar en dicha solución como la representación paramétrica de una curva en el plano xy . podemos preguntarnos cuál será el comportamiento de dicha partícula en las proximidades del punto crítico. .0). mediante un ejemplo. 4 2 2 Aplicando el método de Runge-Kutta al sistema con este valor del parámetro con distintas condiciones iniciales ( [ ±0. 4 La traza de la matriz de coeficientes es τ = −2 y el determinante δ = 1 − c (notemos que en nuestro caso c ≠ 1 . entonces la ecuación característica det ( A − λ I ) = 0 se puede reescribir como λ 2 − τλ + δ = 0 . y por tanto podemos afirmar que los 2 valores propios de A serán reales y distintos cuando τ 2 − 4δ > 0 . −9 . 0.2] ).Teoría cualitativa 4 a b  A=  c d  Para asegurar la unicidad del punto crítico (0. ±1] y [ ±1. todas las trayectorias parecen tender al origen desde cualquier dirección. para este valor del parámetro c. el comportamiento de las trayectorias solución del sistema en las proximidades del origen en cada una de estas circunstancias.0) es un punto de equilibrio del sistema. reales e iguales cuando τ 2 − 4δ = 0 y complejos si τ 2 − 4δ < 0 . supondremos que el determinante δ = a ⋅ d − c ⋅ b ≠ 0 . Así. τ ± τ 2 − 4δ . luego el determinante no se anula y está asegurada la unicidad del punto crítico). para c = τ ± τ 2 − 4δ = −1 ± c 2 1 1 3 . los valores propios de A son λ = Ejemplo 2 Consideraremos el sistema lineal en términos de un parámetro c: x ' = −x + y y' = c⋅x − y Obviamente el origen de coordenadas (0. los valores propios son negativos y distintos. 4. λ = − y λ = − . por lo que los valores propios asociados a la matriz son λ= Así. obtenemos el siguiente retrato de fase: Notemos que. Emplearemos el algoritmo de Runge-Kutta implementado en la práctica anterior para 1 representar los espacios de fase de dicho sistema en los casos c = . Si denotamos la traza de la matriz por τ = a + d . ±0. A continuación analizaremos.5. λ = 1 y λ = −3 . pero siguiendo una dirección concreta. los valores propios son complejos conjugados. En este caso. La trayectoria de las soluciones es una espiral hacia el origen cuando aumenta la variable independiente t. Si el parámetro c toma valor nulo. . a excepción de las soluciones que comienzan sobre una determinada recta. se llega a un único valor propio real. para c = -9. Observamos en el retrato de fase que todas las trayectorias se alejan del origen.5 Sistemas lineales Cuando c = 4. al dibujar el retrato de fase observamos que todas las trayectorias se acercan al punto crítico. Por último. los valores propios tienen signos contrarios. con parte real negativa: λ = −1 ± 3i . que se acercan al punto crítico. aparentemente en una dirección concreta. En este caso.Teoría cualitativa 6 En general. λ2 < λ1 < 0 . Los valores propios tienen signos opuestos (τ 2 − 4δ > 0 y δ < 0 ). el análisis de las soluciones es similar al caso anterior. Sin embargo. c. la solución tiende a cero siguiendo la recta determinada por v2. Ambos valores propios son negativos ( τ 2 − 4δ > 0 . si c1 = 0 . τ < 0 y δ > 0 ): las trayectorias solución tienden al origen desde cualquier valor inicial del plano de fase a lo largo de la recta determinada por el vector propio v1 (si c1 ≠ 0 ) o por el vector propio v2. Ambos valores propios son positivos ( τ 2 − 4δ > 0 . 1. τ > 0 y δ > 0 ): las soluciones se alejan del origen desde cualquier valor inicial en una de las direcciones determinadas por el vector propio v1 (si c1 ≠ 0 ) o por el vector propio v2. En este caso. Este punto crítico recibe el nombre de punto silla. Valores propios distintos (τ 2 − 4δ > 0 ) a. el punto de equilibrio recibe el nombre de nodo estable. si c1 = 0 . especificando en cada uno de ellos el signo del determinante y traza de la matriz de coeficientes. Este tipo de punto de equilibrio recibe el nombre de nodo inestable. . la recta determinada por v1 es una asíntota para las trayectorias que se alejan del origen. para analizar en detalle el comportamiento de las trayectorias estudiaremos los valores y vectores propios asociados a la matriz de coeficientes del sistema. b. 0 < λ2 < λ1 . Teniendo en cuenta que la solución general del sistema es: x ( t ) = c1v1eλ1t + c2 v2 eλ2t distinguiremos los siguientes casos. así como la estabilidad del punto de equilibrio. para c1 ≠ 0 . salvo por una circunstancia: cuando c1 = 0 . τ = 0 ): En este caso las soluciones del sistema son periódicas y describen elipses con el mismo sentido en torno al punto crítico.7 Sistemas lineales 2. τ ≠ 0 ): las trayectorias describen espirales en torno al punto crítico. a. Un valor propio real de multiplicidad dos (τ 2 − 4δ = 0 ): en este caso el punto crítico recibe el nombre de nodo estable (inestable) degenerado si las trayectorias solución tienden (se alejan) al origen. Valores propios complejos (τ 2 − 4δ < 0 ): distinguiremos dos casos según si los valores propios son. b. Dichas espirales se acercan cada vez más al origen cuando la parte real de los valores propios sea negativa (en cuyo caso hablaremos del origen como punto espiral estable o foco estable) y se alejarán del punto crítico (espiral/foco inestable) cuando dicha parte real sea positiva. Valores propios imaginarios puros (τ 2 − 4δ < 0 . la solución general tiene comportamientos distintos según si se pueden determinar uno o dos valores propios linealmente independientes: en el primer caso. o no. 3. que recibe el nombre de centro. imaginarios puros. mientras que en el segundo caso la distribución de las trayectorias solución respecto al punto crítico es radial. . la recta determinada por el vector propio es una asíntota para todas las soluciones. Además. Valor propio imaginario no puro ( τ 2 − 4δ < 0 . podemos concluir que el origen es.5000 A la vista de los resultados obtenidos. 19.2. 4 x ' = −x + y y' = c⋅x − y Sabemos que los valores de la traza y el determinante son. 0. y dado que se trata de dos valores propios reales y distintos. A=[-1. eig(A) ans = -0. Sistemas no lineales En la presente sección consideraremos un sistema autónomo no lineal bidimensional x ' = f ( x ) y examinaremos el comportamiento de las trayectorias del sistema en el . 4.Teoría cualitativa 8 Retomemos a continuación el ejemplo anterior para analizar la estabilidad del origen para cada uno de los valores del parámetro c: Ejemplo 3 1 Consideremos de nuevo el sistema lineal para c = .1. −9 . es fácil construir la siguiente tabla para clasificar en cada caso el punto crítico: τ δ Punto crítico c τ 2 − 4δ 0.-1]. los valores propios asociados a la matriz son λ = c=1/4.25 -2 0. Así. para este valor del parámetro c. Repitiendo los cálculos para el resto de los valores posibles del parámetro. Empleando el comando eig de MATLAB. también es posible dicha clasificación atendiendo únicamente a los valores propios de la matriz de coeficientes del sistema.c.75 1>0 Nodo estable 4 -2 -3 16>0 Punto de silla 0 -2 1 0 Nodo estable degenerado -9 -2 10 -36<0 Espiral/foco estable Por otra parte.5000 -1. obtenemos idénticas conclusiones a las mostradas en la tabla anterior. un nodo estable. respectivamente τ = −2 y τ ± τ 2 − 4δ = −1 ± c 2 Por tanto. obtenemos la información necesaria: δ = 1 − c . del mismo signo. y ) ∂x ∂y los términos del errorηi ( x. y ) tal que fi ∈ C 2 ( D). 2 verifican la condición ( x − xe . y ) → 0 cuando ( x. aunque en algunos. Esto es cierto en la mayoría de los casos. y ) . Es conveniente que dicho punto crítico esté en el origen. cuando estamos en las proximidades del punto crítico). 2 siendo D ⊆ 2 un entorno del punto crítico. y )    + ∂f 2   y − ye  η2 ( x. un pequeño cambio de variable ( u = x − xe ) nos proporcionará un sistema equivalente al inicial cuyo punto de equilibrio estará en el origen del plano de fases. y ) ∂x ∂y ∂f ∂f f 2 ( x. Dado que el término pequeño en comparación con el lineal J f ( xe ) ⋅ u . Además. cuando u es  ∂f1 ′  ∂x  x − xe     =  y − ye   ∂f 2  ∂x  y en notación vectorial: u′ = J f ∂f1  ∂y   x − xe   η1 ( x. y ) = f1 ( xe . ya que aplicando el desarrollo de Taylor a ambas funciones: ∂f ∂f f1 ( x. y ) → ( xe . y − ye ) Así. ye )( y − ye ) + η1 ( x. ye )( x − xe ) + 2 ( xe . si no es así. es razonable esperar que las trayectorias solución del sistema lineal sean buenas aproximaciones a las del sistema no lineal.η2 ) . A continuación describiremos un método general para encontrar el sistema lineal x ' = A ⋅ x correspondiente a un sistema casi lineal x ' = f ( x ) cerca de un punto crítico dado xe. ye )( x − xe ) + 1 ( xe . por lo que el origen también será un punto crítico del sistema lineal asociado. dicho sistema es casi lineal en el entorno del punto de equilibrio. trataremos de encontrar un sistema lineal próximo a nuestro sistema no lineal: x ' = A⋅ x + g ( x) de manera que xe = 0 sea un punto crítico aislado del sistema. que cerca del origen el comportamiento del sistema original es casi lineal. ye ) + 1 ( xe .9 Sistemas no lineales entorno de un punto crítico xe. Consideremos el sistema no lineal bidimensional: x ' = f1 ( x. Por último. y )  ∂y   no lineal η ( x ) es pequeño (es decir. supondremos que det A ≠ 0 . como los de tipo . supondremos que las componentes de g tienen primeras derivadas parciales continuas y satisfacen la condición: g ( x) → 0 cuando x → 0 x es decir. ye )( y − ye ) + η2 ( x. existe un entorno del origen en el cual no hay otros puntos críticos. i = 1. y ) = f 2 ( xe . ye ) + 2 ( xe . i = 1. es decir. y ) y ' = f 2 ( x. ye ) ( xe ) ⋅ u + η ( x ) donde uT = ( x − xe . y − ye ) y η = (η1 . Para estudiar la estabilidad del sistema en el entorno de un punto crítico. el sistema se puede expresar ηi ( x. se deduce que el punto crítico (π .y]=rk4('pendulo'. ye ) = ( 0. -9. 0 ) son puntos de equilibrio.8/1 0]. Deduciremos la estabilidad de sendos puntos crítico empleando los valores propios de la matriz jacobiana en cada caso: A=[0 1. Podemos representar estas curvas junto con las correspondientes a un entorno del otro punto crítico.1).500).y(:.[0.1305 -3. eig(A) ans = 0 + 3. 9. Sabemos que ( 0. 0 ) . 0 ) es un punto silla. eig(A) ans = 3.1305 al tener dos valores propios reales y de distinto signo. Podemos confirmar dichas conclusiones representando el espacio de fase del problema del péndulo con valores iniciales en el entorno de sendos puntos críticos: mediante las instrucciones [t.Teoría cualitativa 10 centro (los más susceptibles a pequeñas perturbaciones del sistema). ye ) = (π . A=[0 1. Ejemplo 4 El movimiento no amortiguado de un péndulo de longitud l = 1 se describe por el sistema: x′ = y g y′ = − sin x l donde g es la aceleración de la gravedad. .0. El sistema lineal asociado al problema del péndulo. cuya matriz de coeficientes es la matriz jacobiana del sistema. v = y .1305i 0 .1. puede haber problemas para determinar la estabilidad.5. y  0 1  u′   u  v′  =  g   0 v      l  en el caso ( xe . 0 ) y (π . Respecto al segundo punto crítico. 0 ) . en las que se confirman las conclusiones a las que habíamos llegado mediante el estudio de la estabilidad.2)) representamos una elipse en torno al punto crítico del origen.8/1 0].3.1]. plot(y(:. vamos a continuación a estudiar su estabilidad.0.1305i de donde se deduce que el origen es un punto crítico de tipo centro. donde u = x − π . es:  0 1  x′    x   ′ =  g   0 y    y  −  l  en el caso de ( xe . 1. i = 1.2. para un sistema lineal se puede concluir que todas las trayectorias son cerradas y. 19. dado un sistema no lineal de n ecuaciones de primer orden x ' = f ( x ) . o ninguna lo es. Soluciones periódicas y ciclos límite Consideremos de nuevo el sistema no lineal bidimensional: x ' = f1 ( x. diremos que un punto de equilibrio xe es hiperbólico si ningún valor propio de la matriz jacobiana J f ( xe ) tiene parte real nula. Por otra parte. como se muestra en el siguiente ejemplo. Al contrario. soluciones periódicas. Empleando las técnicas descritas hasta el momento somos capaces de obtener información sobre las trayectorias solución del sistema únicamente en los entornos de sus puntos críticos. por tanto periódicas. Para obtener las propiedades globales de las trayectorias en regiones amplias del plano de fases es útil saber si existen o no trayectorias cerradas. Así. en cuyo caso toda trayectoria es cerrada. Ejemplo 5 Sea el sistema: x ' = − y + x (1 − x 2 − y 2 ) y ' = x + y (1 − x 2 − y 2 ) . o lo que es equivalente. un punto crítico hiperbólico xe se llama sumidero (o punto crítico negativa. y ) asintóticamente estable) si todos los valores propios de J f ( xe ) tienen parte real tal que las funciones fi . y ) y ' = f 2 ( x. 2 y sus primeras derivadas parciales son continuas en el espacio de fases.11 Sistemas no lineales En general. Sabemos por la sección anterior que un sistema lineal tiene trayectorias cerradas si y sólo si los valores propios asociados a la matriz de coeficientes del sistema son imaginarios puros. en otro caso se dice que el punto crítico es elíptico. diremos que dicho punto es una fuente (o punto crítico inestable) si todos tienen parte real positiva y punto de silla si tiene al menos un valor propio con parte real positiva y otro con parte real negativa. un sistema no lineal puede tener una trayectoria cerrada de tal manera que no haya ninguna otra próxima a ella. Si las trayectorias en uno de sus lados se aproximan en espiral a la trayectoria cerrada y por el otro lado se alejan en espiral de ésta. se aproximan a la circunferencia unidad. Esto confirma que el origen sea un foco inestable y que las trayectorias solución tiendan a la órbita periódica pero. ¿qué ocurre más allá de dicha órbita? Siguiendo el mismo razonamiento. Esta es una solución periódica del sistema y además sabemos que las trayectorias solución en un entorno del origen se alejan en espiral de éste y. En general. no es descabellado atribuir a la órbita periódica un carácter atractor. en el ejemplo anterior la curva r = 1 es un ciclo límite del sistema. Sin embargo. r = 1. desde el interior o desde el exterior. Concretamente. 1 ± i ). para 0 < r < 1 se verifica que r ' > 0 y por tanto la variación de la distancia al origen es positiva y cada vez mayor hasta que para r = 1 se anula dicha variación. esto no siempre es posible. Para estudiar la estabilidad del origen utilizaremos la linealización del sistema en coordenadas cartesianas:  x′   1 1  x   ′ =     y   −1 1  y  que es no singular.Teoría cualitativa en el que resulta más fácil emplear coordenadas polares: r 2 = x 2 + y 2 y θ = arctan De este modo. Teorema (Poincaré): Una trayectoria cerrada del sistema autónomo no lineal . Dado que la traza τ = 2 > 0 y el determinante δ = 2 > 0 (o alternativamente que los valores propios son complejos. Así. Sin embargo. De hecho. por tanto. De este modo. y por tanto las trayectorias en un entorno del origen. se alejarán de éste. ya que r = 1 sólo anula una de las ecuaciones diferenciales. Por otra parte. podemos afirmar que el punto crítico es un foco o espiral inestable. El sistema linealizado en torno al origen es:  r′   1 0   r   ′ =    θ   0 0  θ  donde la matriz de coeficientes es singular. se dice que el ciclo límite es semiestable. Por tanto. una trayectoria cerrada en el plano fase tal que otras trayectorias no cerradas tienden en espiral hacia ella. si observamos la ecuación diferencial r ' = r (1 − r 2 ) . para r > 1 se verifica r ' < 0 cada vez mayor en valor absoluto. x θ ' =1 El único punto de equilibrio es el origen del plano de fase. se dice que dicha trayectoria cerrada es inestable. se conoce como ciclo límite. θ = t + t0 es solución del sistema de ecuaciones diferenciales (expresado en polares). la variación de la distancia al origen es cada vez menor hasta que para r = 1 se anula dicha variación. es un ciclo estable o atractor. las ecuaciones equivalentes en polares son: r ' = r (1 − r 2 ) 12 y . son necesarios ciertos resultados generales que nos permitan conocer la existencia o no existencia de ciclos límite en sistemas autónomos no lineales. ya que todas las trayectorias que se inician en sus proximidades tienden en espiral hacia ella. En el ejemplo anterior hemos deducido la existencia de la trayectoria periódica mediante manipulaciones de las ecuaciones diferenciales. si las trayectorias próximas al ciclo límite se alejan en espiral de éste. y ) Sistemas no lineales tal que las funciones fi . calculamos . para r > 2 ∂x ∂y el teorema porque la región en este caso no es simplemente conexa. El siguiente resultado también da un criterio negativo: Teorema (Bendixon): Consideremos el sistema autónomo no lineal x ' = f1 ( x. podemos afirmar que en este disco no hay 1 ∂f1 ∂f 2 + < 0 pero no podemos aplicar . trayectorias cerradas. i = 1. éste no puede ser un punto silla. Este resultado proporciona un criterio negativo: un sistema sin puntos críticos en una cierta región no puede tener en ella trayectorias cerradas. i = 1. si sólo encierra un punto crítico. como esta región se ∂x ∂y 2 simplemente conexa (no tiene "agujeros"). De hecho. 2 y sus primeras derivadas parciales son continuas en un ∂f ∂f dominio D simplemente conexo del espacio de fases. Sin embargo.0). Si 1 + 2 es siempre positiva o ∂x ∂y siempre negativa en una cierta región del espacio de fases. necesariamente debe encerrar un punto crítico. el sistema no tiene trayectorias cerradas en esa región. y ) y ' = f 2 ( x.13 x ' = f1 ( x. Además. y ) y ' = f 2 ( x. y ) tal que las funciones fi . hemos visto antes que sí existe dicha trayectoria periódica. Ejemplo 7 Volviendo de nuevo al sistema: x ' = − y + x (1 − x 2 − y 2 ) y ' = x + y (1 − x 2 − y 2 ) ∂f1 ∂f 2 + = 2 − 4 ( x 2 + y 2 ) = 2 (1 − 2r 2 ) ∂x ∂y ∂f ∂f 1 Es fácil probar que 1 + 2 es positiva para 0 ≤ r < . 2 y sus primeras derivadas parciales son continuas en el espacio de fases. Ejemplo 6 En el sistema: x ' = − y + x (1 − x 2 − y 2 ) y ' = x + y (1 − x 2 − y 2 ) se ha demostrado que la órbita periódica x 2 + y 2 = 1 contiene al punto crítico (0. r' > 0 luego la distancia al origen crece. para 2 > µ > 0 los valores propios son imaginarios con parte real positiva. En esta región el sistema no posee ningún punto crítico. si µ = 2 .5 ≤ r ≤ 2 . el origen es un nodo inestable degenerado. Pudiera parecer a partir del ejemplo mostrado que es fácil demostrar la existencia de ciclos límite en los sistemas no lineales. En estos casos. los valores propios son reales positivos y distintos. podemos afirmar que existe una trayectoria cerrada en R. se ha de recurrir a otras técnicas más complejas. se alejará de él. luego el origen es un nodo inestable. por tanto. mientras que para r = 2. Ejemplo 9 La ecuación de Van der Pol u′′ − µ (1 − u 2 ) u '+ u = 0 . Muchas veces los teoremas de Poincaré y de Bendixon no nos llevan a ninguna conclusión y el tercer teorema no es aplicable. por lo que el origen es un punto espiral o foco inestable. Si C es una trayectoria del sistema que está en R en cierto instante t0 y permanece en R para todo t ≥ t0 . Aplicando el teorema de Poincaré-Bendixon. describe la corriente u en un triodo oscilador. λ= . entonces C o bien es una trayectoria cerrada o tiene en espiral hacia una trayectoria cerrada. si µ > 2 . Trabajando con la ecuación en polares: r ' = r (1 − r 2 ) observamos que para r = 0. cualquier trayectoria que cruce la frontera de R permanece en su interior. donde la constante µ > 0 es positiva. por último. En todos los casos. como se muestra en el siguiente ejemplo. Introduciendo las variables x = u .Teoría cualitativa 14 En el siguiente teorema se dan las condiciones que garantizan la existencia de una trayectoria cerrada: Teorema (Poincaré-Bendixon): Sea R una región acotada del espacio de fases junto con su frontera y supongamos que R no contiene puntos de equilibrio del sistema. r' >0 por lo que r decrece. una trayectoria que se inicie cerca del origen.5. y = u ' transformamos la ecuación en el sistema: x' = y y ' = − x + µ (1 − x 2 ) y Observamos que el único punto de equilibrio del sistema es el origen y el sistema lineal asociado cerca del origen es:  x′   0 1  x   ′ =     y   −1 µ  y  Los valores propios de la matriz de coeficientes son: τ ± τ 2 − 4δ µ ± µ 2 − 4 = 2 2 y. nada de eso. Ejemplo 8 Para aplicar el teorema de Poincaré-Bendixon al sistema: x ' = − y + x (1 − x 2 − y 2 ) y ' = x + y (1 − x 2 − y 2 ) emplearemos una región R anular en torno al origen: 0. Así. 1. Al introducir un valor inicial alejado del origen.2).2)). plot(y(:. También se observa una diferencia de fase entre las dos soluciones al aproximarse al ciclo límite. ya que no podemos asegurar que las trayectorias que entren en R permanezcan en su interior. plot(t. Por otra parte. Por otra parte.0.500).0. Almacenamos el sistema correspondiente a la ecuación de Van der Pol en una función vandpol.[z(:.m con un primer valor para el parámetro: function z = vandpol(t. que la ecuación de Van der Pol admite un ciclo límite único.1). hold on [t.y(:.1).50.z]=rk4('vandpol'.1). el origen es un foco inestable ya que la trayectoria solución con estimación inicial (0. y representamos las trayectorias solución para diferentes valores iniciales: [t. z(:.15 Sistemas no lineales Con respecto a las soluciones periódicas. Esto significa que mientras x < 1 .500). deben rodear al origen.1].2.[0.1) traza una espiral en el sentido de las agujas del reloj que se aleja del origen mientras se aproxima a la solución periódica. mediante un análisis más complejo.y) nu = 0. z(:.z(:.0.0. una vez estabilizado el movimiento. que tiende a la órbita periódica. se observa que la trayectoria describe asimismo una espiral en el sentido de las agujas del reloj.y]=rk4('vandpol'.^2)*y(:.1)]) . en función del parámetro µ. emplearemos un enfoque diferente: representaremos gráficamente las trayectorias solución obtenidas numéricamente. si existen soluciones periódicas. Sin embargo.2) = -y(:.1. Es posible demostrar. del primer teorema de Poincaré se deduce que.50. al calcular ∂f1 ∂f 2 + = µ (1 − x 2 ) ∂x ∂y observamos que se produce un cambio de signo en x = 1 .[-3. no habrá ninguna trayectoria periódica.y(:.1) = y(:. Observando la gráfica se puede determinar la amplitud y el periodo de la órbita periódica. una región anular R en torno al origen no nos permite aplicar el teorema de Poincaré-Bendixon. plot(z(:. Si observamos la gráfica de u respecto de t.2]. observamos que las dos soluciones varían su amplitud inicial para tender a un movimiento periódico estable que corresponde al ciclo límite.1).1)+mu*(1-y(:.2).2)) Tal y como habíamos deducido. Las trayectorias se acercan más rápidamente al ciclo límite. se observa un comportamiento similar.1).[0. [t.2)).500).z]=rk4('vandpol'.[-3. plot(y(:.0.2)) De nuevo se observa en la variación de u respecto del tiempo una diferencia en fase: plot(t.1].50. .50.0. plot(z(:.Teoría cualitativa 16 Cuando µ = 2 . hold on [t. perdiéndose la simetría.0.1). pero el ciclo límite dista de ser una circunferencia.[z(:.y(:.1.500).y(:.y]=rk4('vandpol'.2].1)]) .1).z(:. Además.En los sistemas lineales siguientes.2)) plot(t.500).17 Sistemas no lineales Cuando tomamos µ = 4 .2]. las trayectorias exteriores retroceden y se repite en movimiento en sentido opuesto). Comprueba los resultados obtenidos representando algunas trayectorias solución en el espacio de fases partiendo de diferentes valores iniciales. hold on [t.2)). obtenemos las siguientes gráficas: [t. se observa que la gráfica de u respecto al tiempo dista ahora bastante de una sinusoidal.y(:. plot(y(:.0).500). Problemas 19. 19. . partiendo de las mismas condiciones iniciales.[z(:.3. clasifica el punto crítico (0. las trayectorias siguen tendiendo a él a mayor velocidad que en los casos anteriores (para intervalos de tiempo mayores.y]=rk4('vandpol'.[0.0.1).40.z]=rk4('vandpol'.40.0.[-3.3.1]. calculando la traza y el determinante.y(:. plot(z(:..1.1).z(:.1. Enunciados 1.0.1)]) Se observa que el ciclo límite es más alargado en la dirección y.1). empleando para ello el método de Runge-Kutta de orden 4. Determina una condición de la constante µ tal que (0..Teoría cualitativa (a) x ' = −5 x + 3 y y ' = 2x + 7 y x ' = −5 x + 3 y y ' = −2 x + 5 y (b) x ' = −5 x + 3 y y ' = 2x − 7 y x ' = −5 x + 3 y y ' = −7 x + 4 y 18 (c) (d) 2. foco estable nodo inestable. Clasifica dichos puntos críticos y comprueba numéricamente dicha clasificación representando el espacio de fases algunas trayectorias solución del sistema (obtenidas mediante el algoritmo de Runge-Kutta).. foco inestable o punto silla.Determina las condiciones bajo las cuales el origen es un centro del sistema lineal: x ' = −µ x + y y ' = −x + µ y 3. cada punto crítico como nodo estable. si es posible. ¿Bajo qué condiciones será el origen un punto silla? ¿Y un punto espiral inestable? 5.0) sea un punto espiral (foco) estable del sistema lineal: x' = y y ' = −x + µ y 4. con distintas condiciones iniciales...Demuestra que el origen es un punto crítico inestable del sistema lineal: x' = µx + y y ' = −x + y donde µ es una constante real tal que µ ≠ 1 .Demuestra gráficamente que el sistema autónomo plano x ' = − x + y − x3 y ' = −x − y + y2 tiene dos puntos críticos..En los siguientes problemas no lineales clasifica. . Comprueba en cada caso los resultados obtenidos representando algunas trayectorias solución en el espacio de fases partiendo de diferentes valores iniciales empleando para ello el método de Runge-Kutta de orden 4. x ' = 1 − 2 xy (a) y ' = 2 xy − y 2 1 (c) x′′ + x =  − 3 ( x ')  x '− x 2 2  x ' = x2 − y 2 − 1 (b) y ' = 2y (d) x′′ + 4 x + 2x ' = 0 1 + x2 (e) x ' = −2 xy y ' = y − x + xy − y 3 (f) x ' = x (1 − x 2 − 3 y 2 ) y ' = y (3 − x2 − 3 y2 ) 6. y la de presas y a.Una interacción depredador-presa entre dos especies sucede cuando una de ellas (el depredador) se alimenta de la segunda de ellas (la presa). b = 0. mientras que éstos usan las plantas campestres como alimento. El primer modelo depredador-presa fue el de Lotka-Volterra: x ' = − ax + bxy y ' = −cxy + dy en el que x representa la cantidad de depredadores. b) Suponiendo que a = 0. El interés de la aplicación de las matemáticas en las relaciones depredador-presa reside en determinar. con distintas condiciones iniciales.0025 y d = 0. b..En cada uno de los siguientes problemas se expresan un sistema autónomo en coordenadas polares.002. c) Representa el espacio de fases algunas trayectorias solución del sistema obtenidas mediante el algoritmo de Runge-Kutta.Determina las soluciones periódicas (y sus características de estabilidad). c = 0. Determina todos los puntos críticos.1. ciclos límite así como sus características de estabilidad...(a) Definimos la matriz del sistema lineal y calculamos su traza y determinante: A=[-5 3. c y d son constantes positivas. 8.19 Sistemas no lineales 7. (a) r ' = r 2 (1 − r 2 ) θ ' =1 r ' = r ( r − 1)( r − 3) θ ' =1 (b) r ' = r (1 − r ) θ ' = −1 r ' = sen (π r ) θ ' =1 2 (c) (d) 9. el lince ibérico se alimenta casi exclusivamente de conejos. no sólo el número de individuos de ambas poblaciones que establece el equilibrio en el ecosistema.3.. sino también puede servir para poner remedio a la extinción de alguna de las especies. Soluciones 1. t = trace(A) d = det(A) t = d = -41 2 .2. soluciones periódicas.2. d) ¿Existen órbitas periódicas? Razona la respuesta. a) Calcula los puntos críticos del modelo de Lotka-Volterra.2 7]. o de ambas. del sistema: x x' = y + ( x2 + y 2 − 2) 2 2 x +y y ' = −x + y x +y 2 2 (x 2 + y 2 − 2) 19. Por ejemplo. en caso de haber. clasifica los puntos críticos del sistema. y(:.y(:.-0. hold on [t.50).50). τ = 0.  −µ 1  2 A=  . siendo τ = tr(A) y δ = det(A).2.z]=rk4('ej1'.0.z(:.0.1).50).[5.1).5]. plot(z(:.2)) [t.2.4807 7. plot(y(:.1]. calculados directamente: lambda = eig(A) lambda = -5.0.2)). es decir.50).2.z(:.Teoría cualitativa de este modo..y]=rk4('ej1'.4420 lambda2 = -5.4420 20 o.2)) axis([-5 5 -5 5]) 2.[5.2.Para que el origen sea un centro del sistema lineal x ' = −µ x + y y ' = −x + µ y debe cumplirse que los valores propios de la matriz de coeficientes sean imaginarios puros.5].1). Es decir.2)) [t.0.1). δ = − µ + 1  −1 µ  .-1].[-5.y]=rk4('ej1'.z]=rk4('ej1'. concluimos que el punto crítico es un punto de silla. los valores propios son: lambda1 = (t+sqrt(t-4*d))/2 lambda2 = (t-sqrt(t-4*d))/2 lambda1 = 7. que τ − 4δ < 0 . almacenaremos el sistema en un fichero de función y representaremos algunas curvas solución en el espacio de fases empleando el algoritmo de Rung-Kutta: [t. plot(z(:. plot(y(:. Para comprobar esta afirmación.4807 Dado que los valores propios son reales y de signos opuestos.0.[-5. aquellos en los que se verifican las ecuaciones: 1 − 2 xy = 0 2 xy − y = 0 Despejando 2xy en la primera ecuación y sustituyéndolo en la segunda obtenemos que la única solución (y.0000i que son complejos de parte real negativa. Para estudiar la estabilidad de las soluciones en un entorno de este punto.50). Por tanto.y]=rk4('ej5'.1).3.y]=rk4('ej5'. hold on [t.1.1.2]..2)).1). plot(y(:.z]=rk4('ej5'.0.1). el punto crítico es un punto espiral estable.5.z(:.z(:. Para comprobarlo basta calcular algunas curvas solución mediante el algoritmo de Runge-Kutta: [t.[0.10. los valores críticos de la variable radial son 0 y 1.0. plot(z(:.5].2)) 8. por tanto.y(:.1.0.2].2)) [t.0000i -1. el único punto crítico) es el punto (0. lambda=eig(A) lambda = -1.0000 .0.0. trabajaremos con el sistema linealizado:  x '   −2 y −2 x   x   −2 −1  x  ⋅  =   =   ⋅   y '   2 y 2 x − 1  1 . únicos valores naturales en el intervalo 0 ≤ r < 2 .50).y(:.6.50).10. los puntos críticos del sistema.10.(a) Buscaremos.2)) [t.0000 + 1.6.z]=rk4('ej5'.10. plot(z(:.50).[0. Sin . en primer lugar.1).5].1).2 0].0. plot(y(:.[0.(d) Teniendo en cuenta la periodicidad de la función seno..21 debe verificarse: −4 (1 − µ 2 ) < 0 ⇔ 1 − µ 2 > 0 ⇔ µ < 1 Sistemas no lineales 5.[0.3.1  y   2 0   y    2  Obtenemos los valores propios de la matriz de coeficientes: A=[-2 -1. 0.1]. Por tanto. r = 1 corresponderá a una órbita periódica pero. no podemos clasificarlo directamente. r' >0 por lo que r decrece.Teoría cualitativa 22 embargo. pero no contradice las conclusiones anteriores. Esto nos permite afirmar que el origen es inestable y que las trayectorias solución tiendan a la órbita periódica pero.[0.1)).5. polar(z(:.50). clasificaremos el punto crítico al estudiar el comportamiento de las trayectorias solución en su entorno: si observamos la ecuación diferencial r ' = sin (π r ) . r' > 0 luego la distancia al origen crece. al calcular ∂f1 ∂f 2 + = π cos (π r ) ∂x ∂y 1 observamos que se produce un cambio de signo en r = . deben rodear al origen.2).0.z]=rk4('ej8'. Indirectamente.4.50).y(:.10. cualquier trayectoria que cruce la frontera de R permanece en su interior. Esto significa que mientras 2 1 r < .1)) . Por otra parte. para 1 < r < 2 se verifica r ' < 0 . si existen soluciones periódicas. Así.[1. Esto no aporta nueva información. Por otra parte. son simple intuición. ¿será ciclo límite.y]=rk4('ej8'. A continuación representaremos distintas trayectorias en el espacio de fases que nos permitan observar en comportamiento deducido: [t. mientras que para r = 2 − ε . polar(y(:. del primer teorema de Poincaré se deduce que.0. sólo r = 0 corresponde a un punto crítico.8. Con toda probablilidad. ya que hemos observado que para r = 0. para 0 < r < 1 se verifica que r ' > 0 y por tanto la variación de la distancia al origen es positiva y cada vez mayor hasta que para r = 1 dicha variación se anula. y en su caso. podemos afirmar que existe una trayectoria cerrada en R. no nos basamos en criterios probados para realizar estas afirmaciones. la órbita periódica será un ciclo límite de carácter atractor.z(:.2). la variación de la distancia al origen es cada vez menor hasta que para r = 1 ésta se anula. Así. no habrá ninguna trayectoria periódica. nos permite aplicar el teorema de Poincaré-Bendixon. Sin embargo. hold on [t.10. de qué tipo? Estudiemos en primer lugar la estabilidad del punto crítico a través del sistema linealizado:  r '   π cos (π ⋅ 0 ) 0   r  ⋅   = 0 0  θ  θ '   pero dado que el determinante de la matriz de coeficientes es nulo. con ε > 0 próximo a 2 cero. ¿qué ocurre más allá de dicha órbita? Siguiendo el mismo razonamiento.5]. 2 1 Una región anular R tal que 2 − ε ≤ r ≤ en torno al origen. Aplicando el teorema de Poincaré-Bendixon. 23 Sistemas no lineales . 6]).1]).6. el pendulo ha empezado parado. represento una magnitud respecto a la otra. todo ceros.0:0..2*pi.3]).2)) >> axis([-2*pi.y] = rungekut('pendulo'.[0.y] = rungekut('pendulo'. >> plot(t.[0.8).y(:.-2*pi)(direcciones que se alejan y otra que se acercan) >> [t. >> plot(y(:.y] = rungekut('pendulo'.01:10.derivada cero).txt (1 of 2) [09/03/2008 13:49:51] .y] = rungekut('pendulo'.5]).-8.2)) >> [t. Se pueden ver los puntos estacionarios (ej.0:0.0:0.txt Ecuación diferencial no lineal PENDULO ------- >> [t.[0. Ademas dibujaremos un campo con los vectores de la derivada. solucion estacionaria >> [t.5]).01:10.6.01:10.-8.-2*pi.0:0.2)) >> [t. es mas picuda >> [t. >> planofases('pendulo'.1).y) la velocidad ya no se curva como el seno.0:0.y(:.5]). porque el seño es propio de sistema lineal con coeficientes constantes.5 -> se va Vamos a ver si conseguimos darle el impulso exacto para que se quede en posicion pi (hacia arriba) file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%2.y] = rungekut('pendulo'.0:0. los puntos silla (ej.file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Practica%2017%20(EDO)-%2018%20(Sistemas)%20-%2019%20(Cualitativa)/practica19.[0.[0. en vez de dibujar las dos magnitudes respecto al tiempo.y) el pendulo esta dando vueltas! Plano de fases -------------en lugar de usar diagrama de tiempos y angulos.[0.y) ondas aparentemente sinusoidales: quiere decir que el termino no lineal no influye mucho.ica%2017%20(EDO)-%2018%20(Sistemas)%20-%2019%20(Cualitativa)/practica19. >> plot(t.[0.1).y(:. >> [t.1). >> hold on >> plot(y(:. >> plot(t.8]) % lo centra en lo interesante Se puede comparar con lo que ocurria en la otra representacion: con velocidad 3 -> sinusoidal = elipse en 2D con velocidad 6 -> sinusoidal picuda = elipse picuda en 2D con velocidad 6.01:10. >> plot(y(:.y] = rungekut('pendulo'.pi..2*pi.01:10.01:10.0:0. 2*pi . 0.01:10.0]) solucion.y] = rungekut('pendulo'. .2).y] = rungekut('pendulo'.2.[0.2).8).y] = rungekut('pendulo'.6.[0. Comentarios.[0.01:10.01:10.23]).-2*pi.[0.1).-8.0:0.01:10.01:10.y(:.[0.2*pi]).y] = rungekut('pendulo'.txt [t.26]).y(:.28]).file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%20Matematicas/Practica%2017%20(EDO)-%2018%20(Sistemas)%20-%2019%20(Cualitativa)/practica19.2*pi. % se pasa >> plot(y(:.7]).1). -----------El modelo del pendulo es casi lineal (seno de x =.0:0.'r') >> [t. >> plot(y(:. >> [t.0:0.y(:.y] = rungekut('pendulo'.2)) Cambiando el Modelo ------------------>> k=0. >> hold on >> plot(y(:.1).y(:.x) con otros modelos salen cosas como ciclos limites (ver transpa) Con ED de mas de 2 varibles salen nuevos fenomenos (atractores extraños) ej lorenz file:///E|/Documentos/Estudios/Documentacion%20Asignaturas/1B/Laboratorio%2.'r') % la 7 primero da una vuelta y luego empieza a oscilar.2)) [t. % se pasa >> plot(y(:. >> planofases('pendulo'.y(:.txt (2 of 2) [09/03/2008 13:49:51] .1).2)) [t.ica%2017%20(EDO)-%2018%20(Sistemas)%20-%2019%20(Cualitativa)/practica19.6.0:0.. % no llega >> plot(y(:.01:10.0:0.y] = rungekut('pendulo'.6.1).
Copyright © 2024 DOKUMEN.SITE Inc.