Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Microsoft Word - 3.SISTEMAS ECUACIONES NO LINEALES PDF
Microsoft Word - 3.SISTEMAS ECUACIONES NO LINEALES PDF
TEMA 3.
RESOLUCION DE ECUACIONES
NO-LINEALES
1. Introducción
2. Nomenclatura
6. RESUMEN
7. Programación en Matlab®
Cálculo numérico en Ingeniería
2
Tema 3: Resolución de ecuaciones no lineales
1. Introducción
(1) f(x*)=0
Lim x i = x* (ENL.2)
i→∞
2. Nomenclatura
f vector de funciones (que se han de igualar a cero)
F vector de funciones (que han de ser iguales a x)
x vector de variables desconocidas
k (subíndice) número de la iteración
i (superíndice) ecuación particular del sistema
j (subíndice) variable particular respecto con la que se trabaja
ε error permitido o tolerancia
x* punto (vector) de partida
λ(A) valor propio de la matriz A
wk parámetro que determina la aceleración de algunos métodos
s
x punto donde se desarrolla la serie de Taylor en el método de Newton
J matriz jacobiana
H estimación de la matriz jacobiana
4
Tema 3: Resolución de ecuaciones no lineales
xi +1 = F ( xi ) i=1,2,3... (ENL.3)
x i − x i +1 = ~ε (ENL.4)
( )
F' x* < 1 (ENL.5)
( )
Solamente si F' x* < 1 el error se reducirá en cada iteración.
Cálculo numérico en Ingeniería
y
y= x
y= F(x)
x
Figura 1a. El método de iteración directa converge.
y= F(x)
y= x
x
Figura 1b. El método de iteración directa diverge.
6
Tema 3: Resolución de ecuaciones no lineales
F ( xi ) − F ( xi −1 )
y − F ( xi ) = ( x − xi ) (ENL.10)
xi − xi −1
F ( xi ) − F ( xi −1 )
xi + 1 − F ( xi ) = ( xi + 1 − xi ) (ENL.11)
xi − xi −1
F ( xi ) − F ( xi −1 )
Llamando si = , se obtiene
xi − xi −1
xi + 1 − F ( xi ) = s i ( xi + 1 − xi ) (ENL.12)
despejando xi +1 se llega a:
1 s
xi + 1 = F ( xi ) − i xi = wi F ( xi ) + (1 − wi ) xi (ENL.13)
1 − si 1 − si
1
donde wi = (ENL.14)
1 − si
F ( xi )
F ( xi −1 ) F ( xi +1 )
xi −1 xi xi +1
Figura 3. Método de Wegstein.
8
Tema 3: Resolución de ecuaciones no lineales
Lim x i = x*
i→∞
ε i +1
ri = ν
εi
ε
Lim i +1
i →∞ ν
εi
Cuando se usa este método las iteraciones tienen que comenzar desde dos
puntos iniciales x0 y x1 de tal manera que f(x0) y f(x1) tengan signos
opuestos ( f ( x 0 ) . f ( x1 ) < 0 ). Se toma entonces el punto medio del intervalo [xi-
1, xi]. La función de iteración de este método es:
xi +1 =( xi + xi −1 ) / 2 (ENL.15)
entre tres valores sucesivos de x: xi-1, xi, xi+1 debemos guardar para la
siguiente iteración solamente dos de ellos. El valor de xi+1 nos lo guardamos
siempre, de los otros dos nos quedaremos con aquel que cuyo valor de
función sea de diferente signo que el valor de la función para xi+1. De esta
forma la raíz de la ecuación se encontrará siempre acotada por xi+1 y xi.
Dado que el intervalo se hace cada vez más pequeño la longitud del intervalo
se puede usar como una estimación para calcular el error. Es fácil mostrar
que después de "i" iteraciones el tamaño del intervalo se habrá reducido en
un valor de:
10
Tema 3: Resolución de ecuaciones no lineales
L i = 2 −i L0 (ENL.16)
( x i +1 − x i ) 2
f ( x i +1 ) = f ( x i ) + ( x i +1 − x i ) f' ( x i ) + f'' ( x i ) + ....
2
(ENL.17)
dado que estamos buscando el valor de f(xi+1)=0, sustituyendo en la
ecuación 2.6 y despreciando los términos de segundo orden, obtenemos la
función de iteración de Newton-Raphson:
f( xi )
x i +1 = x i − i = 0,1,2 ,3..... (ENL.18)
f' ( x i )
Cálculo numérico en Ingeniería
Una observación general del método de Newton dice que :"El método de
Newton siempre converge si se parte de un valor x0 suficientemente cerca
del valor x*". Dado que no podemos conocer el valor de x* de antemano esta
observación parece de poco uso, pero se puede desarrollar una estrategia
adecuada basada en esta observación. Si no se dispone de un buen valor
inicial se puede utilizar el método de la bisección para conseguir un valor
suficientemente cerca de la solución y posteriormente terminar de resolver el
problema por el método de Newton.
~ε = f ( x )
i
f ( xi + εd ).f ( xi − εd ) < 0
12
Tema 3: Resolución de ecuaciones no lineales
f(x)
xo x1 x2
f(x2) x
f(x1)
f(xo)
f (b) − f (a ) 0 − f (b)
m= = (ENL.19)
b−a c−b
f (b) (b − a )
c= b− (ENL.20)
f (b) − f (a )
14
Tema 3: Resolución de ecuaciones no lineales
b3 b2 b1 bo
[ ] ] ] ]
a
y=f(x)
5. Métodos
Métodos de resolución de sistemas de ecuaciones no lineales.
x k +1 =F(x k ) (ENL.21)
x i k +1 =F i (x k ) (ENL.22)
x k +1 − x k < ε d (ENL.23)
Cálculo numérico en Ingeniería
T
∂ F
F ( xk ) = F ( xk −1) + ( xk − xk −1) + ... (ENL.24)
∂ x xk −1
∂F
Suponiendo que en las cercanías de la solución ≈ cte
∂ x
T
∂ F
xk +1 − xk = F ( xk ) − F ( xk +1 ) = ( xk − xk −1 ) (ENL.25)
∂ x
o bien
T
∂ F
xk +1 − xk = ∆ xk +1 = ∆xk (ENL.26)
∂ x
∂ F
∆ xk +1 ≤ ∆xk (ENL.27)
∂x
(
∆ xk +1 ≤ λ max )k ∆x0 (ENL.28)
16
Tema 3: Resolución de ecuaciones no lineales
ε
Log
∆x 0
niter ≥ (ENL.29)
(
Log λ max )
Por ejemplo:
∆x0 = 1 ε=0.0001
λmax n
0.1 4
0.5 14
0.99 916
n
∂ Fi (x * )
∑
j =1 ∂ xj
< 1 , para todas las funciones Fi que constituyen el sistema.
En el tema anterior vimos que cuando solo tenemos una ecuación, el criterio
de convergencia es que la derivada primera sea menor que la unidad en x*.
En el caso en que tengamos dos ecuaciones g1(x,y) y g2(x,y) debe cumplirse:
∂g1
(x*, y *) + ∂g1 (x*, y *) < 1
∂x ∂y
ambos (ENL.30)
∂g 2 ∂g 2
(x*, y *) + (x*, y *) < 1
∂x ∂y
x k +1 = w g ( x k ) + (1 − w) x k (ENL.31)
5.3. Método del valor propio dominante (DEM dominant eigenvalue method)
∆ xk
λ max ≈ (ENL.33)
∆ x k −1
Se puede demostrar que el valor óptimo del parámetro w viene dado por:
1
w= (ENL.34)
1− λ max
18
Tema 3: Resolución de ecuaciones no lineales
1
donde: wki = (ENL.36)
1 − s ki
F ( x ki ) − F ( x ki −1 )
s ki = (ENL.37)
x ki − x ki −1
T
∂ f ∂ 2 fi * s
) 12 ( x
T
* *
fi ( x ) ≡ 0 = fi ( x ) + i
∂x
(x *
− xs + *
− xs ) 2 ( )
x − x + ... i = 1...n
∂x
(ENL.38)
O bien
) 12 ( x
T
(
fi ( x* ) ≡ 0 = fi ( x* ) + ∇fi ( x s )T x* − x s + *
− xs ) ( )
∇ 2 fi ( x s ) x* − x s + ... i = 1...n
(ENL.39)
Cálculo numérico en Ingeniería
f (x s + p) ≡ 0 = f (x s ) + J (x s )p (ENL.40)
∂ fi
{ J }i, j = para la fila i y la columna j de dicha matriz. (ENL.41)
∂ xj
J (x s ) p = − f (x s ) (ENL.42)
x* = x s − J −1 (x s )f (x s ) (ENL.43)
J (x k ) p k = − f (x k ) donde p k = x k +1 − x k (ENL.44)
Algoritmo
20
Tema 3: Resolución de ecuaciones no lineales
0
1. Suponer un valor para el vector x. p.e. x . Hacer k = 0
2. Calcular f (x k ), J x k ( )
3. Resolver el sistema de ecuaciones lineales J (x k ) p k = − f (x k ) y
calcular x k +1 = x k + p k
x k − x*
≤K (ENL.45)
k −1 * 2
x −x
1
Donde x = xT x ( ) 2
es la norma Euclídea, que es una medida de la longitud
1. Las funciones f (x) y J (x) existen y están acotadas para todos los
valores de x.
2. El punto inicial x0, está suficientemente cerca de la solución.
f1 ( x) = 10 − e x = 0
(ENL.46)
f 2 ( x) = x t − 3 = 0
−e x 0
Donde la matriz Jacobiana será: J ( x) = (ENL.47)
t x
22
Tema 3: Resolución de ecuaciones no lineales
f1 = x1 − e x2 = 0
(ENL.48)
f 2 = x2 − 5 = 0
1 −e x2
Donde la matriz Jacobiana viene dada por: J ( x) =
0 1
x k +1 = x k + α p k (ENL.49)
Donde alfa es un parámetro que puede tomar valores entre cero y uno, y pk
es la dirección predicha por el método de Newton. Por supuesto, si α=1 se
recupera el paso completo de Newton. Es necesario desarrollar ahora una
estrategia que permita elegir automáticamente el valor de α de forma que
asegure que el método de Newton converge.
1
Comenzaremos definiendo una función objetivo f ( x)T f (x) y
φ ( x) =
2
buscaremos el mínimo de φ (x) en la dirección dada por el método de Newton
en función del parámetro alfa.
Cálculo numérico en Ingeniería
∂ fi
Si para simplificar la notación hacemos que: J k = J (x k ) ; {J ( x )}
k
ij
=
∂ xj
y
T
1
∇φ (x k )T = ∇ f (x k )T f (x k ) = f (x k )T ∇f (x k ) (ENL.51)
2
p k = − J (x k ) −1 f (x k ) (ENL.52)
∇φ (x k )p k = − f (x k )T J k J k f (x k ) = − f (x k )T f (x k ) = − 2φ (x k ) < 0
−1
( )
(ENL.53)
24
Tema 3: Resolución de ecuaciones no lineales
φ ( xk + pk )
φ ( xk )
Reduc
ció n de A
rmijo
Pe
nd
ie nte
ini
cia
l
φq (α )
αl αq αu α =1
Figura 6. Esquema de la búsqueda unidireccional de Armijo.
φ ( x k + α p k ) − φ ( x k ) ≤ −2 δ α φ ( x k ) (ENL.55)
φ (x k + α p k ) = a + b α + c α 2 = φq (α ) (ENL.56)
φq (0) = a = φ (x k ) (ENL.57)
∂φq (α ) ∂φ (xk + α p k )
= b = = −2φ (xk ) (ENL.58)
∂ α α =0 ∂ α α =0
Por lo tanto
φ (x k + p k ) − φ (x k ) + 2 α φ (x k )
c= (ENL.60)
α2
∂φq (α ) b
min : φq (α ) → = 0 = b + 2 c α → αq = − (ENL.61)
∂α 2c
26
Tema 3: Resolución de ecuaciones no lineales
φ (xk ) α 2
αq = (ENL.62)
φ (x k + α p k ) − φ (xk ) + 2 φ (x k ) α
a. Hacer α = 1
b. Evaluar φ (x k + α p k )
{ }
d. Hacer λ = max η , α q donde el valor de α q viene dado por la ecuación
(ENL.42) Hacer α = λ α y volver la punto b.
p md = − ∇φ (x k ) = − J (x k )T f (x k ) (ENL.63)
x k − x* < x k −1 − x* (ENL.64)
( J (x )
k T
)
J (x k ) + λ I p k = − J (x k )f (x k ) (ENL.65)
−1
(
p k = − J (x k )T J (x k ) ) J (x k )T f (x k ) = − J (x k ) −1 f (x k ) (ENL.66)
28
Tema 3: Resolución de ecuaciones no lineales
−1 J (x k )T f (x k )
p k = − ( λ I ) J (x k )T f (x k ) = − (ENL.67)
λ
Una desventaja del método de Levenverg y Marquardt es que cada vez que
se cambia el valor de λ es necesario resolver un nuevo sistema de
ecuaciones lineales, lo que puede ser numéricamente costoso, sobre todo si
se tiene en cuenta que es posible que sea necesario probar varios valores de
λ antes de conseguir una longitud de paso adecuada. En su lugar
consideraremos un algoritmo que utiliza una combinación entre los métodos
de Newton y de máximo descenso y elige la dirección entre ellos de forma
automática. Este método conocido como “dogleg” (a algunos autores la forma
de generar la dirección le recuerda la curva de la pata de un perro) fue
desarrollado por Powell. Y gráficamente se ilustra en la Figura 7:
Paso de Cauchy
(máximo descenso) γ grande
Paso de Newton
γ =0
p md = − JT f (x k ) (ENL.68)
1 T
min :
β 2
(
f (x k ) + β J p md ) ( f (x ) + β J p )
k md
(ENL.69)
2
f (x k )T JJ T f (x k ) p md
β= = (ENL.70)
f (x k )T J (JT J )J T f (x k ) J p md
2
p md
Para γ ≤ β p md ; p = γ
p md
Para γ ≥ p N ; p = p N
γ − β p md
donde η =
p N − β p md
30
Tema 3: Resolución de ecuaciones no lineales
x k +1 = x k − H k f ( x k ) (ENL.71)
∂f ∂f ∂f
( ) ( ) (
f i ( x k +1 ) = f i ( x k ) + i x1,k + 1 − x1,k + i x 2 ,k + 1 − x 2 ,k + ....+ i x n ,k + 1 − x n ,k
∂ x1 ∂ x2 ∂ xn
)
( ) (
Si suponemos conocidos los valores de x k , f ( x k ) y x k + 1 , f ( x k + 1 ) como un )
método de secante, entonces llamando
p k =x k +1 − x k = ∆xk ; y k =f (x k +1 ) − f (x k ) (ENL.72)
yk=Bk+1pk (ENL.73)
Bk+1=Bk+Dk (ENL.74)
Cálculo numérico en Ingeniería
sustituyendo obtenemos:
y k = (B k + Dk ) p k (ENL.75)
y k = B k p k + Dk p k (ENL.76)
Dkpk=yk-Bkpk (ENL.77)
( y k − B k p k ) zT
Dk = (ENL.78)
zTp k
( y k − B k p k ) zT
B k +1 = B k + (ENL.79)
zTp k
( H k y k − p k ) zTk H k
H k +1 = H k − (ENL.80)
zTk H k y k
( H k y k − p k )p Tk H k
H k +1 = H k − (ENL.81)
p Tk H k y k
32
Tema 3: Resolución de ecuaciones no lineales
primera aproximación del Jacobiano una matriz diagonal con los valores
correspondientes a la diagonal principal del Jacobiano.
H ( x,θ ) =θ f ( x) + (1 −θ ) g ( x) = 0 (ENL.82)
d H ( x,θ ) ∂ H d x ∂ H
= + (ENL.83)
dθ ∂ x d θ ∂θ
R 2 Tc5 2
a = 0.42747
RT a Pc
P= −
V − b V (V − b ) T R Tc
b = 0.08664 P
c
34
Tema 3: Resolución de ecuaciones no lineales
RT a
f (V ) = − −P = 0
V − b V (V − b ) T
V0 = 1 litro/mol no converge
f (V0 ) = − 28.38382209795442
RT a
H (V ,θ )= f (V ) −θ f (V0 ) = 0 = − − P −θ f (V0 )
V − b V (V − b ) T
d H (V ,θ ) ∂ H dV ∂ H
= + =0
dθ ∂ V dθ ∂ θ
∂H − RT a T (2 V + b )
= + = g (V )
[
∂ V (V − b )2 V (V + b ) T 2 ]
g (V )
dV
− f (V0 ) = 0
∂H dθ
= − f (V0 )
∂θ
Despejando:
d V f (V0 )
=
dθ g (V )
Cálculo numérico en Ingeniería
0.9
Volumen molar(litros/mol)
0.8
0.7
0.6 0.33354
0.5
0.4
6. RESUMEN
7. Programación en Matlab®
36
Tema 3: Resolución de ecuaciones no lineales
xi +1 = F ( xi ) i=1,2,3...
function x=sustsuc(F,x0,tol)
x1=feval(F,x0);
error=norm(x1-x0);
contador=0;
% Comprobamos la convergencia:
J=jacobiano(F,x0);
Jp=abs(J);
sumas=sum(Jp,2);% Vector columna con las sumas de las filas de Jp
A=(sumas>=1);
if sum(A)>=1
disp('A lo mejor no converge')
end
while error>=tol
x2=feval(F,x1);
error=norm(x2-x1);
x1=x2;
contador=contador+1;
end
x=x1;
contador
1 s
xi + 1 = F ( xi ) − i xi = wi F ( xi ) + (1 − wi ) xi
1 − si 1 − si
F ( xi ) − F ( xi −1 ) 1
si = ; wi =
xi − xi −1 1 − si
function x=wegstein(F,x0,tol)
x1=feval(F,x0);
error=abs(x1-x0);
contador=0;
while error>=tol
s=(feval(F,x1)-feval(F,x0))/(x1-x0);
w=1/(1-s);
x2=w*feval(F,x1)+(1-w)*x1;
error=abs(x2-x1);
x0=x1;
x1=x2;
contador=contador+1;
end
x=x1;
contador
function x=wegsteins(F,x0,tol)
x1=feval(F,x0);
Cálculo numérico en Ingeniería
error=norm(x1-x0);
contador=0;
while error>=tol
s=(feval(F,x1)-feval(F,x0))./(x1-x0);
w=1./(1-s);
x2=w.*feval(F,x1)+(1-w).*x1;
error=norm(x2-x1);
x0=x1;
x1=x2;
contador=contador+1;
end
x=x1;
contador
function F=ejemplo18(X)
x=X(1);
y=X(2);
z=X(3);
F(1)=(x^2-2*x+y^2-z+3)^(1/3);
F(2)=(0.5*z^2-x+y+z+5)^(1/3);
F(3)=(0.5*x*y+0.1*z^2);
F=F'; %Para que salga como columna
function J=jacobiano(F,x)
incx=x*(eps^0.5);
dincx=diag(incx);
Fx=feval(F,x);
J=[];
for i=1:length(x)
xincx=x+dincx(:,i); %Solo incrementamos la variable 'i'
Fxincx=feval(F,xincx);
Deriva=(Fxincx-Fx)/incx(i);
J=[J Deriva];
End
∂ f1 ∂ f1
∂x ∂y ∆ x k f1 ( x k , y k )
∂f ∆ y = −
2
∂ f2
k f2 ( x k ,y k )
∂x ∂ y x = x k
y= yk
x k + 1 = x k − J −k1 f ( x k )
function x=newton(F,x0,tol)
% La funcion F debe estar en la forma f(x)=0
J=jacobiano(F,x0);
x1=x0-inv(J)*feval(F,x0);
error=norm(x1-x0);
38
Tema 3: Resolución de ecuaciones no lineales
contador=0;
while error>=tol
J=jacobiano(F,x1);
x2=x1-inv(J)*feval(F,x1);
error=norm(x2-x1);
x1=x2;
contador=contador+1;
end
x=x1;
contador
function F=ejemplonewton(X)
x=X(1);
y=X(2);
F(1)=2*x+y^2+x*y-1;
F(2)=x^3+x^2+3*y-2;
F=F';
x k +1 = x k − H k f ( x k )
( H k y k − p k ) zTk H k
H k +1 = H k −
zTk H k y k
p k =x k +1 − x k = ∆xk ; y k =f (x k +1 ) − f (x k )
H0= Identidad o Jacobiano del punto inicial
function x=broyden(F,x0,tol)
% La funcion F debe estar en la forma f(x)=0
n=length(x0);% Numero de ecuaciones
H0=eye(n);
x1=x0-H0*feval(F,x0);
error=norm(x1-x0);
contador=0;
while error>=tol
p0=x1-x0;
y0=feval(F,x1)-feval(F,x0);
H1=H0-((H0*y0-p0)*p0'*H0)/(p0'*H0*y0);
x2=x1-H1*feval(F,x1);
error=norm(x2-x1);
x0=x1;
x1=x2;
contador=contador+1;
end
x=x1;
contador