Sunteți pe pagina 1din 41

Solucin de

sistemas de
ecuaciones no
lineales
Los mtodos grficos
consisten en graficar la
funcin f(x) y observar
donde la funcin cruza el eje
x.
Encontrar la raz de:
( ) ( ) 0 40 1
38 . 667
146843 . 0
= =
x
e
x
x f
x f(x)
4 34.11488938
8 17.65345264
12 6.066949963
16 -2.268754208
20 -8.400624408
Diferentes metodos
Iterativos
Iteracin de Jacobi
Iteracin de Gauss-
Seidel
Successive Over
Relaxation (S.O.R)
SOR es un mtodo
usado para acelerar
la convergencia.
La iteracin de Gauss-
Seidel es un caso
especial del mtodo
SOR.
iteracin Gauss-
Seidel (GS)
n n nn n n
n n
n n
b x a x a x a
b x a x a x a
b x a x a x a
= + + +
= + + +
= + + +

2 2 1 1
2 2 2 22 1 21
1 1 2 12 1 11
Use lo ltimo
al actualizar
(
(
(
(
(

=
0
0
2
0
1
0
n
x
x
x
x

= + =
+ +
1
1 1
1 1
1
i
j
n
i j
k
j ij
k
j ij i
ii
k
i
x a x a b
a
x
) (
1
0
1
0
2 12 1
11
1
1 n n
x a x a b
a
x =
) (
1
1
1 1
1
2 2
1
1 1
1

=
n nn n n n
nn
n
x a x a x a b
a
x
) (
1
0
2
0
3 23
1
1 21 2
22
1
2 n n
x a x a x a b
a
x =
x
(k+1)
=Tx
(k)
+x iteracin
de Gauss-Seidel
Ax=b (D-L-U)x=b
1
1 1
1 1
1
i n
k k k
i i ij j ij j
j j i
ii
x b a x a x
a

+ +
= = +
(
=
(


k 1 k
Lx Ux
+ Dx
k+1
(D-L)x
k+1
=Ux
k
+b
x
k+1
=(D-L)
-1
Ux
k
+(D-L)
-1
b
T
gs
=(D-L)
-1
U
c
gs
=(D-L)
-1
b
teracin de Gauss-Seidel
converge ms
rpidamente que la
iteracin de Jacobi
desde que este usa la
ltima actualizacin.
Pero existen algunos
casos que la iteracin de
Jacobi converge pero
Gauss-Seidel no.
El mtodo de sobre
relajacin sucesiva es
usada para acelerar la
convergencia del
mtodo de Gauss-Seidel.
Iteracin GS converge
para cualquier vector
inicial si A es una matriz
diagonal estrictamente
dominante
Iteracin GS converge
para cualquier vector
inicial si A es una matriz
simtrica y definida
positiva La matriz A es
definida positiva si
x
T
Ax>0 para cualquier
vector x no nulo.
9
(
(
(

=
(
(
(

(
(
(

15
21
7
5 1 2
1 8 4
1 1 4
3
2
1
x
x
x
(
(
(

=
0
0
0
0
x
5
2 15
8
4 21
4
7
1
2
1
1
1
3
0
3
1
1 1
2
0
3
0
2 1
1
x x
x
x x
x
x x
x
+
=
+ +
=
+
=
0 . 3
5
5 . 3 75 . 1 2 15
5 . 3
8
75 . 1 4 21
75 . 1
4
7
=
+
=
=
+
=
= =
7395 . 26
2
0
= Ax b
0414 . 3
2
1
= Ax b
Matriz Diagonal estrictamente dominante
1
2
10.0452 b Ax =
teracin de
Jacobi
10
5
2 15
8
4 21
4
7
2
2
2
1
2
3
1
3
2
1 2
2
1
3
1
2 2
1
x x
x
x x
x
x x
x
+
=
+ +
=
+
=
9625 . 2
5
9375 . 3 875 . 1 2 15
9375 . 3
8
3 875 . 1 4 21
875 . 1
4
3 5 . 3 7
=
+
=
=
+ +
=
=
+
=
4765 . 0
2
2
= Ax b
7413 . 6
2
2
= Ax b
Iteracin de Jacobi
Cuando ambos mtodos de Jacobi y
Gauss-Seidel convergen, Gauss-Seidel
converge ms rpido.
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).

Si g e C [a, b] y g(x) e C [a, b] para toda x e 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 e (a, b),
Entonces el punto fijo en [a, b] es nico.
y = g(x)
y
a
b
a
b
p
p=g(p)
x
y = x
y = g(x)
y
a
b
a
b
p
p=g(p)
x
y = x
|g(x)>1 |g(x)<=1
Obtener una solucin a p =
g(p) dada un aproxiamcin
inicial p
0
.
ENTRADA aproximacin inicial
p
0
; tolerancia TOL; nmero
mximo de iteraciones N
0
.
1. Tome i = 1.
2. Mientras i <= N
0
hacer
3. p = g(p
0
)
4. Si |p p
0
| < TOL
entonces
5. Regresar p
6. i = i +1
7. p
0
= p
8. Fin mientras
9. Imprime El procedimiento
fracas despus de N
0

iteraciones
y = g(x)
y
x
y = x
p
0
p
1
= g(p
0
)
p
3
p
2
p
1
p
2
= g(p
1
)
p
3
= g(p
2
)
y = g(x)
y
x
y = x
p
0
p
1
= g(p
0
)
p
2
p
1
p
2
= g(p
1
)
p
3
= g(p
2
)
y = g(x)
y
x
y = x
y = g(x)
y
x
y = x
Sea la funcin: x
3
+ 4x
2

10 = 0 tiene una raz en [1,
2]
Puede despejarse en:
a. x = g
1
(x) = x x
3
4x
2
+10
b. x = g
2
(x) = (10 x
3
)

c. x = g
3
(x) = (10/(4 + x))


d. x = g
4
(x) = x (x
3
+ 4x
2

10)/(3x
2
+ 8x)
(b)
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
(c)
1.5
1.348399724
1.367376371
1.364957015
1.365264748
1.365225594
1.365230575
1.365229941
1.365230022
1.365230012
1.365230013
1.365230013

(a)
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
(d)
1.5
1.373333333
1.365262014
1.365230013
1.365230013
Funciones graficadas en MathLab
a) b)
c) d)
Si g e C [a, b] y g(x) e C [a, b] para
toda x e 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 e (a, b),
Entonces, para cualquier punto p
0
en
[a, b] la sucesin definida por
p
n
= g(p
n1
), n >=1
Converge en el nico punto fijo p en
[a, b].
Si g satisface las hiptesis de
teorema del punto fijo, las
cotas de error que supone
utilizar p
n
para aproximar a p
estn dadas por
| p
n
p| <= k
n
max(p
0
a, b p
0
)
Y por
| p
n
p| <= k
n
| p
1
p
0
|/ (1 k)
, para toda n>=1

Caso (a)
g
1
(x) = x x
3
4x
2
+10
g
1
(x) = 1 3x
2
8x
g
1
(1) = 11, g
1
(2) = 28
No se cumple |g
1
(x)| <1
Caso (b)
g
2
(x) = (10 x
3
)


g
2
(x) = 3/4x
2
(10 x
3
)


g
2
(1) = 0.25, g
1
(2) = 2.1213
No se cumple |g
1
(x)| <1
Caso (c)
g
3
(x) = (10/(4 + x))


g
3
(x) = ( 5/3.16)(4 + x)
1.5

<= ( 5/3.16)(5)
1.5
<= 0.15
Para toda x en [1, 2]
Caso (d)
g
4
(x) = x (x
3
+ 4x
2
10)/(3x
2
+ 8x)
Se cumple |g
4
(x)| es an menor que
en el caso (c) para toda x en [1, 2]
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.');
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;
}
f (x
n
)
Pendiente = f (x
n
)
x
n
x
n+1

La ecuacin de la recta
tangente es:
y f(x
n
) = f (x
n
)(x x
n
)
Cuando y = 0, x = x
n+1
o sea
0 f(x
n
) = f (x
n
)(x
n+1
x
n
)
o
x x
f x
f x
n n
n
n
+
=
1
( )
' ( )
f(x)
Para obtener una solucin a
f(x) = 0 dada una
aproximacin p
0
.
ENTRADA aproximacin inicial
p
0
; tolerancia tol; nmero
mximo de iteraciones N
0
.
1. i = 1
2. Mientras i<=N
0
hacer
2.1. p = p
0

f(p
0
)/f(p
0
)
2.2. Si |p p
0
|< tol
entonces regrese p
2.3. i = i + 1
2.4. p
0
= p
3. fracaso en encontrar la
raz en N
0
iteraciones
f(x) = x cos(x) f(x) = 1 + sen(x)
Tomando p
0
= 0, se obtiene
p
n
f(p
n
) f(p
n
) p
n+1

0 -1 1 1
1 0.459698 1.8414 0.7503639
0.7503639 0.0189 1.6819 0.7391128
0.7391128 0.00005 1.6736 0.7390851
0.7390851 3E-10 1.6736 0.7390851
p
n+1
= p
n
(p
n
cos(p
n
))/(1 + sen(p
n
))
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;
}
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.
Para estimar el valor inicial de i podemos desarrollar el
binomio (1 + i)
n
para aproximarlo a la segunda potencia. El
resultado es
( )
( )P n n
nP A
i
1
2
0

=
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

Es posible calcular la derivada en x
n
usando:
( )
( ) ( )
h
x f h x f
x f
n n
n
+
= '
O utilizando
( )
( ) ( )
h
h x f x f
x f
n n
n

= '
Para obtener una solucin a f(x) = 0 dada una
aproximacin p
0
.
ENTRADA aproximacin inicial p
0
; tolerancia tol;
nmero mximo de iteraciones N
0
.
1. i = 1
2. h = 0.001
3. Mientras i<=N
0
hacer
2.1. y = f(p
0
)
2.2. y_deriv =(f(p
0
+h)-y)/h
2.3. p = p
0
y/y_deriv
2.4. Si |p p
0
|< tol entonces regrese p
2.5. i = i + 1
2.6. p
0
= p
3. fracaso en encontrar la raz en N
0
iteraciones
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;
}
function x = Newt_n(f_name, xO)
% Iteracin de Newton sin grficos
x = xO; xb = x-999;
n=0; del_x = 0.01;
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) ;
Calcula derivada con
incrementos
Para extraer la raz cuadrada de un nmero se puede resolver la ecuacin
f(x) = x
2
c = 0
La derivada es
f (x) = 2x
La frmula de recurrencia de Newton es
x
n+1
= x
n
(x
n
2
c)/(2x
n
)
= x
n
/2 + c/(2x
n
)
= (x
n
+ c/x
n
)/2
Ejemplo: raz cuadrada de 5 con x
0
= 1.
xn xn+1
1 3.000000
3.000000 2.333333
2.333333 2.238095
2.238095 2.236069
2.236069 2.236068
En algunos casos la convergencia es muy lenta, considere
f(x) = x
n
1
Se obtiene la siguiente secuencia empezando en x = 0.5
iteracin x
0 0.5
1 51.65
2 46.485
3 41.8365
4 37,65285
..
-- 1.000000
x
0
x
1
x
2
x

f(x)

x
0
x
1
x
2
x

f(x)

x
0
x
1
x

f(x)

raz cerca de punto de inflexin
mnimo local
varias races
x

f(x)

la iteracin en un mnimo
x
0
x
1
El algoritmo de punto fijo
es de tipo lineal. Se puede
demostrar que el error
verdadero en la iteracin
i+1 es:
E
t,i+1
=
g()E
t,i

donde
E
t,i
=
x
r
- x
i
El algoritmo de Newton es de tipo cuadrtico. Se puede
demostrar que el error verdadero en la iteracin i+1 es:
E
t,i+1
= (- f (x
r
)/2f (x
r
))E
2
t,i

Esto significa que el nmero de decimales exactos se duplica
con cada iteracin.
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
n xn f(xn) f'(xn) xn+1
0 0.50000000 -0.62500000 2.75000000 0.72727273
1 0.72727273 -0.16904583 1.31404959 0.85591767
2 0.85591767 -0.04451055 0.63860849 0.92561694
3 0.92561694 -0.01147723 0.31413077 0.96215341
4 0.96215341 -0.00291894 0.15568346 0.98090260
5 0.98090260 -0.00073639 0.07748373 0.99040636
6 0.99040636 -0.00018496 0.03865069 0.99519176
7 0.99519176 -0.00004635 0.01930234 0.99759300
8 0.99759300 -0.00001160 0.00964539 0.99879578
9 0.99879578 -0.00000290 0.00482125 0.99939771
10 0.99939771 -0.00000073 0.00241026 0.99969881
Polinomio: f(x) = (x 3) (x 1) (x 1)

S-ar putea să vă placă și