No Lineales

También podría gustarte

Está en la página 1de 61

Solucin de ecuaciones no

lineales
Curso de Programacin numrica

Temario
Mtodos cerrados:
Mtodos grficos
Mtodo de biseccin
Mtodo de la posicin falsa
Mtodos abiertos
Iteracin simple de punto fijo

Mtodo de Newton-Raphson
Mtodo de la secante
Races de polinomios
Mtodo de Mller
Mtodo de Bairstow

Mtodos grficos
Los mtodos grficos consisten en graficar la funcin f(x) y
observar donde la funcin cruza el eje x.

Ejemplo 1
Encontrar la raz de:

f x

667.38
1 e 0.146843x 40 0
x

40
35

x
f(x)
4 34.11488938
8 17.65345264
12 6.066949963
16 -2.268754208
20 -8.400624408

30
25
20
15
10
5
0
-5 0
-10
-15

10

15

20

25

Ejemplo 2
Grafica de: f(x) = sen 10x + cos 3x
x
0.00
0.25
0.50
0.75
1.00
1.25
1.50
1.75
2.00
2.25
2.50
2.75
3.00
3.25
3.50
3.75
4.00
4.25
4.50
4.75
5.00

f(x)
1.00
1.33
-0.89
0.31
-1.53
-0.89
0.44
-0.46
1.87
0.41
0.21
0.31
-1.90
-0.06
-0.90
0.05
1.59
-0.01
1.45
-0.48
-1.02

2.50
2.00
1.50
1.00
0.50
0.00
-0.500.00
-1.00
-1.50
-2.00
-2.50

1.00

2.00

3.00

4.00

5.00

6.00

Ejemplo 2 (cont.)
Grafica de: f(x) = sen 10x + cos 3x
x

f(x)
4.20
4.21
4.22
4.23
4.24
4.25
4.26
4.27
4.28
4.29
4.30

0.08
0.05
0.02
0.00
-0.01
-0.01
-0.01
0.01
0.04
0.07
0.11

0.12
0.10
0.08
0.06
0.04
0.02
0.00
4.18
-0.02

4.20

4.22

4.24

4.26

4.28

4.30

4.32

Tarea
Utilice Excel para los siguientes problemas.

Determine las races reales de: f(x) = 0.5x2 + 2.5x + 4.5


Grficamente. Confirme utilizando la frmula cuadrtica.

Determine las races reales de:


Grficamente.

f(x) = 5x3 5x2 + 6x 2

Mtodo de la biseccin
Se trata de encontrar los ceros de
f(x) = 0
Donde f es una funcin continua en [a,b] con f(a) y f(b) con
signos diferentes.
y
f(a)
y = f(x)
bx
a

f(b)

Mtodo de la biseccin
De acuerdo con el teorema del valor medio, existe p [a,b] tal
que f(p) = 0.
El mtodo consiste en dividir a la mitad el intervalo y localizar
la mitad que contiene a p.
El procesos se repite hasta la lograr la precisin deseada.

Mtodo de la biseccin
Primera iteracin del algoritmo
y

Mitad del intervalo que


contiene a p

f(a)
y = f(x)
f(p1)
bx
a

f(b)
p
p1=(a+b)/2

Mtodo de la biseccin
Segunda iteracin del algoritmo
y

Mitad del intervalo que


contiene a p

y = f(x)
f(a)
bx
a =p1
f(p2)
p
p2=(a+b)/2

f(b)

Mtodo de la biseccin
Algoritmo biseccin
Entradas: extremos a,b; nmero de iteraciones ni; tolerancia tol

1. p=a; i=1; eps=1;


2. mientras f(p)0 y i ni eps>tol
2.1. pa = p;
2.2. p = (a+b)/2
2.3. si f(p)*f(a)>0 entonces a=p;
2.4. sino
2.5.
si f(p)*f(b)>0 entonces b=p;
2.6. i = i + 1; eps = |p-pa|/p;

Biseccin en C
double biseccion(double a, double b, double error, int ni){
double p,pa,eps;
int i;
p = a;
i = 1;
eps = 1;
while(f(p) != 0 && i<ni && eps > error){
pa = p;
p = (a+b)/2;
if(f(p)*f(a)>0)
a = p;
else
if(f(p)*f(b)>0)
b = p;
i++;
eps = fabs(p-pa)/p;
}
return p;
}

Ejemplo
Funcin de ejemplo

x 1 tan(x)
2

Funcin en C:
double f(x){

return sqrt(x*x + 1) - tan(x);


}

Tarea
Haga funciones en C para encontrar la solucin de las
siguientes ecuaciones utilizando la funcin biseccion():

1. ex x2 + 3x 2 = 0 para 0 <= x <= 1

2.

f x

667.38
1 e 0.146843x 40 0
x

Error en el mtodo de biseccin


Para el mtodo de biseccin se sabe que la raz esta dentro del intervalo, la
raz debe situarse dentro de Dx / 2, donde Dx = xb xa.
La solucin en este caso es igual al punto medio del intervalo
xr = (xb + xa) / 2

Deber expresarse por


xr = (xb + xa) / 2 Dx / 2
Error aproximado
a

xrnuevo xranterior
xrnuevo

sustituyedo

100%

nuevo
r

anterior
r

xb xa
100%
xb xa

x x
b a
2

xrnuevo

xb xa
2

Nmero de iteraciones
El error absoluto en la primera iteracin es:
Ea0 xb0 xa0 Dx 0

El error absoluto en la iteracin n-sima es:


Dx 0
E n
2
n
a

Si el error deseado es Ead,El nmero de iteraciones


ser:

Dx 0
log Dx 0 / Ead

n
log 2
log 2
Ead

Volumen del abrevadero


h
senb
r

r
h
L

area sector r 2a

r a

h
sen 1
2
2
r

area sector r 2a r 2 sen 1 h / r


2

area triangular 2

base altura
h r 2 h2
2

A area sector area triangular r 2 sen 1 h / r h r 2 h 2


2

V LA L r 2 sen 1 h / r h r 2 h 2

Tarea
17. Un abrevadero de longitud L tiene una seccin transversal
en forma de semicrculo con radio r (vase la figura) Cuando se
llena de agua hasta una distancia h de la parte superior, el
volumen V de agua es
V = L [ 0.5 r2 r2 arcsen(h/r) h(r2 h2)1/2 ]
Escriba un programa en C amigable para el usuario que lea los
datos de este problema y encuentre la profundidad h del
abrevadero. Utilice el mtodo de biseccin para encontrar la
solucin.
r
h
L

Resumen
Requiere que se conozca el intervalo en donde est la raz.
Los valores de la funcin en los extremos deben tener signos
diferentes.

Converge lentamente, a cada paso el intervalo se divide en 2.

Mtodo de falsa posicin


Este mtodo considera cual lmite del
intervalo est ms prximo a la raz.
f(xu)

De la figura
f xl
f xu

xr xl xr xu

Despejando
xr xu

f xu xl xu
f xl f xu

xl

xr
xu

f(xl)

f(xr)

Ejemplo en Excel
Encontrar la raz de:

f x

667.38
1 e 0.146843x 40 0
x

xl
xu
xr
f(xl)
f(xu)
f(xr)
12.0000000 16.0000000 14.9113077 6.0669500 -2.2687542 -0.2542775
12.0000000 14.9113077 14.7941976 6.0669500 -0.2542775 -0.0272572
12.0000000 14.7941976 14.7817001 6.0669500 -0.0272572 -0.0029076
12.0000000 14.7817001 14.7803676 6.0669500 -0.0029076 -0.0003100
12.0000000 14.7803676 14.7802255 6.0669500 -0.0003100 -0.0000330

Tarea
Encuentre la raz real de f(x) = (0.8 0.3x)/x, por el mtodo de
falsa posicin. Utilice valores iniciales de 1 y 3, calcule el error
porcentual verdadero en cada iteracin. Encuentre la raz
analiticamente.

Falsa posicin en C
if(fl*fr<0){
xu = xr;
fu = f(xu);
iu = 0;
double falsaPosicion(double xl,
il++;
double xu, double ee, int imax){
if(il>=2)
double error,fl,fu,fr,xr,xrOld;
fl/=2;
int iter=0,il=0,iu=0;
}
fl = f(xl);
else{
fu = f(xu);
xl = xr;
do{
fl = f(xl);
xrOld = xr;
il = 0;
xr = xu - fu*(xl-xu)/(fl-fu);
iu++;
fr = f(xr);
if(iu>=2)
iter++;
fu/=2;
if(xr!= 0)
else;
error=fabs((xr-xrOld)/xr*100);
error = 0;
}
}while(error>ee && iter<=imax);
return xr;
}

Iteracin de punto fijo


Un punto fijo de una funcin g(x) es un nmero p tal que g(p) =
p.
Dado un problema f(x) = 0, se puede definir una funcin g(x)
con un punto fijo en p de diferentes maneras. Por ejemplo g(x)
= x f(x).

Teorema
Si g C [a, b] y g(x) C [a, b] para toda x C [a, b], entonces g tiene un
punto fijo en [a, b].

Si adems g(x) existe en (a, b) y una constante positiva k<1 existe con
|g(x)| <= k, pata toda x (a, b),
Entonces el punto fijo en [a, b] es nico.

|g(x)<=1
y=x

b
p=g(p)

y = g(x)

|g(x)>1
y=x

b
p=g(p)

y = g(x)

a
a

Algoritmo de punto fijo


Obtener una solucin a p = g(p) dada un
aproxiamcin inicial p0.
ENTRADA aproximacin inicial p0; tolerancia TOL;
nmero mximo de iteraciones N0.
1. Tome i = 1.
2. Mientras i <= N0 hacer
3.
p = g(p0)
4.
Si |p p0| < TOL entonces
5.
Regresar p
6.
i = i +1
7.
p0 = p
8. Fin mientras
9. Imprime El procedimiento fracas despus de N0
iteraciones

Grfica del algoritmo de punto


fijo
y
y=x

p1= g(p0)

p3= g(p2)

y = g(x)

p2= g(p1)

p2= g(p1)
p3= g(p2)

y=x

p1= g(p0)

y = g(x)

p1 p3 p2 p0 x

p0

p1

p2 x

Casos de no convergencia
y

y=x

y=x

y = g(x)

y = g(x)
x

Ejemplo
Sea la funcin: x3 + 4x2 10 = 0 tiene una raz en [1, 2]
Puede despejarse en:
a. x = g1(x) = x x3 4x2 +10
b. x = g2(x) = (10 x3)
c. x = g3(x) = (10/(4 + x))
d. x = g4(x) = x (x3 + 4x2 10)/(3x2 + 8x)

Iteraciones de punto fijo


(a)

(b)

(c)

(d)

1 1.5
2 -0.875
3 6.732421875
4 -469.72001200
5 1.02754555E8
6 -1.084933870E24
7 1.277055591E72
8 -2.082712908E216
9 NaN
10
11
12
13
14
15
20
25
30

1.5
1.286953767
1.402540803
1.345458374
1.375170252
1.360094192
1.367846967
1.363887003
1.365916733
1.364878217
1.365410061
1.365137820
1.365277208
1.365205850
1.365242383
1.365229578
1.365230028
1.365230012

1.5
1.348399724
1.367376371
1.364957015
1.365264748
1.365225594
1.365230575
1.365229941
1.365230022
1.365230012
1.365230013
1.365230013

1.5
1.373333333
1.365262014
1.365230013
1.365230013

Funciones graficadas en MathLab

a)

c)

b)

d)

Teorema de punto fijo


Si g C [a, b] y g(x) C [a, b] para toda x C [a, b], adems supongamos
que existe g(x) en (a, b) y una constante positiva k<1 cuando
|g(x)| <= k, pata toda x (a, b),

Entonces, para cualquier punto p0 en [a, b] la sucesin definida por


pn = g(pn1), n >=1
Converge en el nico punto fijo p en [a, b].

Corolario
Si g satisface las hiptesis de teorema del punto fijo, las cotas
de error que supone utilizar pn para aproximar a p estn dadas
por

| pn p| <= kn max(p0 a, b p0)


Y por
| pn p| <= kn | p1 p0|/ (1 k), para toda n>=1

Anlisis del ejemplo


Caso (a)

Caso (b)

g1(x) = x x3 4x2 +10

g2(x) = (10 x3)

g1(x) = 1 3x2 8x

g2(x) = 3/4x2(10 x3)

g1(1) = 11, g1(2) = 28

g2(1) = 0.25, g1(2) = 2.1213

No se cumple |g1(x)| <1

No se cumple |g1(x)| <1

Caso (c)
g3(x) = (10/(4 + x))
g3(x) = ( 5/3.16)(4 + x)1.5

<= ( 5/3.16)(5)1.5 <= 0.15


Para toda x en [1, 2]

Caso (d)

g4(x) = x (x3 + 4x2 10)/(3x2 + 8x)


Se cumple |g4(x)| es an menor que
en el caso (c) para toda x en [1, 2]

Programa en Matlab
function y = PuntoFijo(f_name, p0, tol, ni)
%f_name - nombre de la funcion
%p0 - valor inicial de la raiz
%tol tolerancia
%ni nmero de iteraciones
i = 1;
while i<=ni
p = feval(f_name,p0);
if(abs(p0-p)<tol)
y = p;
break;
end
i = i + 1;
p0 = p;
end
fprintf('No se encontro solucion.');

Funcin en C
double PuntoFijo(double p0, double tol, int ni){
int i = 1;
double p;
while(i<=ni){
p = f(p0);
if(fabs((p0-p)/p)<tol)
return p;
i++;
p0 = p;
}
std::cout << "NO solucion en :" << ni << iteraciones.\n";
return p;
}

Tarea
Encontrar la raz ms grande de

f(x) = 2x3 11.7x2 + 17.7x 5


Resolver por el mtodo del punto fijo partiendo de x = 3.

Mtodo de Newton-Raphson
f(x)

La ecuacin de la recta
tangente es:
y f(xn) = f (xn)(x xn)
Cuando y = 0, x = xn+1 o sea
0 f(xn) = f (xn)(xn+1 xn)

Pendiente = f (xn)

f (xn)

f ( xn )
xn1 xn
f '( xn )

xn+1

xn

Algoritmo Newton
Para obtener una solucin a f(x) = 0 dada una
aproximacin p0.
ENTRADA aproximacin inicial p0; tolerancia tol;
nmero mximo de iteraciones N0.
1. i = 1
2. Mientras i<=N0 hacer
2.1. p = p0 f(p0)/f(p0)
2.2. Si |p p0|< tol entonces regrese p
2.3. i = i + 1
2.4. p0 = p
3. fracaso en encontrar la raz en N0 iteraciones

Ejemplo
f(x) = x cos(x)

f(x) = 1 + sen(x)

pn+1 = pn (pn cos(pn))/(1 + sen(pn))

Tomando p0 = 0, se obtiene
pn
0
1
0.7503639
0.7391128
0.7390851

f(pn)
-1
0.459698
0.0189
0.00005
3E-10

f(pn)
1
1.8414
1.6819
1.6736
1.6736

pn+1
1
0.7503639
0.7391128
0.7390851
0.7390851

Ejercicio
Encontrar la solucin de
x3 + 4x2 10 = 0
En el intervalo [1, 2] con el mtodo de Newton

Cdigo en C
double Newton(double x0, double ee, int ni){
int i = 0;
double x,fx,dfx;
while(i<ni){
fx = f(x0);
dfx = df(x0);
x = x0-fx/dfx;
if(fabs((x-x0)/x)<ee)
return x;
i++;
x0 = x;
}
std::cout << "No solucin en "<< i << " pasos\n";
return x;
}

Ejemplo: cuenta de ahorros


El valor acumulado de una cuenta de ahorros puede calcularse con la ecuacin de
anualidad vencida
A = P[(1 + i )n - 1 ] / i

En esta ecuacin A es el monto de la cuenta, P es la cantidad que se deposita


peridicamente e i es la tasa de inters por periodo para los n periodos de depsito. A
un ingeniero le gustara tener una cuenta de ahorros con un monto de $ 750,000
dlares al momento de retirarse dentro de 20 aos, y puede depositar $ 1,500 dlares
mensuales para lograr dicho objetivo. Cul es la mnima tasa de inters a que puede
invertirse ese dinero, suponiendo que es un inters compuesto mensual?
Escriba un programa en C para este problema, el programa deber pedir todos los
datos necesarios y utilizar el mtodo de Newton para calcular el inters a que debe
invertirse el dinero.

Solucin
Para estimar el valor inicial de i podemos desarrollar el
binomio (1 + i)n para aproximarlo a la segunda potencia. El
resultado es
i0

2 A nP
nn 1P

Se sugiere validar los datos de entrada. El capital a obtener


debe ser mayor que el depsito por el nmero de abonos, es
decir
A > nP

Ejemplos resuelto en Excel


A=
P=
n=

$750,000.00 i
f(i)
f'(i)
i n+1
$1,500.00 0.009065551
$4,784.89 2361961.89 0.007039738
240 0.007039738
1297.701361 1175049.297 0.005935357
0.005935357
255.8695592 730982.8805 0.005585323
A(calculado)= $750,000.00 0.005585323
20.97312565 612780.0414 0.005551096
0.005551096
0.18919948 601739.1171 0.005550782
0.005550782
1.58807E-05 601638.1029 0.005550782
0.005550782
-1.99179E-10 601638.0945 0.005550782
i=
0.56%

A=
P=
n=

$350,000.00 i
f(i)
f'(i)
i n+1
$20,000.00 0.166666667 15099.14998 450849.857 0.13317625
10 0.133176249 3212.297411 266179.386 0.12110808
0.121108082 346.4384394 209573.765 0.11945502
A(calculado)= $350,000.00 0.11945502 6.113559001 202191.641 0.11942478
0.119424783 0.002029206 202057.423 0.11942477
0.119424773 2.47383E-10 202057.379 0.11942477
0.119424773 6.54836E-11 202057.379 0.11942477
i=
11.94%

Mtodo alternativo para evaluar la


derivada (mtodo de la secante)
Es posible calcular la derivada en xn usando:
f xn h f xn
f ' xn
h

O utilizando
f xn f xn h
f ' xn
h

Algoritmo Newton2
Para obtener una solucin a f(x) = 0 dada una
aproximacin p0.
ENTRADA aproximacin inicial p0; tolerancia tol;
nmero mximo de iteraciones N0.
1. i = 1
2. h = 0.001
3. Mientras i<=N0 hacer
2.1. y = f(p0)
2.2. y_deriv =(f(p0+h)-y)/h
2.3. p = p0 y/y_deriv
2.4. Si |p p0|< tol entonces regrese p
2.5. i = i + 1
2.6. p0 = p
3. fracaso en encontrar la raz en N0 iteraciones

Cdigo en C
double Newton(double x0, double ee, int ni){
int i = 0;
double x,fx,dfx,h;
h = 0.0001;
while(i<ni){
fx = f(x0);
dfx = (f(x0+h)-fx)/h;
x = x0-fx/dfx;
if(fabs((x-x0)/x)<ee)
return x;
i++;
x0 = x;
}
std::cout << "No solucin en "<< i << " pasos\n";
return x;
}

Programa en Matlab
function x = Newt_n(f_name, xO)
% Iteracin de Newton sin grficos
x = xO; xb = x-999;
Calcula derivada con
n=0; del_x = 0.01;
incrementos
while abs(x-xb)>0.000001
n=n+1; xb=x ;
if n>300 break; end
y=feval(f_name, x) ;
y_driv=(feval(f_name, x+del_x) - y)/del_x;
x = xb - y/y_driv ;
fprintf(' n=%3.0f, x=%12.5e, y=%12.5e, ', n,x,y)
fprintf(' yd = %12.5e \n', y_driv)
end
fprintf('\n Respuesta final = %12.6e\n', x) ;

Raz cuadrada con Newton


Para extraer la raz cuadrada de un nmero se puede resolver la ecuacin
f(x) = x2 c = 0
La derivada es
f(x) = 2x
La frmula de recurrencia de Newton es
xn+1 = xn (xn2 c)/(2xn)
= xn/2 + c/(2xn)
= (xn + c/xn)/2
Ejemplo: raz cuadrada de 5 con x0 = 1.

xn
1
3.000000
2.333333
2.238095
2.236069

xn+1
3.000000
2.333333
2.238095
2.236069
2.236068

Desventajas
En algunos casos la convergencia es muy lenta, considere

f(x) = xn 1
Se obtiene la siguiente secuencia empezando en x = 0.5
iteracin
0
1
2
3
4

x
0.5
51.65
46.485
41.8365
37,65285

..
--

1.000000

Desventajas (cont.)
f(x)

f(x)

x1

x0
x2

x0

x2

x1

mnimo local

raz cerca de punto de inflexin


f(x)

f(x)

x1
x0 x

x0

x1

varias races
la iteracin en un mnimo

Ejemplo
Resolver utilizando Excel

sen x - e-x = 0 para 0<= x <= 1 y 3<= x <= 4 y 6<= x <= 7

Resultados
h=

0.1
xn

f(xn)

f'(xn)

xn+1

0.00000000

-1.00000000

1.94995999

0.51283104

0.51283104

-0.10815190

1.41522716

0.58925121

0.58925121

0.00099615

1.33011566

0.58850229

0.58850229

-0.00004224

1.33095756

0.58853402

0.58853402

0.00000178

1.33092188

0.58853269

h=
xn

0.01
f(xn)

f'(xn)

xn+1

0.00000000

-1.00000000

1.99499996

0.50125314

0.50125314

-0.12524617

1.47731614

0.58603267

0.58603267

-0.00347081

1.38411969

0.58854027

0.58854027

0.00001043

1.38133294

0.58853271

0.58853271

-0.00000004

1.38134134

0.58853274

Tarea #14
La carga en un circuito RLC serie esta dada por
1 R 2
qt q0e Rt /( 2 L ) cos
t
LC 2 L

suponga q/q0 = 0.01, t = 0.05 s, L = 5H y C = 10-6 F.


Encuentre el valor de la Resistencia R usando el mtodo de
Newton. Haga un programa en C para este problema.

Ejemplo
La carga en un circuito RLC paralelo la impedancia esta dada
por
2
1

1
1

wC

R2
wL

suponga R = 225, L = 0.5H y C = 0.610-6 F y Z = 75 Ohms.


Encuentre el valor de la frecuencia w usando el mtodo de
Newton.

Convergencia en el punto fijo


El algoritmo de punto fijo es de tipo lineal. Se puede demostrar
que el error verdadero en la iteracin i+1 es:
Et,i+1= g(x)Et,i
donde
Et,i = xr - xi

Convergencia en Newton Raphson


El algoritmo de Newton es de tipo cuadrtico. Se puede
demostrar que el error verdadero en la iteracin i+1 es:
Et,i+1= (- f (xr)/2f (xr))E2t,i
Esto significa que el nmero de decimales exactos se duplica
con cada iteracin.

Races mltiples
En el caso de que un polinomio tenga races mltiples, la
funcin tendr pendiente igual a cero cuando cruce el eje x.
Tales casos no pueden detectarse en el mtodo de biseccin
si la multiplicidad es par.
En el mtodo de Newton la derivada en la raz es cero.
Generalmente el valor de la funcin tiende a cero ms rpido
que la derivada y puede utilizarse el mtodo de Newton

Ejemplo
Polinomio:

n
0
1
2
3
4
5
6
7
8
9
10

f(x) = (x 3) (x 1) (x 1)

xn
0.50000000
0.72727273
0.85591767
0.92561694
0.96215341
0.98090260
0.99040636
0.99519176
0.99759300
0.99879578
0.99939771

f(xn)
-0.62500000
-0.16904583
-0.04451055
-0.01147723
-0.00291894
-0.00073639
-0.00018496
-0.00004635
-0.00001160
-0.00000290
-0.00000073

f'(xn)
2.75000000
1.31404959
0.63860849
0.31413077
0.15568346
0.07748373
0.03865069
0.01930234
0.00964539
0.00482125
0.00241026

xn+1
0.72727273
0.85591767
0.92561694
0.96215341
0.98090260
0.99040636
0.99519176
0.99759300
0.99879578
0.99939771
0.99969881

También podría gustarte