18 Introducción al Cálculo Numérico y Programación MÓDULO 9: RAICES DE UNA FUNCIÓN DE UNA VARIABLE Ejercicio 1: a) Escribe una función [x,it]=bisecc(fun,tol,a,b), que admita como parámetros de entrada una función MATLAB fun(x), la tolerancia tol de la raiz, y el intervalo (a,b) donde se ha de buscar la raiz, y devuelva la raiz x y el número de iteraciones it del método de bisección. La función debe visualizar la solución aproximada en cada iteración. Atención: Se puede introducir como argumento en una función MATLAB otra función. Para evaluar esta función se debe utilizar la orden feval. (más ayuda con help feval) Por ejemplo, la siguiente función evalúa una función introducida como primer argumento en el punto introducido como segundo argumento: function y = mi_feval(fun, x) % % % y = feval(fun, x); mi_feval('sin', 0.01), mi_feval('cos', 0.01) ans = 0.0100 ans = 1.0000 Nótese como el nombre de la función se coloca entre comillas simples cuando se introduce como argumento. b) Aplicar la función bisecc.m a la función f(x)= x-sen(x)-1, considerando una tolerancia de 0.001. Ayúdese del comando PLOT para establecer los extremos a y b del intervalo en donde se desee localizar la raiz x de f(x). Comprobar el resultado con el obtenido mediante la función de MATLAB fzero. Solución : [a,b] = x= nº de iteraciones : Ejercicio 2: Escribe una función MATLAB [x,it]=lineal(fun,tol,a,b), que admita como parámetros de entrada una función MATLAB fun(x), la tolerancia tol de la raiz, y el intervalo (a,b) donde se ha de buscar la raiz, y devuelva la raiz x y el número de iteraciones it aplicando el método de interpolación bilineal. La función debe visualizar la solución aproximada en cada iteración. 19 Introducción al Cálculo Numérico y Programación Ejercicio 3: Aplicar las funciones biseccion y lineal para encontrar la raiz de f(x) = ex3x en [1,2]. ¿Qué método necesita menos iteraciones?. Ejercicio 4: Escribe una función [x,it]=newton(fun,dfun,tol,x0), que admita como parámetros de entrada una función MATLAB fun(x), su derivada dfun(x), la tolerancia tol de la raiz, y el punto inicial x0 donde aplicar el método de Newton, y devuelva la raiz x y el número de iteraciones it aplicando el método de Newton Ejercicio 5: Aplica la función newton para encontrar la raiz de f(x) = ex-3x en [1,2]. Comparar el número de iteraciones de este método con los resultados del ejercicio 3. Ejercicio 6: Escribe una función [x,it]=secante(fun,tol,x0,x1), que admita como parámetros de entrada una función MATLAB fun(x), la tolerancia tol de la raiz, y dos puntos iniciales (x0 y x1) donde comienza el método de la secante, y devuelva la raiz x y el número de iteraciones it aplicando el método de la secante. La función debe visualizar la solución aproximada en cada iteración. Ejercicio 7: Aplicar las función secante para encontrar la raiz de f(x) = ex-3x en [1,2]. Compara el número de iteraciones de este método con el de Newton (ejercicio 5). Ejercicio 8: a) Escribir una función [x,it]=pfijo(fun,gun,tol,x0) para encontrar la raiz de una función fun(x) usando el método del punto fijo con una tolerancia tol, siendo x0 un valor próximo a la buscada y gun(x) una función tal que la expresión x=gun(x) sea equivalente a fun(x)=0 que cumpla los requisitos para la convergencia del método. Mostrar por pantalla los valores de : nº de iteración, la solución aproximada x y el valor de fun(x) b) Aplicar la función pfijo.m a la función f(x) del ejercicio 1b), considerando una tolerancia de 0.001. Ayúdese del comando PLOT para establecer el valor x0 con el que comenzar el método iterativo. Solución : g(x)= x0 = x= nº de iteraciones : Apéndice 9A ¿Cómo calcula MATLAB las raíces? MATLAB proporciona la función x=fzero(nombre_funcion,x0,tol,it) para obtener la raiz de una función. La función que ha de ser de la forma y=nombre_funcion(x) se introduce como primer argumento, x0 es la aproximación inicial, el número de iteraciones del proceso iterativo para alcanzar la solución se introduce por medio del argumento it. Si it es igual a 1, el proceso se repite hasta que la solución esté dentro de una tolerancia tol. Los dos últimos argumentos se pueden omitir. Introducción al Cálculo Numérico y Programación 20 Esta función emplea el método de Brent que combina la interpolación cuadrática inversa con la bisección. Apéndice 9B ¿Cómo calcula MATLAB las raíces de un polinomio? La función MATLAB r=roots(c) calcula las raíces r de un polinomio cuyos coeficientes se encuentran almacenados en el vector c de la forma: c(1)xn+...+c(n)x+c(n+1). Otra función relacionada con los polinomios es c=poly(r) que genera un polinomio con las raíces introducidas como argumento en el vector r.