Final Project

5
Proyecto computacional de an´alisis num´ erico Liseth Steffany Mart´ ınez Per´ ez Jos´ e Manuel V´ asquez V´ asquez 17 de Junio de 2015 problema1 Implementaci´ on del m´ etodo de Brent. Mientras que el m´ etodo de la secante y posici´ on falsa convergen formalmente m´ as r´ apido que el m´ etodo de la bisecci´ on, uno encuentra en la pr´ actica funciones patol´ ogicas para las cuales el m´ etodo de la bisecci´ on converge m´ as r´ apido. Estas pueden ser funciones truncadas, funciones discontinuas, o incluso funciones suaves si la segunda derivada cambia abruptamente cerca de la ra´ ız. El m´ etodo de la bisecci´ on siempre toma la mitad de los intervalos, mientras que los m´ etodos de la secante y posici´ on falsa a veces pueden pasar muchos ciclos lentamente atray´ endose con l´ ımites distantes y cercanos a la ra´ ız. El m´ etodo de Riders hace un trabajo mucho mejor, pero tambi´ en a veces puede ser enga˜ noso. ¿Existe alguna manera de combinar la convergencia superlineal con la certeza del m´ etodo de la bisecci´ on? La respuesta a esto es si: usando el m´ etodo de Brent. Lea e implemente el m´ etodo de Brent. Muestre como trabaja su programa. En an´ alisis num´ erico, el m´ etodo de Brent es un algoritmo complicado pero popular para encontrar la ra´ ız de una funci´ on que combina el m´ etodo de bisecci´ on , el m´ etodo de la secante y la interpolaci´ on cuadr´ atica inversa . Nuestro archivo se llama brent.m, y nos devuelve la ra´ ız de una funci´ on, dada una tolerancia espec´ ıfica y tambi´ en el n´ umero de iteraci´ on realizadas para encontrar esta ra´ ız con dicha tolerancia. INPUT: funci´ on f (x) a la cual deseamos calcular la ra´ ız, a y b punto inicial y final respectivamente del intervalo donde se encuentra la ra´ ız y, la tolerancia deseada. OUTPUT: El valor x de la aproximaci´ on e i el n´ umero de iteraciones realizadas para obtener esta aproximaci´ on con la tolerancia indicada. Por ejemplo suponga que desea encontrar la ra´ ız de la funci´ on f (x)=(x +3)(x - 1) 2 con una tolerancia de 10 -3 utilizando el archivo brent.m se declara de la siguiente manera y se obtienen los siguientes resultados: octave:1>> [xi]=BRENT(@(x)(x+3)*(x-1)^2,-4,4/3,10^-3) x=-3 i=5 Mostramos un ejemplo donde la ra´ ız no se encuentra en el intervalo proporcionado: octave:2 >> [ xi ] =BRENT(@(x)(exp(x)*(x+1)^2),1,2,10 ^-3) La ra´ ız no est´ a en el intervalo dado x=NaN i=0 1

description

proyecto final Análisis numérico

Transcript of Final Project

Page 1: Final Project

Proyecto computacional de analisis numerico

Liseth Steffany Martınez Perez

Jose Manuel Vasquez Vasquez

17 de Junio de 2015

problema1 Implementacion del metodo de Brent.

Mientras que el metodo de la secante y posicion falsa convergen formalmente mas rapido que el metodo de

la biseccion, uno encuentra en la practica funciones patologicas para las cuales el metodo de la biseccion

converge mas rapido. Estas pueden ser funciones truncadas, funciones discontinuas, o incluso funciones

suaves si la segunda derivada cambia abruptamente cerca de la raız. El metodo de la biseccion siempre

toma la mitad de los intervalos, mientras que los metodos de la secante y posicion falsa a veces pueden

pasar muchos ciclos lentamente atrayendose con lımites distantes y cercanos a la raız. El metodo de

Riders hace un trabajo mucho mejor, pero tambien a veces puede ser enganoso. ¿Existe alguna manera

de combinar la convergencia superlineal con la certeza del metodo de la biseccion?

La respuesta a esto es si: usando el metodo de Brent. Lea e implemente el metodo de Brent. Muestre

como trabaja su programa.

En analisis numerico, el metodo de Brent es un algoritmo complicado pero popular para encontrar la raız

de una funcion que combina el metodo de biseccion , el metodo de la secante y la interpolacion cuadratica

inversa .

Nuestro archivo se llama brent.m, y nos devuelve la raız de una funcion, dada una tolerancia especıfica

y tambien el numero de iteracion realizadas para encontrar esta raız con dicha tolerancia.

INPUT: funcion f(x) a la cual deseamos calcular la raız, a y b punto inicial y final respectivamente del

intervalo donde se encuentra la raız y, la tolerancia deseada.

OUTPUT: El valor x de la aproximacion e i el numero de iteraciones realizadas para obtener esta

aproximacion con la tolerancia indicada.

Por ejemplo suponga que desea encontrar la raız de la funcion f(x) = (x+3)(x−1)2 con una tolerancia de

10−3 utilizando el archivo brent.m se declara de la siguiente manera y se obtienen los siguientes resultados:

octave:1>> [x i]=BRENT(@(x)(x+3)*(x-1)^2,-4,4/3,10^-3)

x=-3

i=5

Mostramos un ejemplo donde la raız no se encuentra en el intervalo proporcionado:

octave:2 >> [ x i ] =BRENT(@(x)(exp(x)*(x+1)^2),1,2,10 ^-3)

La raız no esta en el intervalo dado

x=NaN

i=0

1

Page 2: Final Project

problema2 [Moler, Numerical Computing with MATLAB, exercise 6.1, modified]

Implementar cuadratura adaptativa usando la regla de Simpson como se trabajo en clase. Complete la

siguiente tabla, donde los espacios en blanco corresponden al numero de evaluaciones de la funcion nece-

sarias para obtener la precision deseada.

Utilizamos el archivo SIMPSON.m para calcular el numero de evaluaciones realizadas.

INPUT= a,b limites de integracion, funcion f(x) de la cual se desea aproximar la integral, tolerancia y

el valor maximo de iteraciones N.

OUTPUT: eval numero de funciones evaluadas.

Por ejemplo:

octave:3>> eval=SIMPSON(-1,1,@(x)(x^2*exp(-x)+cos(x)),10^-6,100)

eval=61

# f(x) a b tol # funciones evaluadas

1 x2e−x + cos(x) -1 1 1e−6 61

2 x2e−x + cos(x) -1 1 1e−8 205

3 sin(x) 0 π 1e−8 129

4 cos(x) 0 ( 92 )π 1e−6 321

5√x 0 1 1e−8 345

6√x log x eps 1 1e−8 565

7 tan(sinx)-sin(tan(x) 0 π 1e−8 No aplica

8 13x−1 0 1 1e−4 Nivel Excedido

9 x8/3(1− x)10/3 0 1 1e−8 85

10 1(x−3)2+0.01 + 1

(x−9)2+0.04 − 6 eps 1 1e−8 49

Observaciones importantes:

La funcion tan(sinx) − sin(tanx) no aplica por que en el intervalo que se desea aproximar la integral,

esta presenta un comportamiento irregular como se puede observar en la grafica de la figura 1, por lo que

se genera un ciclo infinito.

Y la funcion 13x−1 se excede de las iteraciones maximas ya que la antiderivada de f(x) se indefine en el

intervalo en el cual se desea evaluar.

Figura 1: tan(sinx)-sin(tanx)

2

Page 3: Final Project

problema3 Implementar el metodo de Muller

El metodo de Muller es una tecnica de busqueda de raıces que tiene exito, incluso si la raız no es un

numero real. Inicialmente, el usuario proporciona las primeras tres iteraciones x0,x1y x2 Ahora, dadas

las tres interacciones, x0,x1y x2 el metodo de Muller consiste la construccion de un polinomio cuadratico:

P (x) = a(x− x2)2 + b(x− x2) + c,

Satisfaciendo las tres condiciones P (xi) = f(xi) para i = 0, 1, 2. A pesar que podemos utilizar las herra-

mientas implementadas en Octave/MATLAB para obtener los parametros a, b y c, es mejor resolver el

sistema y dar los valores de a, b y c explıcitamente a el algoritmo. De esta manera algunos calculos son

atendidos por nuestras formulas y el programa ya no tiene que hacerlas. Aquı estas las formulas:

c = f(x2)

b =(x0 − x2)2[f(x1)− f(x2)]− (x1 − x2)2[f(x0)− f(x2)]

(x0 − x2)(x1 − x2)(x0 − x1)

a =(x1 − x2)[f(x0)− f(x2)]− (x0 − x2)[f(x1)− f(x2)]

(x0 − x2)(x1 − x2)(x0 − x1)

Una vez que hemos calculado a, b y c se procede a calcular x3 por medio de la formula:

x3 = x2 −2c

b+ sign(b)√b2 − 4ac

El metodo continua hasta que alcanza un nivel de tolerancia TOL o se ha alcanzado el numero maximo

de iteraciones permitidas.

El metodo de Muller es una tecnica para encontrar raıces de una funcion f(x) = 0.

Nuestro archivo en este proyecto es llamado mullers.m a continuacion mostraremos como se tiene que

llamar la funcion desde la consola de Octave:

[xr k] = mullers(f, x0, x1, x2, c, e)

INPUT: Las variables que recibe esta funcion es f que representa la funcion f(x)=0, los valores x0, x1, x2

que son las tres primeras iteraciones que se necesitan para aplicar el metodo de Muller. Y por ultimo los

valores c y e, donde c representa el numero de ciclos y e la tolerancia.

OUTPUT: Lo que nos mostrara esta funcion el numero de iteraciones necesarias para alcanzar la tole-

rancia indicada y el valor de la raız obtenida.

A continuacion se muestra el siguiente ejemplo ejecutado en Octave.

Ejemplo: Aplicar el metodo de Muller para encontrar solucion a las siguientes dos ecuaciones con una

tolerancia de 10−6:

i)x2 + x+ 1 = 0

Al ejecutarlo en la consola de Octave se muestra de la siguiente manera:

octave:1>> [x i]=mullers(@(x)(x^2+x+1,0,1,2,10,10^-6)

i=1 -0.500000 + 0.866025i

i=2 -0.500000 + 0.866025i

x= -0.500000 + 0.86603i

i= 2

3

Page 4: Final Project

ii)ex + 1 = 0

Se muestra de la siguiente manera en la consola:

octave:1>> [x i]=mullers(@(x)(exp(x)+1,0,1,2,10,10^-6)

i=1 -0.081977 + 1.161063i

i=2 -0.692158 + 1.494827i

i=3 -1.197208 + 2.252363i

i=4 -1.010710 + 3.503435i

i=5 0.064857 + 3.344146i

i=6 -0.018116 + 3.107492i

i=7 0.000515 + 3.140629i

i=8 0.000000 + 3.141594i

i=9 0.000000 + 3.141593i

x= 1.8046e-012 + 3.1416e+000i

i= 9

problema4 Implementar el metodo de Neville.

Use el pseudocodigo dado a continuacion para implementar el metodo de Neville.

Para evaluar el polinomio de interpolacion P (x) en los n+1 numeros distintos x0, x1 · · · ,xn en el numero

x para la funcion f :

INPUT: numeros x0, x1 · · · ,xn; valores f(x0), f(x1) · · · ,f(xn) como la primera columna Q0,0,Q1,0 · · · ,

Qn,0 de Q.

OUTPUT:La tabla Q con P (x) = Qn,n.

Paso 1: Para i = 1, 2 · · · , n

para j = 1, 2 · · · , i

hacer Qi.j =(x−xi−j)Qi,j−1−(x−xi)Qi−1,j−1

xi−xi−j

Paso 2: OUTPUT(Q);

STOP.

Nuestro archivo se llama NEVILLE.m y a continuacion se detalla la forma de utilizarlo. El metodo

de Neville es util para encontra el valor de P (x0) donde x0 es un valor conocido y P (x) es el polinomio

que pasa por las imagenes de los nodos x0, x1, · · ·xn.

Por ejemplo suponga que desea conocer el valor de P (1,5) en el polinomio que pasa por las imagenes de

los nodos dados en la siguiente tabla:

xi f(xi)

1.0 0.7651977

1.3 0.6200860

1.6 0.4554022

1.9 0.2818186

2.2 0.1103623

4

Page 5: Final Project

Hacemos la llamada de la siguiente manera:

octave:3>> [m q]=NEVILLE([1.0,1.3,1.6,1.9, 2.2],[0.7651977,0.6200860, 0.4554022, 0.2818186,

0.1103623], 1.5)

5