Final Project
-
Upload
lis-martinez -
Category
Documents
-
view
3 -
download
0
description
Transcript of 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
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
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
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
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