métodos numéricos para el calculo científico con matlab - tomo 1

74
Presentado por: Mera Carrasco, Junior Lino Malhaber Montenegro, Miguel ´ Angel Asesor: Dr. Collantes Santisteban, Luis Jaime UNPRG 2014 etodos Num´ ericos para el alculo Cient´ ıfico con Matlab TOMO 1

Upload: junior-lino-mera-carrasco

Post on 09-Dec-2015

27 views

Category:

Documents


1 download

DESCRIPTION

Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

TRANSCRIPT

Page 1: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

Presentado por:

Mera Carrasco, Junior Lino

Malhaber Montenegro, Miguel Angel

Asesor:Dr. Collantes Santisteban, Luis Jaime

UNPRG

2014

Metodos Numericos para el

Calculo Cientıfico con Matlab

TOMO 1

Page 2: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

UNIVERSIDAD NACIONAL

“PEDRO RUIZ GALLO”

FACULTAD DE CIENCIAS FISICAS Y MATEMATICAS

ESCUELA PROFESIONAL DE MATEMATICA

“Metodos Numericos para el CalculoCientıfico con Matlab”

TOMO 1

ECUACIONES NO LINEALES

Presentado por:

Mera Carrasco Junior Lino

Malhaber Montenegro Miguel Angel

Asesor:

Dr. Collantes Santisteban Luis Jaime

LAMBAYEQUE − PERU

2014

Page 3: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

Introduccion

La presentacion de estos tomos tiene su origen en los Seminarios denominados FUN-

DAMENTOS DE ECUACIONES NO LINEALES, INTERPOLACION, DIFEREN-

CIACION E INTEGRACION NUMERICA PARA EL CALCULO CIENTIFICO y

CALCULO CIENTIFICO DE ECUACIONES NO LINEALES, INTERPOLACION,

DIFERENCIACION E INTEGRACION NUMERICA CON MATLAB desarrollados

en Diciembre del 2012 como investigacion de los cursos de Seminario de Matematica

Pura y Aplicada de la carrera profesional de Matematicas de la Universidad Nacional

Pedro Ruiz Gallo con el asesoramiento del Dr. Luis Jaime Collantes Santisteban, dichos

trabajos enfocaban la parte teorica y practica de algunos temas del Calculo Cientıfico.

Estos tomos no son documentos comerciales, por el contrario decidimos trabajar para

que se encuentre al alcance de todos, es bien sabido la dificultad que tienen estudiantes

y profesionales de ingenierıa, ciencias medicas, ciencias economicas entre otras para ide-

alizar sus problemas y desarrollar un modelo matematico adecuado en algunos casos es

difıcil porque la aplicacion resulta excesivamente compleja o los metodos analiticos no se

adecuan muy bien a sus resultados por ello es conveniente el uso de metodos numericos

los cuales conducen a soluciones aproximadas pero mas manejables y se puede dar uso

a un ordenador provisto de un software adecuado, para nuestro caso Matlab.

Metodos Numericos para el Calculo Cientıfico con Matlab esta divido en 7 tomos:

TOMO 0 Conceptos Previos

TOMO 1 Ecuaciones No Lineales

TOMO 2 Interpolacion

TOMO 3 Diferenciacion e Integracion Numerica

TOMO 4 Ecuaciones Lineales

TOMO 5 Ecuaciones Diferenciales Ordinarias

TOMO 6 Ecuaciones Diferenciales Parciales

Page 4: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

Metodos Numericos para el Calculo Cientıfico con Matlab, explicara de manera sencilla

y con ejemplos el uso y la programacion de Interfaces Graficas de Usuario (GUI) ası co-

mo el clasico uso de los archivos “.m” y por supuesto la solucion “manual”.

Este TOMO denominado Ecuaciones No Lineales esta dividido en tres capıtulos:

En el primero revisaremos la parte teorica sobre las solucion de Ecuaciones No Lineales

en la busqueda de las raices para encontrar soluciones aproximadas para una funcion

matematica dada.

En el segundo capıtulo solucionaremos problemas mediante el uso de nuestras Interfaces

Graficas con los distintos metodos de solucion y verificaremos cual es el mas efectivo

para distintos problemas.

Dejaremos para el final los codigo fuente utilizados en la creacion de las interfaces grafi-

cas.

”Por favor, soy Rodney McKay, difıcil tarda unos segundos. Imposible, un par de min-

utos. ”Dr. Rodney McKay - Stargate Atlantis

Page 5: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

INDICE GENERAL

1. Ecuaciones no Lineales 7

1.1. Metodo de Biseccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

1.2. Metodo de Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

1.2.1. Como terminar las iteraciones de Newton . . . . . . . . . . . . . . 16

1.2.2. Metodo de Newton de segundo orden . . . . . . . . . . . . . . . . 17

1.3. Metodo de la Secante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

1.4. Iteracion de Punto fijo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

1.4.1. Como terminar las iteraciones de punto fijo . . . . . . . . . . . . . 21

1.5. Aceleracion utilizando el metodo de Aitken . . . . . . . . . . . . . . . . . 23

1.6. Polinomios algebraicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

1.6.1. Algoritmo de Horner . . . . . . . . . . . . . . . . . . . . . . . . . 27

1.6.2. Metodo de Newton-Horner . . . . . . . . . . . . . . . . . . . . . . 28

2. Aplicacion mediante GUIs 30

2.1. Metodo de la Biseccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

2.2. Metodo de Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

2.3. Metodo de la Secante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

2.4. Metodo del Punto Fijo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

2.5. Metodo de la Regla Falsa . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

2.6. Metodo de Aitken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

2.7. Metodo de Newton-Horner . . . . . . . . . . . . . . . . . . . . . . . . . . 43

2.8. Comparacion de Metodos Iteractivos . . . . . . . . . . . . . . . . . . . . 45

2.8.1. Analizando una funcion polinomica . . . . . . . . . . . . . . . . . 45

2.8.2. Analizando una funcion trascendental . . . . . . . . . . . . . . . . 52

5

Page 6: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

6

3. Codigo Fuente de los GUI’S 58

3.1. Metodo de la Biseccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

3.2. Metodo de Newton Horner . . . . . . . . . . . . . . . . . . . . . . . . . . 61

3.3. Metodo de Newton Raphson . . . . . . . . . . . . . . . . . . . . . . . . . 63

3.4. Metodo del Punto Fijo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

3.5. Metodo de la Regla Falsa . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

3.6. Metodo de la Secante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

3.7. Metodo de la Aceleracion de Atiken . . . . . . . . . . . . . . . . . . . . . 71

Page 7: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

Capıtulo 1

ECUACIONES NO LINEALES

En este capıtulo estudiaremos el problema de la busqueda de raices o ceros de una

ecuacion no lineal. La razon principal para resolver ecuaciones no lineales por medio

de metodos numericos es que esas ecuaciones carecen de solucion exacta con metodos

algebraicos , excepto para muy pocos problemas. La solucion analitica de las ecuaciones

polinomiales existe solo hasta el orden cuatro pero no existen soluciones en forma exacta

para ordenes superiores. Por lo tanto, las raices de esas ecuaciones no lineales se obtienen

mediante metodos numericos basados en procedimientos iterativos.

Los metodos numericos disenados para encontrar las raices son poderosos, aunque cada

uno tiene sus propias limitaciones y defectos. El metodo de biseccion consiste en encon-

trar una raız si se conoce un intervalo que contenga a la raız. Por lo tanto este metodo

necesita un esfuerzo preliminar para estimar un intervalo adecuado que contenga a la

raız deseada. El metodo de Newton necesita una estimacion inicial, pero no es necesaria

la estimacion de un intervalo. Interacion de punto fijo necesita un punto x0 capaz de

producir una sucesion que converja confiable y rapidamente a la busqueda de la raız con

cierto numero de interaciones. El metodo de Aitken permite acelerar la convergencia de

una sucesion, vıa interaciones de punto fijo. El metodo de Horner es un metodo muy

rapido y muy sencillo por que no requiere iteraciones y permite evaluar a aun polinomio

(y su derivada) en un punto x0.

Page 8: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 8

Definicion 1.0.1. (Metodo Iterativo) Es aquel metodo numerico en el que partiendo

de un valor x0 arbitrario, se calcula una sucesion x0, x1, x2, . . . de forma recurrente,

mediante una relacion de la forma

xn+1 = g(xn), n = 0, 1, 2, . . .

donde, xi ∈ R y g : R → R.

Los metodos iterativos tambien se utilizan en otros problemas numericos y, en general,

son muy poco vulnerables al crecimiento del error por redondeo.

Iteracion: Los pasos que se dan, en un algoritmo, para calcular un iterado, xn+1, a

partir del iterado anterior, xn.

Definicion 1.0.2. (Orden de Convergencia)Si la sucesion {xn}∞n=0 converge a α y

en = xn − α ∀n ≥ 0, entonces existe una constante A > 0 y R > 0 tales que

lımn→∂

|en+1||en|R

= A

en este caso, se dice que la sucesion converge a α con orden de convergencia R, y A es

la constante asintotica del error.

En particular, la convergencia con orden R = 2 se le llama cuadratica y la con orden

R = 3 cubica.

En general los metodos que generen sucesiones con alto orden de convergencia se aproxi-

man mas rapidamente a la solucion que aquellos que generen sucesiones con bajo orden.

Page 9: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 9

1.1. Metodo de Biseccion

Este metodo es el mas simple, aunque tambien el mas seguro y solido para encontrar

una raız en un intervalo, dado donde se sabe que existe dicha raız. Su unica ventaja es

que funciona aun para funciones no analıticas (ver definicion ??).

Sea f una funcion continua en el intervalo entre x = a y x = b (I(0) = [a(0), b(0)]).

El metodo de biseccion se basa en el hecho de que, para que un intervalo [a, b] tenga una

raız, basta que los signos de y(x) en los dos extremos sean opuestos, o bien que f(a) o

f(b) se anulen; es decir, f(a)f(b) ≤ 0 supongamos que es unico, y llamemosle α .

El primer paso para utilizar este metodo es bisectar el intervalo [a, b] en dos mitades; a

saber, [a, c] y [c, b], donde c = (a + b)/2. Al verificar los signos de f(a)f(c) y f(c)f(b),

se localiza la mitad del intervalo que contiene la raız. Asi, si f(a)f(c) ≤ 0, el intervalo

[a, c] que incluye a x = a y x = c contiene a la raız en caso contrario, el intervalo

[c, b] = I(1) = [a(1), b(1)] tiene la raız. El nuevo intervalo que contiene a la raız se bisecta

de nuevo.

C

y=f(x)

a= a C C b= b

a C b

a C b a C b

0 0 0

000

1

111

2

222

Figura 1.1: Interpretacion geometrica del metodo de biseccion.

Page 10: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 10

Al repetir este proceso, el tamano del intervalo (I(k)) con la raız se vuelve cada vez

mas pequeno. Es decir: se toma el punto medio del intervalo formando una sucesion

{x(k)},tendera inevitablemente a α puesto que la longitud de los intervalos I(k) tiende

a cero cuando k tiende a infinito. La iteracion se detiene cuando la mitad del intervalo

esta dentro de una tolerancia dada ε. El tamano del intervalo despues de k pasos de la

iteracion es

I(k) =(b− a)

2k

donde el numerador es el tamano del intervalo inicial. Esto tambien representa el maximo

error posible cuando la raız se aproxima mediante el k-esimo punto medio. Por lo tanto,

si la tolerancia del error esta dada por ε, el numero de pasos de iteracion necesarios es

el mınimo entero que satisface(b− a)

2k< ε

o, en forma equivalente

k > log2b− a

ε

Teorema 1.1.1. Supongamos que f ∈ C[a, b] y f(a).f(b) < 0. El metodo de biseccion

generan una sucesion {x(k)} que aproxima a un cero (α) de f , tal que

|x(k) − α| < b− a

2k, k ≥ 1

Demostracion. para n ≥ 1, tenemos

b(k) − a(k) =1

2k−1(b− a) y α ∈ (a(k), b(k))

Y como x(k) = 12(a(k) + b(k)) para toda k ≥ 1, se deduce que

|x(k) − α| ≤ 1

2(b(k) − a(k)) =

b− a

2k

Page 11: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 11

Ejemplo 1.1.1. Encuentre la raız positiva de f(x) = ln x−x+2 con una tolerancia de

10−4 para variable x.

[a, b] [f(a), f(b)] c f(c)

[2,4] [0.6931,-0.6137] 3 0.0986

[3,4] [0.0986,-0.6137] 3.5 -0.2472

[3,3.5] [0.0986,-0.2472] 3.25 -0.0713

[3,3.25] [0.0986,-0.0713] 3.125 0.0144

[3.125,3.25] [0.0144,-0.0713] 3.1875 -0.0282

[3.125,3.1875] [0.0144,-0.0282] 3.15625 -0.00686

[3.125,3.15625] [0.0144,-0.0686] 3.140625 0.003879

[3.140625,3.15625] [0.00379,-0.0686] 3.1484375 -0.00153

[3.140625,3.1484375] [0.00379,-0.00153] 3.14453125 0.00113

[3.14453125,3.1484375] [0.00113,-0.000153] 3.146484375 -1.9861×10−4

[3.14453125,3.146484375] [0.00113,-1.9861×10−4] 3.145507813 4.6753×10−4

[3.1445507813,3.146484375] [4.6753×10−4,-1.9891×10−4] 3.1459960494 1.34469×10−4

[3.145996094,3.146484375] [1.34469×10−4,-1.9861×10−4] 3.146240235 -3.2070×10−5

[3.145996094,3.146240235] [1.34469×10−4,-3.2070×10−5] 3.146118165 5.119966×10−5

[3.146118165,3.146240235] [5.119932×10−5,-3.2070×10−5] 3.1461792 9.5642×10−6

[3.1461792,3.146240235] [9.5642×10−5,-3.2070×10−5] 3.146240235 9.5642×10−6

Cuadro 1.1: Metodo de biseccion para ln x− x+ 2 con [2, 4].

Observamos en el cuadro cuadro 2.1 notamos que el error=Abs|3,1461792−3,146240235| =6,1035 × 10−5 < 1 × 10−4, es decir, que se ha cumplido con el criterio de convergencia

dada por la ecuacion (??) por lo tanto, el valor buscado es x = 3,1561792; luego de 14

iteraciones.

Page 12: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 12

1.2. Metodo de Newton

El signo de la funcion dada f en los extremos del intervalo es la unica informacion

explotada por el metodo de biseccion. Se puede construir un metodo mas eficiente ex-

plotando los valores alcanzados por f y su derivada (en caso de que f sea diferenciable).

En ese caso,

y(x) = f(x(k)) + f ′(x(k))(x− x(k))

proporciona la ecuacion de la tangente a la curva (x, f(x)) en el punto x(k).

Si pretendemos que x(k+1) sea tal que y(x(k+1)) = 0, obtenemos:

x(k+1) = x(k) − f(x(k))

f ′(x(k)), k ≥ 0 (1.1)

con tal de que f ′(x(k)) 6= 0. Esta formula nos permite calcular una sucesion de valores

x(k), el cual comienza con una aproximacion inicial x(0). Este metodo se conoce como

metodo de Newton y corresponde a calcular el cero de f reemplazando localmente f por

su recta tangente (vease en la figura siguiente ).

y=f(x)

x

x

(x , f(x ))

xPendiente f'(x )

(x , f(x ))

Pendiente f'(x )

00

0 0

1

1

1 1

2a

Figura 1.2: Interpretacion geometrica del metodo de Newton.

Page 13: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 13

Hay muchas formas de aplicar el metodo de Newton, la mas comun consiste en consider-

arlo graficamente. Otra posibilidad consiste en derivarlo como una tecnica que permite

lograr una convergencia mas rapida que la que ofrecen otros tipos de iteracion funcional.

Una tercera forma se basa en los polinomios de Taylor.

Desarrollando f en serie de Taylor en un entorno de un punto generico x(k) hallamos

f(x(k+1)) = f(x(k)) + δ(k)f ′(x(k)) +O((δ(k))2) (1.2)

donde δ(k) = x(k+1) − x(k). Forzando a f(x(k+1)) a ser cero y despreciando el termino

O((δ(k))2), podemos obtener x(k+1) en funcion de x(k), como se establece en (1.1). A este

respecto (1.1) puede considerarse como una aproximacion de (1.2).

En general, el metodo de Newton no converge para todas las posibles elecciones de x(0),

sino solo para aquellos valores que estan suficientemente cerca de α.

En la practica, se puede obtener un posible valor inicial x(0) recurriendo a una cuantas

iteraciones del metodo de biseccion o, alternativamente, a traves de una investigacion

de la grafica de f .

Si x(0) se escoge apropiadamente y α es un cero simple (esto es, f ′(α) 6= 0) entonces el

metodo de Newton converge. En el caso en que f sea continuamente diferenciable hasta

su segunda derivada, se tiene el siguiente resultado de convergencia (ver definicion 1.0.2

).

lımk→∞

x(k+1) − α

(x(k) − α)2=

f ′′(α)

2f ′(α)(1.3)

Si f ′(α) 6= 0 el metodo de Newton se dice que converge cuadraticamente (o de orden

2). En el caso de ceros con multiplicidad m mayor que 1, el orden de convergencia

del metodo de Newton se degrada a 1. En tal caso uno podrıa recuperar el orden 2

modificando el metodo original (1.1) como sigue:

x(k+1) = x(k) −mf(x(k))

f ′(x(k)), k ≥ 0 (1.4)

con f ′(x(k) 6= 0). Obviamente, este metodo de Newton modificado requiere el conocimien-

to a priori de m.

Page 14: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 14

Teorema 1.2.1. Sea f ∈ C2[a, b], si α ∈ [a, b] es tal que f(α) = 0 y f ′(α) 6= 0, entonces

existe δ > 0 tal que el metodo de Newton genera una sucesion x(k), k = 1, . . . ,∞ que

converge a α para cualquier aproximacion inicial x(0) ∈ [α− δ, α + δ].

Demostracion. La demostracion se basa en analizar el metodo de Newton como un

esquema de iteracion x(k) = g(x(k)), para k ≥ 1, con g(x) = x− f(x)f ′(x)

.

Sea m un numero cualquiera en (0, 1). primero debemos encontrar un intervalo [α −δ, α + δ] que g mapea en si mismo y que |g′(x)| ≤ m para toda x ∈ (α− δ, α + δ).

Como f ′(α) 6= 0 y f ′ es continua, existe δ1 > 0 tal que f ′(x) 6= 0 para x ∈ [α−δ1, α+δ1] ⊆[a, b]. por tanto, g esta definida y es continua en [α− δ1, α+ δ1]. Tambien,

g′(x) =f(x)f ′′(x)

[f ′(x)]2,

para x ∈ [α − δ1, α + δ1] y como f ∈ C2[a, b], tendremos g ∈ C1[α − δ1, α + δ1]. por

consiguiente, f(α) = 0, asi que g′(α) = 0.

Como g′ es continua y como 0 < m < 1, implica que existe δ, con 0 < δ < δ1, y

|g′(x)| ≤ m, para todo x ∈ [α− δ, α + δ].

Por el teorema del valor medio tenemos que para algun numero ξ entre x y α, |g(x)−g(α)| = |g′(ξ)||x− α|. por lo tanto,

|g(x)− α| = |g(x)− g(α)| = |g′(ξ)||x− α| ≤ m|x− α| < |x− p|.Puesto que x ∈ [α − δ, α + δ], se deduce que |x − α| < δ y que |g(x) − α| < δ. Todas

las hipotesis la proposicion 1.4.1 se satisfacen, de modo que la sucesion {x(k)}, k =

1, . . . ,∞ definida por

x(k) = g(x(k−1)) = x(k−1) − f(x(k−1))

f ′(x(k−1))

converge a α para cualquier x(0) ∈ [α− δ, α + δ].

Veamos un ejemplo del metodo de Newton(1.3) y su version modificada(1.4).

Page 15: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 15

Ejemplo 1.2.1. Aplicar el metodo de Newton, Newton modificado y calcular su orden

de convergencia a la funcion f(x) = x3 − 4x2 + 4x, partiendo de x(0) = 1,5.

Realizando operaciones elemntales tenemos f(x) = x(x−2)2 lo cual indica que α = 2 es

un cero de multiplicidad 2 y partiendo de x(0) = 1,5 obtenemos los siguientes resultados.

Como podemos observar en el cuadro cuadro 2.2 , el metodo de Newton en en este caso

k x(k) |x(k) − α| |x(k+1)−α|

|x(k)−α|

0 1.5 0.5 0.4

1 1.8 0.2 0.47

2 1.905882359 0.0941 0.49

3 1.954132539 0.04587 0.494

4 1.9773386164 0.02266 0.497

5 1.988734610 0.011266 0.498

6 1.994383304 0.0056167 0.499

7 1.997195612 0.0028044 0.499

8 1.998598791 0.00140121 0.499

9 1.999299641 0.00070036 0.4999

10 1.999649882 0.00035012 0.4999

11 1.999824956 0.00017504 0.4999

12 1.999912482 0.00008752 0.5

13 1.999956242 0.0000438 0.5

14 1.999978121 0.000021879 0.499

15 1.999989061 0.000010939 0.4999

16 1.999994530 0.00000547 0.5

17 1.999997265 0.000002735 0.5

Cuadro 1.2: Convergencia lineal de x3 − 4x2 + 4x en x(0) = 1,5

tiene un comportamiento lineal. Si comparamos los resultados obtenidos en el cuadro

2.3 y 2.4 , observamos que la rapidez de convergencia del metodo de Newton modificado

es mayor al metodo de Newton original.

Page 16: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 16

k x(k) |f(xk)|

0 x(0) = 1,5 0.375

1 x(1) = 1,8 0.07234018

2 x(2) = 1,9058 0.01691

3 x(3) = 1,95409083 0.00411869

4 x(4) = 1,977318 0.001017276

Cuadro 1.3: Metodo de Newton para x3 − 4x2 + 4x en x(0) = 1,5

k x(k) |f(xk)|

0 x(0) = 1,5 0.375

1 x(1) = 1,89473684210526 0.02099431403

2 x(2) = 1,99691833590139 0.00001896406

3 x(3) = 1,99999761850615 0.000000000001

4 x(4) = 1,9999999999256 0.000000000001

Cuadro 1.4: Metodo de Newton modificado para x3 − 4x2 + 4x en x(0) = 1,5

1.2.1. Como terminar las iteraciones de Newton

Las interaciones para encontrar α despues de un numero infinito de estas y una tolerancia

ǫ, pueden terminarse para un menor valor de kmin para el cual se verifica las siguiente

desigualdad

|e(kmin)| = |α− x(kmin)| < ǫ

Este es un test sobre el error. Puesto que el error es desconocido, necesitamos adoptar en

su lugar un estimador del error apropiado, el cual podamos estimar el verdadero error.

Para el metodo de Newton el estimador del error apropiado viene proporcionado por la

diferencia entre dos iterantes consecutivas. Esto significa que uno termina las iteraciones

en la etapa Kmin tan pronto como

|x(kmin) − x(kmin−1)| < ǫ (1.5)

Este es un test sobre el incremento.

El test sobre el incremento es satisfactorio cuando α es un cero simple de f . Alternati-

Page 17: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 17

vamente, uno podrıa usar un test sobre el residuo en la etapa k, r(k) = f(x(k)).

Concretamente, podriamos parar las interaciones para el primer kmin para el cual

|r(kmin)| = |f(x(kmin))| < ǫ (1.6)

El test sobre el residuo es satisfactorio solamente cuando |f ′(x)| ≈ 1 en un entorno Iα

del cero α.

1.2.2. Metodo de Newton de segundo orden

Si en lugar de considerar los dos primeros termino de la serie de Taylor se consideran

los tres primeros terminos, se representa con δ(k) a la diferencia entre xk+1 y x(k)

f(x(k+1)) = f(x(k)) + δ(k)f ′(x(k)) +(δ(k))2

2f ′′(x(k))

igualando a cero f(x(k+1)) y sustituyendo δ(k) por − f(x(k))

f ′(x(k)), obtenemos:

f(x(k)) + δ(k)[

f ′(x(k))− 1

2

f(x(k))

f ′(x(k))f ′′(x(k))

]

= 0

Despejnado δ(k) se obtiene:

δ(k) = − f(x(k))

f ′(x(k))− f(x(k))

2f ′(x(k))f ′′(x(k))

De la ecuacion anterior se puede despejar el valor de x(k+1):

x(k+1) = x(k) − f(x(k))

f ′(x(k))− f(x(k))

2f ′(x(k))f ′′(x(k))

(1.7)

este metodo considera un mayor numero de terminos de la serie por lo tanto converge

mas rapidamente que el metodo de Newton (1.1)

1.3. Metodo de la Secante

Una gran desventaja del metodo de Newton es el conocer f ′ la cual es con frecuencia

dificil de hallar, luego, para evitarlo consideremos:

f ′(x(k)) =f(x)− f(x(k))

x− x(k)(1.8)

Page 18: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 18

y en (1.8) tomamos x = x(k−1) para ontener:

f ′(x(k)) =f(x(k−1))− f(x(k))

x(k−1) − x(k)(1.9)

y al reemplazar la aproximacion para f ′(x(k)) dado en la formula de Newton se obtiene:

x(k+1) = x(k) − f(x(k))x(k−1)−f(x(k))

x(k−1)−x(k)

= x(k) − f(x(k))(x(k−1) − x(k))

f(x(k−1))− f(x(k))(1.10)

La expresion (1.10) es llamado Metodo de la secante, la cual necesita dos aproxi-

maciones iniciales x(0) y x(1), el punto obtenido x(2) es la interseccion del eje X y la

recta tangente que une (x(0), f(x(0))) y (x(1), f(x(1))) y se sigue asi sucesivamente. Este

metodo tiene la ventaja de conocer la derivada sin necesidad de derivar, sin embargo, la

convergencia no suele ser tan rapida.

El metodo de la Secante tiene una interpretacion geometrica analoga a la del metodo de

Newton. El valor x(k+1) representa la interseccion con el eje x de la recta que pasa por

los puntos (x(k−1), f(x(k−1))) y (x(k), f(x(k))), de ahı el nombre de metodo de la Secante.

Esto se ilustra en la Figura 1.3

a

y=f(x)

x x xX

Y

k+1k-1 k

Figura 1.3: Interpretacion geometrica del metodo de la secante

Ejemplo 1.3.1. Encuentre la raız positiva aplicando el metodo de la secante en la

ecuacion f(x) = ln x−x+2 = 0, asumiendo como valores iniciales a x(0) = 3, x(1) = 3, 15

con una tolerancia de 10−4.

Se concluye el proceso iterativo, siendo la raız buscada igual a α = 3,146193209, luego

de tres iteraciones.

Page 19: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 19

k x(k+1)

0 x(1) = 3, 15

1 x(2) = 3,146150255

2 x(3) = 3,146193209

Cuadro 1.5: Metodo de la secante para ln x− x+ 2

1.4. Iteracion de Punto fijo

Definamos ahora el concepto de punto fijo y mostremos resultados que nos permitan

decidir cuando este existe y si la iteracion de punto fijo converge o no.

Definicion 1.4.1. Sea α ∈ [a, b] y una funcion φ(x) : [a, b] → R. α es un punto fijo de

φ(x) si α = φ(α).

Ejemplo 1.4.1. Para la funcion f(x) = x−cos(x), tiene un punto fijo α = cos(α), pero

ademas es un cero de la funcion.

Ejemplo 1.4.2. La funcion f(x) = x2 − 2, para x ∈ [−2, 3], tiene puntos fijos en

x = −1 y en x = 2. (ver figura 1.4). Por otra parte, no toda funcion tiene puntos fijos.

Por ejemplo la funcion f(x) = ex. (ver figura 1.4 )

y= x - 2

y = x

2

X

Y

y=x

X

Y y= ex

Figura 1.4: La funcion φ(x) = x2 − 2 tiene dos puntos fijos (izquierda), mientras que la

funcion φ(x) = ex no tiene ninguno (derecha)

Definicion 1.4.2. Decimo que α es un punto fijo de orden m de φ si φ(x) esta dada

por φ(x) = α+ (x− α)mq(x) con q(x) 6= 0.

Page 20: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 20

Observe que si x = α, la definicion coincide con la anterior.

Definicion 1.4.3. La iteracion x(k+1) = φ(x(k)), k ≥ 0, se define como la iteracion

de punto fijo.

Ejemplo 1.4.3. El metodo de Newton (1.1) puede considerarse como un algoritmo

de punto fijo cuya funcion de iteracion es φ(x) = x − f(x)f ′(x)

. En adelante esta funcion

sera denotada por φN (donde N quiere decir Newton).

Se puede conjeturar que si φ es una funcion continua y el limite de la sucesion {x(k)}existe, entonces tal lımite es un punto fijo de φ. En la siguiente proposicion precisaremos

este resultado.

Proposicion 1.4.1. Supongamos que la funcion de iteracion en la definicion (1.4.3)

satisface las siguientes propiedades:

1. φ(x) ∈ [a, b] para todo x ∈ [a, b];

2. φ es diferenciable en [a, b];

3. ∃K < 1 tal que |φ′(x)| ≤ K para todo x ∈ [a, b].

Entonces φ tiene un unico punto fijo α ∈ [a, b] y la sucesion definida en la definicion

(1.4.3) converge a α, cualquiera que sea la eleccion del dato inicial x(0) en [a, b]. Ademas

lımk→∞

x(k+1) − α

x(k) − α= φ′(α) (1.11)

Demostracion. Supongamos que φ(x) = α+(x−α)q(x), entonces φ(α) = 0 y φ′(α) 6= 0,

por el desarrollo de Taylor de φ(x(k)) alrededor de α, tenemos que.

φ(x(k)) = α + (x(k) − α)φ′(α) +O((δ(k))2)

ahora por la definicion (1.4.3),

x(k+1) = α+ (x(k) − α)φ′(α) +O((δ(k))2)

o sea que

x(k+1) − α = (x(k) − α)φ′(α) +O((δ(k))2)

por lo tanto,

lımk→∞

x(k+1) − α

x(α) − α= φ′(α)

Page 21: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 21

De (1.11) se deduce que la convergencia es lineal.

El metodo de Newton no es el unico procedimiento iterativo que posee convergencia

cuadratica. En efecto, se tiene la siguiente propiedad general.

Proposicion 1.4.2. Supongamos que se satisfacen todas las hipotesis de la Proposicion

1.4.1. Supongamos ademas que φ es dos veces diferenciable y que φ′(α) = 0, φ′′(α) 6= 0.

Entonces las iteraciones de punto fijo en la definicion (1.4.3) convergen con orden 2 y

lımk→∞

x(k+1) − α

(x(k) − α)2=

1

2φ′′(x) (1.12)

Su demostracion es similar a la proposicion anterior.

1.4.1. Como terminar las iteraciones de punto fijo

En general, las iteraciones de punto fijo se terminan cuando el valor absoluto de la

diferencia entre dos iterantes consecutivos es menor que una tolerancia prescrita ǫ.

Puesto que α = φ(α) y x(k+1) = φ(x(k)), usando el teorema del valor medio (ver Teorema

??) hallamos α − x(k+1) = φ(α) − φ(x(k)) = φ′(ξ(k))(α − x(k)) con ξ(k) ∈ Iα,x(k), siendo

Iα,x(k) el intervalo con extremos α y x(k). Usando la identidad

α− x(k) = (α− x(k+1)) + (x(k+1) − x(k))

se sigue que

α− x(k) =1

1− φ′(ξ(k))(x(k+1) − x(k)) (1.13)

En consecuencia, si φ′(x) ≃ 0 en un entorno de α, la diferencia entre dos iterantes

consecutivos proporciona un estimador del error satisfactorio. Este es el caso para los

metodos de orden 2, incluyendo el metodo de Newton. Esta estimacion se hace menos

satisfactoria a medida que φ′ se aproxima a 1.

Ejemplo 1.4.4. Encuentre la raız real positiva de f(x) = ln x−x+2, usando el metodo

de punto fijo, con una tolerancia de 10−4 para la variable x.

Tomando en consideracion que la raız real positiva se encuentra entre 2 y 4, tal como se

ha analizado en el ejemplo 1.1.1, tomemos como valor inicial x(0) = 3.

Page 22: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 22

hacemos : x = ln x + 2, luego φ(x) = lnx + 2 , φ′(x) = 1x, aplicando la hipotesis de

la proposicion 1.4.1 tenemos. |φ′(3)| = 13= 0, 333 < 1, por lo tanto es convergente.

Aplicaremos el algoritmo de la definicion 1.4.3

k x(k+1) Error=|x(k+1) − x(k)|

0 x(1) = 3,0986

1 x(2) = 3,1309

2 x(3) = 3,141337866

3 x(4) = 3,144648781

4 x(5) = 3,145702209

5 x(6) = 3,146037143 3,34934× 10−4

6 x(7) = 3,146143611

7 x(8) = 3,146177452 3,384135× 10−5

Cuadro 1.6: Metodo de iteracion de punto fijo para ln x− x+ 2 en x(0) = 3

Por tanto, en la iteracion 7 se cumple el criterio de convergencia, en consecuencia la raız

buscada es x = 3,146177452

Page 23: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 23

Observacion 1.4.1. 1. Al despejas una funcion , hay que tener mucho cuidado,

puede que no cumpla la hipotesis de la proposicion 1.4.1. Si se continua el proced-

imiento iterativo, no se llega a obtener la solucion.

2. La funcion φ(x) = x2 − 1 tiene dos puntos fijos α± = (1±√5)/2, sin embargo no

satisface las hipotesis para ninguno porque |φ′(α±)| = |1±√5| > 1.

1.5. Aceleracion utilizando el metodo de Aitken

Hemos dicho que el metodo de punto fijo tiene convergencia lineal, pero hay un metodo

que se puede utilizar y converger cuadraticamente .

Alexander Aitken (1895-1967) descubrio un metodo para acelerar la convergencia de

otro metodo numerico. Basicamente consiste en generar una secuencia φ∆(x(k)) a partir

de otra φ(x(k)) que converge linealmente.

Supongamos que la secuencia φ(x(k)) fue obtenida por el metodo del punto fijo y ahora

encontraremos como se define φ∆(x(k)) .

Page 24: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 24

Sea x(k) = φ(x(k−1)), k ≥ 1. Si la sucesion {x(k)} converge linealmente a un punto fijo

α de φ, de (1.11), deducimos que, para una k dada debe existir un valor λ(a determinar)

tal que

φ(x(k))− α = λ(x(k) − α) (1.14)

de (1.14) tenemos que:

α =φ(x(k))− λx(k)

1− λ=

φ(x(k))− λx(k) + x(k) − x(k)

1− λ

o

α = x(k) + (φ(x(k))− x(k))/(1− λ) (1.15)

Ahora debemos calcular λ. Para ello, introducimos la sucesion

λ(k) =φ(φ(x(k)))− φ(x(k))

φ(x(k))− x(k)(1.16)

que cumple la siguiente propiedad:

Lema 1.5.1. Si la sucesion de elementos x(k+1) = φ(x(k)) converge a α,

entonces lımk→∞

λ(k) = φ′(λ).

Gracias al Lema 1.5.1 podemos concluir, para un k dado, que λ(k) puede consider-

arse como una aproximacion del valor desconocido λ introducido anteriormente. De este

modo, utilizamos (1.16) en (1.15) y definimos un nuevo x(k+1) como sigue:

x(k+1) = x(k) − (φ(x(k+1))− x(k))2

φ(φ(x(k)))− 2φ(x(k)) + x(k), k ≥ 0 (1.17)

Esta expresion se conoce como formula de extrapolacion de Aitken y, gracias a (1.17),

puede considerarse como una nueva iteracion de punto fijo para la funcion de iteracion

φ∆(x) =xφ(φ(x))− [φ(x)]2

φ(φ(x))− 2φ(x) + x

Page 25: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 25

Ejemplo 1.5.1. Calcular la raız simple α = 1 de la funcion f(x) = ex(x− 1), con una

tolerancia de 10−10, aplicando el metodo de Aitken.

Solucion. Primero encontraremos la funcion de iteracion.

ex(x−1) = 0, desarrolando y sumando a cada miembro x−1 tenemos: exx−ex+x−1 =

x−1, al factorizar obtenemos: (ex+1)(x−1) = x−1 y despejando x del primer miembro

resulta: x = 1 +x− 1

ex + 1=

ex + x

ex + 1= φ(x).

La funcion de iteracion encontrada cumple la condicion de convergencia del punto fijo :

φ(x)′ =1− x

ex + 1tal que |φ(1)′| = 0 < 1.

Para mayor comodidad supongamos que y(k+1) = φ∆(xk+1) = x(k+1)

k = 0

MPF: y(0) = x(0)0 = 2, x

(0)1 = φ(2) = 1,1192029, x

(0)2 = φ(x

(0)1 ) = 1,02934289154

Aitken: y(1) =x(0)0 φ(φ(x

(0)0 ))−[φ(x

(0)0 )]2

φ(φ(x(0)0 ))−2φ(x

(0)0 )+x

(0)0

= 1,01913370346

k = 1

MPF: y(1) = x(1)0 , x

(1)1 = φ(y(1)) = 1,005074185, x

(1)2 = φ(x

(1)1 ) = 1,0013596022

Aitken: y(2) =x(1)0 φ(φ(x

(1)0 ))−[φ(x

(1)0 )]2

φ(φ(x(1)0 ))−2φ(x

(1)0 )+x

(1)0

= 1,0000257973

k = 2

MPF: y(2) = x(2)0 , x

(2)1 = φ(y(2)) = 1,0000069378, x

(2)2 = φ(x

(2)1 ) = 1,000001865866

Aitken: y(3) =x(2)0 φ(φ(x

(2)0 ))−[φ(x

(2)0 )]2

φ(φ(x(2)0 ))−2φ(x

(2)0 )+x

(2)0

= 1,000000000048314

k = 3

MPF: y(3) = x(3)0 , x

(3)1 = φ(y(3)) = 1,000000000012994, x

(3)2 = (x

(3)1 ) = 1,000000000003495

Aitken: y(4) =x(3)0 φ(φ(x

(3)0 ))−[φ(x

(3)0 )]2

φ(φ(x(3)0 ))−2φ(x

(3)0 )+x

(3)0

= 1

Luego de 4 iteraciones obtenemos la raız antes mencionada.

Page 26: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 26

1.6. Polinomios algebraicos

Consideremos a un polinomio (f) de grado n ≥ 0 de la forma (??), ademas el espacio

de todos estos polinomios (??) se denota por el sımbolo Pn. Cuando n ≥ 2 y todos los

coeficientes ak son reales, si α ∈ C es una raız compleja de pn ∈ Pn, entonces α (el

conjugado de α) tambien es raız de pn. El teorema (??) motiva el empleo de metodos

numericos para calcular las raices de pn.

Para los metodos anteriormente vistos era importante un dato inicial o un intervalo

conveniente para la busqueda de la raız. En el caso de los polinomios, esto suele ser

posible sobre la base de los siguientes resultados.

Teorema 1.6.1. (Regla de los signos de Descartes) Denotemos

por V el numero de cambios de signo de los coeficientes {aj} y por k el

numero de raıces reales positivas de pn, cada una contada tantas veces

como indica su multiplicidad. Entonces k ≤ V y V − k es par.

Ejemplo 1.6.1. El polinomio p6(x) = x6 − 2x5 + 5x4 − 6x3 + 2x2 + 8x − 8 tiene los

ceros {±1,±2i, 1± i} y de este modo posee una raız real positiva (k = 1). En efecto, el

numero de cambios de signo V de sus coeficientes es 5 y por tanto k ≤ V y V − k = 4

es par.

.

Teorema 1.6.2. (Cauchy) Todos los ceros de pn se incluyen en el cırculo

Γ del plano complejo

Γ = {z ∈ C : |z| ≤ 1 + η}, donde η = max|ak/an|, 0 ≤ k ≤ n− 1 (1.18)

Page 27: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 27

1.6.1. Algoritmo de Horner

Este algoritmo permite calcular el polinomio y su derivada en un punto (z) de forma

muy sencilla. Realiza un procedimento llamdo metodo de deflacion. La ecuacion (??) es

equivalente a

pn(x) = a0 + x(a1 + x(a2 + . . .+ x(an−a + anx) . . .)) (1.19)

La expresion (1.19), tambien conocida como el algoritmo del producto anidado. El meto-

do de Horner evalua al polinomio pn rn un punto (z) usando el siguiente algoritmo de

division sintetica:

bn = an,

bk = ak + bk+1z, k = n− 1, n− 2, . . . , 0(1.20)

el siguiente polinomio con coeficientes que dependen del parametro z se llama polinomio

asociado a pn:

qn−1(x; z) = b1 + b2x+ . . .+ bnxn−1 =

n∑

k=1

bkxk−1 (1.21)

La relacion entre pn y qn−1 esta dada por pn(x) = (x − z)qn−1(x, z) + b0, ver teorema

(??), donde se tiene : b0 = pn(z).

El algoritmo anterior (1.20) se puede realizar mediante una tabla de la siguiente manera

z an an−1 an−2 . . . a1 a0

bnz bn−1z . . . b2z b1z

bn = bn−1 = bn−2 = . . . b1 = b0 =

an an−1 + bnz an−2 + bn−1z . . . a1 + b2z a0 + b1z

Si z es una raız de pn, entonces tenemos b0 = pn(z) = 0 y por consiguiente pn(x) =

(x − z)qn−1(x, z). En este caso la ecuacion algebraica qn−1(x, z) = 0 proporciona las

n− 1 raıces restantes de pn(x).Esta observacion sugiere adoptar el siguiente criterio de

deflacion para calcular todas las raıces de pn:

para m = n, n− 1, . . . , 1

1. Hallar una raız rm de pm con un metodo de aproximacion apropiado;

2. Calcular qm−1(x; rm) utilizando (1.20)-(1.21)(habiendo definido z = rm);

Page 28: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 28

3. Poner pm−1 = qm−1.

En el siguiente parrafo proponemos un metodo que utiliza el metodo de Newton para la

aproximacion de las raices.

Ejemplo 1.6.2. Tomando el ejemplo 1.6.1, si p6(x) = x6−2x5+5x4−6x3+2x2+8x−8

y z = −1 tenemos que p6(x) = (x+ 1)(x5 − 3x4 + 8x3 − 14x2 + 16x− 8) + 0 y p(1) = 0

1.6.2. Metodo de Newton-Horner

Como su nombre sugiere, el metodo de Newton-Horner implementa el procedimiento

de deflacion utilizando el metodo de Newton para calcular las raıces rm. El metodo de

Newton explota convenientemente el algoritmo de Horner (1.20).

Sea qn−1 el polinomio asociado (1.21) a pn. Tenemos:

p′n(x) = qn−1(x, z) + (x− z)q′n−1(x, z)

si x = z se tiene p′n(z) = qn−1(z, z).

Gracias a esta identidad, el metodo de Newton- Horner para la aproximacion de una

raız rj de pn toma la siguiente forma : dada una estimacion inicial r(0)j de la raız

r(k+1)j = r

(k)j −

pn(r(k)j )

p′n(r(k)j )

= r(k)j −

pn(r(k)j )

qn−1(r(k)j , r

(k)j )

(1.22)

Ahora utilizamos la tecnica de deflacion, explotando el hecho de que pn(x) = (x −rj)pn−1(x) Entonces procedemos a la aproximacion de un cero de pn−1 y ası sucesiva-

mente hasta que sean procesadas todas las raıces de pn.

Page 29: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

1. Ecuaciones no Lineales 29

Ejemplo 1.6.3. Determine una raız del polinomio: p(x) = 3x5 − 2x4 + x2 − 7x− 4

Solucion. Analizando el polinomio, existe una raız cercana a x = 2, consideremos

r(0) = 1,5 como la primera aproximacion. Efectuando la division se obtiene:

3 -2 0 1 -7 -4

1.5 4.5 3.75 5.625 9.9938 4.407

3 2.5 3.75 6.625 2.938 0.407

1.5 4.5 10.5 21.37 41.98

3 7 14.25 27.99 44.91

De donde r(1) = 1,5− 0,40744,91

= 1,491

r(2) = 1,4908

Page 30: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

Capıtulo 2

APLICACION MEDIANTE GUIS

En analisis numerico un algoritmo de busqueda de raıces es un metodo numerico o algo-

ritmo para encontrar las soluciones aproximadas de una ecuacion dada por la expresion

f(x) = 0 para una funcion matematica f dada. A la solucion x de la ecuacion se le llama

raız o cero de la funcion.

Este Capitulo trata sobre como encontrar raıces reales o complejas, aproximadas por

numeros de punto flotante, mediante la implementacion de Interfaces Graficas de Usuario

(GUI) en Matlab. Los metodos numericos de resolucion de ecuaciones no lineales suelen

ser metodos iterativos que producen una sucesion de valores aproximados de la solucion,

que se espera, que converja a la raız de la ecuacion. Estos metodos van calculando las

sucesivas aproximaciones en base a los anteriores, a partir de una o varias aproxima-

ciones iniciales.

No abordaremos la teorıa de cada metodo, dado que esta se encuentra en el Capitulo I,

aqui compararemos los resultados con la implementacion de GUI’s.

Page 31: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 31

2.1. Metodo de la Biseccion

1. Ejecutamos nuestro GUI. Biseccion, y escribimos la funcion ′log(x)−x+2′ eval-

uada en el intervalo [1; 4] con una tolerancia 10−5 y presionamos GRAFICAR.

2. Como podemos observar tenemos una raiz entre 1 y 4. Por ello continuaremos y

haremos clic en CALCULAR

Page 32: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 32

Si revisamos el Listado Aproximaciones tendremos los siguientes resultados de

cada Iteracion:

2.500000000000000

3.250000000000000

2.875000000000000

3.062500000000000

3.156250000000000

3.109375000000000

3.132812500000000

3.144531250000000

3.150390625000000

3.147460937500000

3.145996093750000

3.146728515625000

3.146362304687500

3.146179199218750

3.146270751953125

3.146224975585938

3.146202087402344

3.146190643310547

3.146196365356445

Cuya raiz aproximada es 3.146196365356445

Page 33: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 33

2.2. Metodo de Newton

1. Ejecutamos nuestro GUI. NEWTON RAP, y escribimos la funcion ′x3−4∗x2+

4 ∗ x′ evaluada con el punto inicial x0 = 1,5 y presionamos GRAFICAR.

2. Como podemos observar tenemos una raiz entre 1 y 3. Por ello continuaremos y

haremos clic en CALCULAR

Page 34: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 34

Si revisamos el Listado Aproximaciones tendremos los siguientes resultados de

cada Iteracion:

1.500000000000

1.800000000000

1.905882352941

1.954132539092

1.977338616437

1.988734610385

1.994383303992

1.997195612087

1.998598791190

1.999299641276

1.999649881983

1.999824956318

1.999912481989

Cuya raiz aproximada es 1.999912481989

Page 35: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 35

2.3. Metodo de la Secante

1. Ejecutamos nuestro GUI. SECANTE, y escribimos la funcion ′log(x)−x+2′ eval-

uada en el intervalo [1; 4] con una tolerancia 10−5 y presionamos GRAFICAR.

2. Como podemos observar tenemos una raiz entre 1 y 4. Por ello continuaremos y

haremos clic en CALCULAR

Page 36: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 36

Si revisamos el Listado Aproximaciones tendremos los siguientes resultados de

cada Iteracion:

Aproximaciones

1.500000000000

1.714285714286

1.733333333333

1.732044198895

1.732050805123

Cuya raiz aproximada es 1.732050805123

Page 37: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 37

2.4. Metodo del Punto Fijo

1. Ejecutamos nuestro GUI. PUNTO FIJO, y escribimos la funcion ′log(x)−x+2′

evaluada en el intervalo [1; 4] con una tolerancia 10−5 y presionamosGRAFICAR.

2. Como podemos observar tenemos una raiz entre 1 y 4. Por ello continuaremos y

haremos clic en CALCULAR

Page 38: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 38

Si revisamos el Listado Aproximaciones tendremos los siguientes resultados de

cada Iteracion:

3.098612288668

3.130954362450

3.141337866208

3.144648781218

3.145702208628

3.146037143013

3.146143610991

3.146177452352

3.146188208752

3.146191627625

Cuya raiz aproximada es 3.146191627625

Page 39: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 39

2.5. Metodo de la Regla Falsa

1. Ejecutamos nuestro GUI.REGLA FALSA, y escribimos la funcion ′log(x)−x+2′

evaluada en el intervalo [1; 4] con una tolerancia 10−5 y presionamosGRAFICAR.

2. Como podemos observar tenemos una raiz entre 1 y 4. Por ello continuaremos y

haremos clic en CALCULAR

Page 40: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 40

Si revisamos el Listado Aproximaciones tendremos los siguientes resultados de

cada Iteracion:

2.859075117368965

3.130335278557477

3.145381601692326

3.146151848695849

3.146191112138918

Cuya raiz aproximada es 3.146191112138918

Page 41: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 41

2.6. Metodo de Aitken

1. Ejecutamos nuestro GUI. AITKEN GUI, y escribimos la funcion ′(exp(x) +

x)/(exp(x) + 1)′ evaluada en el punto inicial 2 y presionamos GRAFICAR.

2. Continuaremos y haremos clic en CALCULAR

Page 42: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 42

Si revisamos el Listado Aproximaciones tendremos los siguientes resultados de

cada Iteracion:

1.119202922

1.029342892

1.007723387

1.002065432

1.000554642

1.000149106

1.000040096

1.000010783

Cuya raiz aproximada es 1.000010783

Page 43: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 43

2.7. Metodo de Newton-Horner

1. Ejecutamos nuestro GUI.NEWTON HORNER, y escribimos el polinomio ′x3−6x2 + 11x− 6′ representado como ′1 − 6 11 − 6′ evaluada en el punto inicial

x0 = 0 con una tolerancia 10−4 y presionamos GRAFICAR.

2. Posteriormente continuaremos y haremos clic en CALCULAR

Page 44: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 44

Si revisamos los ListadosRaices e Iteraciones tendremos los siguientes resultados

de cada Iteracion:

Raices

1.000000000

2.000000000

3.000000000

Iteraciones

6.000000000

6.000000000

2.000000000

Page 45: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 45

2.8. Comparacion de Metodos Iteractivos

2.8.1. Analizando una funcion polinomica

En esta seccion analizaremos la solucion del problema propuesto en la pag. 41 del Libro

Calculo Cientifico con Matlab y Octave cuyo enunciado es el siguiente:

Problema. Al principio de cada ano un banco deposita v euros en un fondo de inversion

y retira un capital de M euros al final del n − esimo ano. Queremos calcular el tipo

medio de interes anual r de esta inversion. Puesto que M esta relacionado con r con la

igualdad:

M = v

n∑

k=1

(1 + r)k = v · 1 + r

r· [(1 + r)n − 1],

Deducimos que r es raiz de la ecuacion algebrica.

f(r) = 0, donde f(r) = M − vn

k=1

(1 + r)k = v · 1 + r

r· [(1 + r)n − 1].

Solucion. Datos Iniciales: M=6000 euros , v=1000 euros , n=5 anos , r=x ,

Replanteando nuestra ecuacion tendremos:

f(x) = 6000− 1000 · (1 + x) · ((1 + x)5 − 1)

x

Page 46: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 46

Solucion 1. Utilizando el Metodo de la Biseccion.

Page 47: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 47

Solucion 2. Utilizando el Metodo de Newton.

Page 48: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 48

Solucion 3. Utilizando el Metodo del Punto Fijo.

Page 49: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 49

Solucion 4. Utilizando el Metodo de la Regla Falsa.

Page 50: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 50

Solucion 5. Utilizando el Metodo de Newton-Horner.

Page 51: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 51

Solucion 6. Utilizando el Metodo de la Secante.

Page 52: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 52

2.8.2. Analizando una funcion trascendental

En esta seccion analizaremos la solucion de una funcion trascendental, la cual posea

muchos ceros a lo largo de su grafica pero nos enfocaremos a encontrar su raiz entre los

puntos [1; 1,2].

Problema. Sea

f(x) =100

x2∗ sen(10

x) evaluada entre [1; 1,2]

Solucion. Al tratarse de una funcion trascendental solo podremos hacer uso de los

metodos de Biseccion, Regla Falsa, Newton, Secante y Punto fijo.

Page 53: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 53

Solucion 7. Utilizando el Metodo de la Biseccion.

Page 54: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 54

Solucion 8. Utilizando el Metodo de Newton.

Page 55: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 55

Solucion 9. Utilizando el Metodo del Punto Fijo.

Page 56: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 56

Solucion 10. Utilizando el Metodo de la Regla Falsa.

Page 57: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

2. Aplicacion mediante GUIs 57

Solucion 11. Utilizando el Metodo de la Secante.

Page 58: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

Capıtulo 3

CODIGO FUENTE DE LOS GUI’S

3.1. Metodo de la Biseccion

Listing 3.1: Boton Graficar

f unc t i on pushbutton1_Callback ( hObject , eventdata , handles )

f=get ( handles . edit1 , ' s t r i n g ' ) ;

f=inline ( f ) ;

axes ( handles . grafica )

h2=ezplot (f ) ;

s e t ( h2 , ' Color ' , 'b ' , 'LineWidth ' , 2 )

g r i d on

s e t ( handles . edit5 , ' s t r i n g ' , ' ' )

s e t ( handles . edit6 , ' s t r i n g ' , ' ' )

s e t ( handles . edit7 , ' s t r i n g ' , ' ' )

s e t ( handles . listbox1 , ' s t r i n g ' , ' ' )

s e t ( handles . pushbutton1 , ' enable ' , ' o f f ' )

s e t ( handles . pushbutton2 , ' enable ' , 'on ' )

Page 59: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

3. Codigo Fuente de los GUI’S 59

Listing 3.2: Boton Calcular

f unc t i on pushbutton2_Callback ( hObject , eventdata , handles )

c l c

f=get ( handles . edit1 , ' s t r i n g ' ) ;

fun=inline (f ) ;

a=str2double ( get ( handles . edit2 , ' s t r i n g ' ) ) ;

b=str2double ( get ( handles . edit3 , ' s t r i n g ' ) ) ;

n=str2double ( get ( handles . edit4 , ' s t r i n g ' ) ) ;

listado= ' Aproximaciones ' ;

h2=ezplot (f , [ a−0.5 b+0.5 ] ) ;

s e t ( h2 , ' Color ' , 'b ' , 'LineWidth ' , 2 )

hold on

g r i d on

r=(a+b ) /2 ;

fa=fun (a ) ;

fb=fun (b ) ;

fr=fun (r ) ;

u=[r r ] ; v=[0 fr ] ;

axes ( handles . grafica )

d3=pl o t (u , v , ' co l o r ' , ' r ' ) ;

c=−1;

i f fa∗fb< 0

whi le abs (b−a ) >= 10ˆ(−n )

r=(a+b ) /2 ;

fr=fun (r ) ;

r1=num2str ( fr , ' %12.9 f ' ) ;

r2=num2str (r , ' %12.9 f ' ) ;

s e t ( handles . edit5 , ' s t r i n g ' , r1 )

s e t ( handles . edit6 , ' s t r i n g ' , r2 )

d4=pl o t (r , 0 , 'om ' ) ;

listado=strvcat ( listado , num2str (r , ' %20.15 f ' ) ) ;

x=r ;

fr=eva l ( f ) ;

i f fa∗fr<0

b=r ;

e l s e

a=r ;

end

s e t (d3 , 'XData ' ,u , 'YData ' , v )

drawnow

s e t ( handles . listbox1 , 'Value ' , 1) ;

s e t ( handles . listbox1 , ' s t r i n g ' , listado )

s e t ( handles . edit7 , ' s t r i n g ' ,c )

c=c+1;

Page 60: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

3. Codigo Fuente de los GUI’S 60

end

s e t ( handles . pushbutton1 , ' enable ' , 'on ' )

s e t ( handles . pushbutton2 , ' enable ' , ' o f f ' )

e l s e

msgbox ( 'NO EXISTE RAIZ EN ESE INTERVALO ' , 'AVISO ' , 'warn ' ) ;

s e t ( handles . pushbutton1 , ' enable ' , 'on ' )

s e t ( handles . pushbutton2 , ' enable ' , ' o f f ' )

end

hold off

Listing 3.3: Boton Salir

opc=questdlg ( ' ¿Desea s a l i r de l programa? ' , 'SALIR ' , ' Si ' , 'No ' , 'No ' ) ;

i f strcmp ( opc , 'No ' )

r e turn ;

e l s e

msgbox ({ ' Gracias por usar nues t ro Sof tware ' , . . .

' Desar ro l l ado por : Miguel Angel Malhaber Montenegro ' , . . .

' Junior Lino Mera Carrasco ' , . . .

'Facebook : Matematicas . net ' } , 'Acerca de ' ) ;

end

c l e a r , c l c , c l o s e ( gcbf )

Page 61: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

3. Codigo Fuente de los GUI’S 61

3.2. Metodo de Newton Horner

Listing 3.4: Boton Graficar

f unc t i on pushbutton1_Callback ( hObject , eventdata , handles )

g l oba l PX

f=str2num ( get ( handles . edit1 , ' s t r i n g ' ) ) ;

axes ( handles . grafica )

PX=vpa ( poly2sym (f ) , 7 ) ;

h2=ezplot ( PX ) ;

s e t ( h2 , ' Color ' , 'b ' , 'LineWidth ' , 2 )

g r i d on

hold off

s e t ( handles . listbox1 , ' s t r i n g ' , ' ' )

s e t ( handles . listbox2 , ' s t r i n g ' , ' ' )

s e t ( handles . pushbutton2 , ' enable ' , 'on ' )

Listing 3.5: Boton Calcular

c l c

g l oba l PX

a=str2num ( get ( handles . edit1 , ' s t r i n g ' ) ) ;

x0=str2double ( get ( handles . edit2 , ' s t r i n g ' ) ) ;

m=str2double ( get ( handles . edit3 , ' s t r i n g ' ) ) ;

listado1= ' Raices ' ;

listado2= ' I t e r a c i o n e s ' ;

tol = 10ˆ(−m ) ; nmax = 1000;

n=length ( a )−1; r oo t s = ze r o s ( n , 1 ) ; iter = zer o s (n , 1 ) ;

f o r k = 1 : n

% I t e r a c i o n e s de Newton

niter = 0 ; x = x0 ; d i f f = tol + 1 ;

whi le niter <= nmax & d i f f >= tol

[ pz ,b ] = horner (a , x ) ;

[ dpz , b ] = horner (b , x ) ;

xnew = x − pz/dpz ; d i f f = abs ( xnew −x ) ;

niter = niter + 1 ;

x = xnew ;

V (k )=x ;

end

[ pz ,a ] = horner (a , x ) ;

r oo t s ( k ) = x ;

iter (k ) = niter ;

Page 62: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

3. Codigo Fuente de los GUI’S 62

d4=pl o t (x , 0 , 'om ' ) ;

hold on

listado1=strvcat ( listado1 , num2str (x , ' %12.9 f ' ) ) ;

s e t ( handles . listbox1 , 'Value ' , 1) ;

s e t ( handles . listbox1 , ' s t r i n g ' , listado1 )

listado2=strvcat ( listado2 , num2str ( niter , ' %12.9 f ' ) ) ;

s e t ( handles . listbox2 , 'Value ' , 1) ;

s e t ( handles . listbox2 , ' s t r i n g ' , listado2 )

end

axes ( handles . grafica )

s e t ( handles . pushbutton2 , ' enable ' , ' o f f ' )

a=min( V ) ;

b=max( V ) ;

h2=ezplot (PX , [ a−0.5 b+0.5 ] ) ;

s e t ( h2 , ' Color ' , ' r ' , 'LineWidth ' , 2 )

hold on

g r i d on

r e turn

Listing 3.6: Funcion Horner

f unc t i on [ y , b ] = horner (a , z )

%HORNER Algoritmo de Horner

%Y=HORNER(A, Z) c a l c u l a

%Y = A(1) ∗ZˆN + A(2) ∗Zˆ(N −1) + . . . + A(N) ∗Z + A(N+1)

% usando e l a l gor i tmo de Horner de l a

% d i v i s i o n s i n t e t i c a .

n = length (a )−1;

b = zer o s ( n+1 ,1) ;

b (1) = a (1) ;

f o r j=2:n+1

b (j ) = a ( j )+b (j −1)∗z ;

end

y = b ( n+1) ;

b = b ( 1 : end −1) ;

r e turn

Page 63: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

3. Codigo Fuente de los GUI’S 63

3.3. Metodo de Newton Raphson

Listing 3.7: Boton Graficar

f unc t i on pushbutton1_Callback ( hObject , eventdata , handles )

f=get ( handles . edit1 , ' s t r i n g ' ) ;

xo=str2double ( get ( handles . edit2 , ' s t r i n g ' ) ) ;

axes ( handles . grafica )

f=inline ( f ) ;

h2=ezplot (f ) ;

s e t ( h2 , ' Color ' , 'b ' , 'LineWidth ' , 2 )

g r i d on

hold off

s e t ( handles . edit5 , ' s t r i n g ' , ' ' )

s e t ( handles . edit6 , ' s t r i n g ' , ' ' )

s e t ( handles . edit8 , ' s t r i n g ' , ' ' )

s e t ( handles . listbox1 , ' s t r i n g ' , ' ' )

s e t ( handles . pushbutton1 , ' enable ' , ' o f f ' )

s e t ( handles . pushbutton2 , ' enable ' , 'on ' )

Listing 3.8: Boton Calcular

f unc t i on pushbutton2_Callback ( hObject , eventdata , handles )

c l c

f=get ( handles . edit1 , ' s t r i n g ' ) ;

xo=str2double ( get ( handles . edit2 , ' s t r i n g ' ) ) ;

n=str2double ( get ( handles . edit3 , ' s t r i n g ' ) ) ;

listado= ' Aproximaciones ' ;

f ;

df=d i f f (f ) ;

fun=inline (f ) ;

dfun=inline ( df ) ;

c l c

h2=ezplot (f , [ xo−1 xo+1]) ;

s e t ( h2 , ' Color ' , 'b ' , 'LineWidth ' , 2 )

hold on

g r i d on

x1=xo−fun ( xo ) /dfun ( xo ) ;

listado=strvcat ( listado , num2str ( xo , ' %20.12 f ' ) ) ;

listado=strvcat ( listado , num2str ( x1 , ' %20.12 f ' ) ) ;

c=2;

whi le abs ( x1−xo ) >= 10ˆ(−n )

Page 64: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

3. Codigo Fuente de los GUI’S 64

xo=x1 ;

x1=xo−fun ( xo ) /dfun ( xo ) ;

listado=strvcat ( listado , num2str ( x1 , ' %20.12 f ' ) ) ;

drawnow

d4=pl o t ( x1 , 0 , 'om ' ) ;

s e t ( handles . listbox1 , 'Value ' , 1) ;

s e t ( handles . listbox1 , ' s t r i n g ' , listado )

s e t ( handles . edit8 , ' s t r i n g ' ,c )

fr=num2str ( fun ( x1 ) , ' %20.12 f ' ) ;

r=num2str (x1 , ' %20.12 f ' ) ;

s e t ( handles . edit5 , ' s t r i n g ' , fr ) ;

s e t ( handles . edit6 , ' s t r i n g ' ,r ) ;

c=c+1;

end

s e t ( handles . pushbutton1 , ' enable ' , 'on ' )

s e t ( handles . pushbutton2 , ' enable ' , ' o f f ' )

hold off

Page 65: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

3. Codigo Fuente de los GUI’S 65

3.4. Metodo del Punto Fijo

Listing 3.9: Boton Graficar

f unc t i on pushbutton1_Callback ( hObject , eventdata , handles )

c l c

f=get ( handles . edit1 , ' s t r i n g ' ) ;

f=inline ( f ) ;

axes ( handles . grafica )

h2=ezplot (f ) ;

s e t ( h2 , ' Color ' , 'b ' , 'LineWidth ' , 2 )

g r i d on

hold off

s e t ( handles . edit5 , ' s t r i n g ' , ' ' )

s e t ( handles . edit6 , ' s t r i n g ' , ' ' )

s e t ( handles . edit7 , ' s t r i n g ' , ' ' )

s e t ( handles . listbox1 , ' s t r i n g ' , ' ' )

s e t ( handles . pushbutton1 , ' enable ' , ' o f f ' )

s e t ( handles . pushbutton2 , ' enable ' , 'on ' )

Listing 3.10: Boton Calcular

f unc t i on pushbutton2_Callback ( hObject , eventdata , handles )

g=get ( handles . edit1 , ' s t r i n g ' ) ;

xo=str2double ( get ( handles . edit2 , ' s t r i n g ' ) ) ;

n=str2double ( get ( handles . edit3 , ' s t r i n g ' ) ) ;

listado= ' Aproximaciones ' ;

h2=ezplot (g , [ xo−1 xo+1]) ;

s e t ( h2 , ' Color ' , 'b ' , 'LineWidth ' , 2 )

hold on

g r i d on

x=xo ;

gxo=eva l ( g ) ;

d3=pl o t (xo , 0 , 'om ' ) ;

h=gxo ;

c=−1;

whi l e ( abs (h ) >= 10ˆ(−n ) & c<1001)

x=xo ;

gxo=eva l ( g ) ;

h=gxo ;

xo=x+gxo ;

Page 66: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

3. Codigo Fuente de los GUI’S 66

fr=num2str ( gxo , ' %20.15 f ' ) ;

r=num2str (xo , ' %20.15 f ' ) ;

s e t ( handles . edit5 , ' s t r i n g ' , fr )

s e t ( handles . edit6 , ' s t r i n g ' ,r )

listado=strvcat ( listado , num2str ( xo , ' %20.15 f ' ) ) ;

d4=pl o t ( xo , 0 , 'om ' ) ;

drawnow

s e t ( handles . listbox1 , 'Value ' , 1) ;

s e t ( handles . listbox1 , ' s t r i n g ' , listado )

s e t ( handles . edit7 , ' s t r i n g ' ,c )

c=c+1;

end

s e t ( handles . pushbutton1 , ' enable ' , 'on ' )

s e t ( handles . pushbutton2 , ' enable ' , ' o f f ' )

i f c>1000

s e t ( handles . edit7 , ' s t r i n g ' , 'Mayor a 1000 ' )

e l s e

s e t ( handles . edit7 , ' s t r i n g ' , c )

end

hold off

Page 67: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

3. Codigo Fuente de los GUI’S 67

3.5. Metodo de la Regla Falsa

Listing 3.11: Boton Graficar

f unc t i on pushbutton1_Callback ( hObject , eventdata , handles )

f=get ( handles . edit1 , ' s t r i n g ' ) ;

f=inline ( f ) ;

axes ( handles . grafica )

h2=ezplot (f ) ;

s e t ( h2 , ' Color ' , 'b ' , 'LineWidth ' , 2 )

g r i d on

hold off

s e t ( handles . edit5 , ' s t r i n g ' , ' ' )

s e t ( handles . edit6 , ' s t r i n g ' , ' ' )

s e t ( handles . edit7 , ' s t r i n g ' , ' ' )

s e t ( handles . edit8 , ' s t r i n g ' , ' ' )

s e t ( handles . listbox1 , ' s t r i n g ' , ' ' )

s e t ( handles . pushbutton1 , ' enable ' , ' o f f ' )

s e t ( handles . pushbutton2 , ' enable ' , 'on ' )

Listing 3.12: Boton Calcular

f unc t i on pushbutton2_Callback ( hObject , eventdata , handles )

f=get ( handles . edit1 , ' s t r i n g ' ) ;

fun=inline (f ) ;

a=str2double ( get ( handles . edit2 , ' s t r i n g ' ) ) ;

b=str2double ( get ( handles . edit3 , ' s t r i n g ' ) ) ;

n=str2double ( get ( handles . edit4 , ' s t r i n g ' ) ) ;

listado= ' Aproximaciones ' ;

h2=ezplot (f , [ a−0.5 b+0.5 ] ) ;

s e t ( h2 , ' Color ' , 'b ' , 'LineWidth ' , 2 )

hold on

g r i d on

fa=fun (a ) ;

fb=fun (b ) ;

u=[a b ] ; v=[fa fb ] ;

d3=pl o t (u , v , ' co l o r ' , ' r ' ) ;

x=a−fa ∗(b−a ) /(fb−fa ) ;

g=eva l ( f ) ;

c=0;

whi le ( abs (g ) >= 10ˆ(−n ) & c<1001)

Page 68: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

3. Codigo Fuente de los GUI’S 68

x=a ;

fa=eva l ( f ) ;

x=b ;

fb=eva l ( f ) ;

r=a−fa ∗(b−a ) /( fb−fa ) ;

r1=num2str ( fa , ' %20.15 f ' ) ;

r2=num2str ( fb , ' %20.15 f ' ) ;

r3=num2str (r , ' %20.15 f ' ) ;

s e t ( handles . edit5 , ' s t r i n g ' , r1 )

s e t ( handles . edit6 , ' s t r i n g ' , r2 )

s e t ( handles . edit7 , ' s t r i n g ' , r3 )

u=[a b ] ; v=[fa fb ] ;

d4=pl o t (r , 0 , 'om ' ) ;

d3=pl o t (u , v , ' co l o r ' , ' r ' ) ;

drawnow

listado=strvcat ( listado , num2str (r , ' %20.15 f ' ) ) ;

x=r ;

fr=eva l ( f ) ;

i f fa∗fr<0

b=r ;

e l s e

a=r ;

end

g=eva l (f ) ;

s e t ( handles . listbox1 , 'Value ' , 1) ;

s e t ( handles . listbox1 , ' s t r i n g ' , listado )

s e t ( handles . edit8 , ' s t r i n g ' ,c )

c=c+1;

end

s e t ( handles . pushbutton1 , ' enable ' , 'on ' )

s e t ( handles . pushbutton2 , ' enable ' , ' o f f ' )

i f c>1000

s e t ( handles . edit8 , ' s t r i n g ' , 'Mayor a 1000 ' )

e l s e

s e t ( handles . edit8 , ' s t r i n g ' , c )

end

hold off

Page 69: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

3. Codigo Fuente de los GUI’S 69

3.6. Metodo de la Secante

Listing 3.13: Boton Graficar

f unc t i on pushbutton1_Callback ( hObject , eventdata , handles )

f=get ( handles . edit1 , ' s t r i n g ' ) ;

f=inline ( f ) ;

axes ( handles . grafica )

p l o t ( 0 , 0 )

h2=ezplot (f ) ;

s e t ( h2 , ' Color ' , 'b ' , 'LineWidth ' , 2 )

g r i d on

hold off

s e t ( handles . edit7 , ' s t r i n g ' , ' ' )

s e t ( handles . edit8 , ' s t r i n g ' , ' ' )

s e t ( handles . listbox1 , ' s t r i n g ' , ' ' )

s e t ( handles . pushbutton1 , ' enable ' , ' o f f ' )

s e t ( handles . pushbutton2 , ' enable ' , 'on ' )

Listing 3.14: Boton Calcular

f unc t i on pushbutton2_Callback ( hObject , eventdata , handles )

f=get ( handles . edit1 , ' s t r i n g ' ) ;

fun=inline (f ) ;

a=str2double ( get ( handles . edit2 , ' s t r i n g ' ) ) ;

b=str2double ( get ( handles . edit3 , ' s t r i n g ' ) ) ;

n=str2double ( get ( handles . edit4 , ' s t r i n g ' ) ) ;

listado= ' Aproximaciones ' ;

axes ( handles . grafica )

h2=ezplot (f , [ a−0.5 b+0.5 ] ) ;

s e t ( h2 , ' Color ' , 'b ' , 'LineWidth ' , 2 )

hold on

g r i d on

g=fun ( a ) ;

gg=fun (b ) ;

u=[a b ] ; v=[g gg ] ;

d3=pl o t (u , v , ' co l o r ' , ' r ' ) ;

c=0;

whi le abs (a−b ) >= 10ˆ(−n )

x=a ;

g=eva l (f ) ;

x=b ;

Page 70: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

3. Codigo Fuente de los GUI’S 70

gg=eva l ( f ) ;

xi=b−((gg ∗(a−b ) ) /(g−gg ) ) ;

a=b ;

b=xi ;

c=c+1;

h=eva l ( f ) ;

r3=num2str (xi , ' %20.12 f ' ) ;

s e t ( handles . edit7 , ' s t r i n g ' , r3 )

d4=pl o t ( xi , 0 , 'om ' ) ;

x=a ;

g=eva l (f ) ;

x=b ;

gg=eva l ( f ) ;

u=[a b ] ; v=[g gg ] ;

axes ( handles . grafica )

d3=pl o t (u , v , ' co l o r ' , ' r ' ) ;

drawnow

listado=strvcat ( listado , num2str ( r3 , ' %20.12 f ' ) ) ;

s e t ( handles . listbox1 , 'Value ' , 1) ;

s e t ( handles . edit8 , ' s t r i n g ' ,c )

s e t ( handles . listbox1 , ' s t r i n g ' , listado )

end

s e t ( handles . pushbutton1 , ' enable ' , 'on ' )

s e t ( handles . pushbutton2 , ' enable ' , ' o f f ' )

hold off

Page 71: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

3. Codigo Fuente de los GUI’S 71

3.7. Metodo de la Aceleracion de Atiken

Listing 3.15: Boton Graficar

f unc t i on pushbutton1_Callback ( hObject , eventdata , handles )

% hObject handle to pushbutton1 ( s ee GCBO)

% eventdata r es erved − to be de f ined in a f u tu r e ve r s i on o f MATLAB

% handles s t r u c tu r e with handles and user data ( s ee GUIDATA)

f=get ( handles . edit1 , ' s t r i n g ' ) ;

xo=str2double ( get ( handles . edit2 , ' s t r i n g ' ) ) ;

xmin=xo−1; xmax=xo+1;

x=xmin : 0 . 0 0 1 : xmax ;

y=eva l ( f ) ;

yc=min( y ) ; yd=max(y ) ;

axes ( handles . grafica )

p l o t (x , y , ' l i new idth ' , 2 )

ax i s ( [ xmin−0.5 xmax+0.5 yc−1 yd+1])

g r i d on

hold on

p l o t ( xmin , 0 , ' ∗b ' , xmax , 0 , ' ∗b ' ) ;

s e t ( handles . edit7 , ' s t r i n g ' , ' ' )

s e t ( handles . edit8 , ' s t r i n g ' , ' ' )

s e t ( handles . listbox1 , ' s t r i n g ' , ' ' )

s e t ( handles . pushbutton1 , ' enable ' , ' o f f ' )

s e t ( handles . pushbutton2 , ' enable ' , 'on ' )

Listing 3.16: Boton Calcular

f unc t i on pushbutton2_Callback ( hObject , eventdata , handles )

phi=get ( handles . edit1 , ' s t r i n g ' ) ;

x0=str2double ( get ( handles . edit2 , ' s t r i n g ' ) ) ;

n=str2double ( get ( handles . edit3 , ' s t r i n g ' ) ) ;

listado= ' Aproximaciones ' ;

tol = 10ˆ(−n ) ; nmax = 1000;

x = x0 ; d i f f = tol + 1 ; niter = 0 ;

whi le niter <= nmax & d i f f >= tol

gx = eva l ( phi , x ) ;

ggx = eva l ( phi , gx ) ;

xnew = (x∗ggx −gx ˆ2) /( ggx −2∗gx+x ) ;

d i f f = abs (x−xnew ) ;

x = xnew ;

Page 72: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

3. Codigo Fuente de los GUI’S 72

niter = niter + 1 ;

listado=strvcat ( listado , num2str ( xnew , ' %12.9 f ' ) ) ;

s e t ( handles . listbox1 , 'Value ' , 1) ;

s e t ( handles . listbox1 , ' s t r i n g ' , listado )

end

s e t ( handles . pushbutton1 , ' enable ' , 'on ' )

s e t ( handles . pushbutton2 , ' enable ' , ' o f f ' )

s e t ( handles . edit7 , ' s t r i n g ' , xnew )

s e t ( handles . edit8 , ' s t r i n g ' , niter )

i f niter >= nmax

s e t ( handles . pushbutton1 , ' enable ' , 'on ' )

s e t ( handles . pushbutton2 , ' enable ' , ' o f f ' )

s e t ( handles . edit7 , ' s t r i n g ' , ' Indeterminado ' )

s e t ( handles . edit8 , ' s t r i n g ' , ' I t e r a c i o n e s Mayores a 1000 ' )

end

return

hold off

Page 73: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

BIBLIOGRAFIA

[1] Buhmann, M. D. (2004). Radial Basis Functions: Theory and Implementations.

Cambridge University Press. United Kingdom.

[2] Aleman M.; Alvarez L.; Sanchez J. Analisis Numerico[en lınea]. [consulta 2012].

[3] Burden R.L; Faires J.D . (2001). Numerical Abalysis. Cengage Learning Latin

America.

[4] Cobos J. Apuntes de Calculo Numerico[en lınea].

http://ma1.eii.us.es/Material/Cal_Num_itis_Apuntes.pdf [consulta

2012]

[5] Comer E.(2009) Metodos Numericos Instituto Tecnologico de Tijuana.

[6] Mathews J.; Fink K.(2000) Metodos Numericos con MATLAB. Prentice Hall,

Madrid.

[7] Mejıa C.(2002) Invitacion al Analisis Numerico. Universidad Nacional de Colom-

bia, Medellın.

[8] Mora W.F.(2010) Introduccion a los Metodos Numericos. Instituto Tecnologico de

Costa Rica.

[9] Muller H. (1996) Una Introduccion al Analisi Numerico. Universidad Mayor de

San Simon. Cochabamba, Bolivia.

[10] Nakamura, S. (1992). Metodos Numericos Aplicados con Software. Pearson Edu-

cacion.

Page 74: Métodos Numéricos para el Calculo Científico con Matlab - TOMO 1

BIBLIOGRAFIA 74

[11] A. Quarteroni, F. Saleri. (2006). Calculo Cientifico con MATLAB y Octave.

Springer-Verlag, Italia, Milano.

[12] Velasquez J.(2007) Analisis Numerico. Ediciones Uninorte.

[13] Won Y. Yang , Wenwu Cao , Tae-Sang Chung , John Morris(2005) Applied Nu-

merical Methods Using MATLAB. John Wiley Sons.

[14] V. Dominguez. L. Rapun Matlab en cinco lecciones de Numerico[en lınea].

http://www.unavarra.es/personal/victor dominguez/ [consulta 2012]

[15] Carrasco V.(2011) Metodos Numericos Aplicados a la Ingenierıa Problemas en

Polymath y Matlab. MACRO

[16] Morales M.(2010) Matlab R2010a Metodos Numericos con Visualizacion Grafica.

MACRO

[17] Amancio R., Orbegoso G., Munoz G., Villalta R. (2010) Matlab 2010 - Software

para ciencia e ingenierıa. MACRO

[18] Moler, C. (2004) Numerical computing with Matlab. SIAM

[19] Pineiro G. APUNTES DE MATLAB [en lınea].

http://www.uhu.es/candido.pineiro/docencia/apuntesmatlab.pdf [consul-

ta 2012]

[20] J. Cooper A Matlab Companior for Multivariable Calculus

[21] Chavil M. Sistema experto en Maple Para el analisis de Curvas y superficies en

R3

[22] Gonzales M., Sanchez R. Graficas de curvas y superficies usando Matlab