Anúncio
7.metodo de newton2
7.metodo de newton2
7.metodo de newton2
7.metodo de newton2
Anúncio
7.metodo de newton2
7.metodo de newton2
7.metodo de newton2
7.metodo de newton2
Próximos SlideShares
6.metodo de newton6.metodo de newton
Carregando em ... 3
1 de 8
Anúncio

Mais conteúdo relacionado

Anúncio
Anúncio

7.metodo de newton2

  1. 48 3.5 Raíces reales de sistemas de ecuaciones no-lineales En general este es un problema difícil, por lo que conviene intentar reducir el número de ecuaciones y en caso de llegar a una ecuación, poder aplicar alguno de los métodos conocidos. Si no es posible reducir el sistema, entonces se intenta resolverlo con métodos especiales para sistemas de ecuaciones no-lineales. Debido a que el estudio de la convergencia de estos métodos es complicado, se prefiere utilizar algún método eficiente, de tal manera que numéricamente pueda determinarse la convergencia o divergencia con los resultados obtenidos. Una buena estrategia consiste en extender el método de Newton, cuya convergencia es de segundo orden, al caso de sistemas de ecuaciones no lineales. En esta sección se describe la fórmula para resolver un sistema de n ecuaciones no lineales y se la aplica a la solución de un sistema de dos ecuaciones. Al final de este capítulo se propone una demostración más formal de esta fórmula. 3.5.1 Fórmula iterativa de segundo orden para calcular raíces reales de sistemas de ecuaciones no-lineales Sean F: f1, f2, …, fn sistema de ecuaciones no lineales con variables X: x1, x2, …, xn. Se requiere calcular un vector real que satisfaga al sistema F En el caso de que F contenga una sola ecuación f con una variable x, la conocida fórmula iterativa de Newton puede escribirse de la siguiente manera: df (k) −1 (k) x (k + 1) x (k) − ( = ) f , k=0, 1, 2, … (iteraciones) dx Si F contiene n ecuaciones, la fórmula se puede extender, siempre que las derivadas existan: ∂F(k) −1 (k) X (k + 1) = X (k) − ( ) F = (k) )−1F(k) X (k) − (J ∂X En donde:  ∂f1(k) ∂f1(k) ∂f1(k)   ...  x (k + 1)  x  (k) f  (k)  ∂x 1 ∂x 2 ∂x n   1   1    1  ∂f (k) ∂f2(k) ∂f2(k)  x(k + 1) (k) (k)  , X (k) =  x  , F(k) =  f  , J(k)  2 ...  X (k + 1) = 2 2 2 =  ∂x 1 ∂x 2 ∂x n   ...   ...   ...   (k + 1)   (k)   (k)   ... ... ... ...   xn     xn     fn       ∂fn(k) ∂fn (k) ∂fn  (k)  ...   ∂x 1 ∂x 2 ∂x n  J es la matriz jacobiana Esta ecuación de recurrencia se puede usar iterativamente con k=0, 1, 2, … partiendo de un vector inicial X (0) generando vectores de aproximación: X (1) , X (2) , X (3) , … 3.5.2 Convergencia del método de Newton para sistemas de ecuaciones no lineales En forma general la convergencia de este método para sistemas no lineales requiere que: a) f1, f2, … fn así como sus derivadas sean continuas en la región de aplicación. b) El determinante del Jacobiano no se anule en esta región c) El valor inicial y los valores calculados pertenezcan a esta región, la cual incluye a la raíz que se intenta calcular
  2. 49 3.5.3 Algoritmo del método de Newton para sistemas de ecuaciones no lineales Dado un sistema de ecuaciones F = 0, sea J su matriz Jacobiana. El siguiente algoritmo genera una sucesión de vectores que se espera tienda al vector solución: (0) 1) Elegir el vector inicial X 2) Generar la sucesión de vectores con la fórmula iterativa: X (k + 1) X (k) − (J(k) )−1F(k) , k=0, 1, 2, … = (k) 3) Si el método converge, la sucesión de vectores X tenderá hacia un vector que satisface al sistema de ecuaciones F = 0 Ejemplo. Encuentre las raíces reales del sistema: f1 (x, y) = (x − 2)2 + (y − 1)2 + xy − 3 = 0 f 2 (x,= xe x + y + y − 3 0 y) = En el caso de dos ecuaciones con dos variables, sus gráficos pueden visualizarse en el plano. Las raíces reales son las intersecciones. La siguiente figura obtenidap(con MATLAB muestra el gráfico de las dos ecuaciones. y e y) 3 0 4 3 2 1 y 0 -1 -2 0 0.5 1 1.5 2 2.5 3 3.5 4 x El gráfico se obtuvo con los siguientes comandos de MATLAB y el editor de gráficos: >> syms x y >> f=[(x-2)^2 + (y-1)^2+x*y-3, x*exp(x+y)+y-3]; >> ezplot(f(1),[0,4,-2,4]),grid on,hold on >> ezplot(f(2),[0,4,-2,4]) No es posible reducir el sistema a una ecuación, por lo que se debe utilizar un método para resolverlo simultáneamente con la fórmula propuesta: Obtención de la solución con el método de Newton para dos ecuaciones: f1 (x, y) = (x − 2)2 + (y − 1)2 + xy − 3 = 0 f 2 (x,= xe x + y + y − 3 0 y) =  x (0)  0.5  Comenzar con el vector inicial = =  X (0)  (0)  tomado del gráfico  y  1.0 
  3. 50 Matriz jacobiana y vectores:  ∂f1 ∂f1   ∂x ∂y   2x + y − 4 x + 2y − 2  = =  x + y J    ∂f2 ∂f2   e (1 + x) xe x + y + 1   ∂x ∂y    x  f1  (x − 2)2 + (y − 1)2 + xy − 3  X =   ,= =  F    y  f2   xe x + y + y − 3  Ecuación de recurrencia X (k + 1) X (k) − (J(k) )−1F(k) = Primera iteración: k=0 X (1) X (0) − (J(0) )−1F(0) = −1  x (1)  0.5   2(0.5) + 1 − 4 0.5 + 2(1) − 2  (0.5 − 2)2 + (1 − 1)2 + 0.5(1) − 3  =   −  0.5 + 1 (1)     y  1.0   e (1 + 0.5) 0.5e 0.5 + 1 + 1    0.5e0.5 + 1 + 1 − 3  −1  x (1)  0.5   −2 0.5   −0.25  =   −  (1)      y  1.0  6.7225 3.2408  0.2408   x (1)  0.5   −0.3293 0.0508   −0.25  0.4055   (1)  =    − =   y  1.0   0.6830 0.2032  0.2408  1.1218  3.5.4 Práctica computacional Obtención de las raíces de las ecuaciones para el ejemplo anterior calculando directamente en la ventana de comandos de MATLAB mediante la ecuación de recurrencia: X (k + 1) X (k) − (J(k) )−1F(k) = >> syms x y >> f1=(x-2)^2 + (y-1)^2+x*y-3; >> f2=x*exp(x+y)+y-3; >> J=[diff(f1,x) diff(f1,y); diff(f2,x) diff(f2,y)] J= [ 2*x + y - 4, x + 2*y - 2] [ exp(x + y) + x*exp(x + y), x*exp(x + y) + 1] >> F=[f1; f2]; >> X=[x;y]; >> x=0.5; y=1; >> X=eval(X) Valores iniciales X= 0.500000000000000 1.000000000000000 >> X=X-inv(eval(J))*eval(F) Primera iteración
  4. 51 X= 0.405451836483295 1.121807345933181 >> x=X(1); y=X(2); >> X=X-inv(eval(J))*eval(F) Segunda iteración X= 0.409618877363502 1.116191209478471 >> x=X(1); y=X(2); >> X=X-inv(eval(J))*eval(F) X= 0.409627787030011 1.116180137991844 >> x=X(1); y=X(2); >> X=X-inv(eval(J))*eval(F) X= 0.409627787064807 1.116180137942813 >> x=X(1); y=X(2); >> X=X-inv(eval(J))*eval(F) X= 0.409627787064807 1.116180137942814 >> eval(f1) Verificar la solución ans = -4.440892098500626e-016 >> eval(f2) ans = 4.440892098500626e-016 3.5.5 Instrumentación computacional del método de Newton para un sistema de n ecuaciones no-lineales. Sea F: f1, f2, …, fn ecuaciones con variables independientes X: x1, x2, …, xn. Ecuación de recurrencia: X (k + 1) X (k) − (J(k) )−1F(k) , k=0, 1, 2, … = En donde J es la matriz jacobiana del sistema Entrada f: Vector con las ecuaciones v: Vector con las variables independientes u: Vector con valores iniciales para las variables Salida u: Vector con los nuevos valores calculados para las variables Nota: La convergencia será controlada interactivamente reusando la función esde la ventana de comandos. Por las propiedades de este método, la convergencia o divergencia será muy rápida.
  5. 52 Alternativamente, se puede incorporar a la instrumentación un ciclo con un máximo de iteraciones para que las iteraciones se realicen dentro de la función. Las derivadas parciales se obtienen con la función diff y la sustitución de los valores de u en las variables se realiza con la función subs. La solución se la obtiene con la inversa de la matriz de las derivadas parciales J. function u = snewton(f, v, u) %Sistemas no lineales n=length(f); for i=1:n %Obtención de la matriz jacobiana J for j=1:n J(i,j)=diff(f(i),v(j)); end end for i=1:n %Sustitución del vector u en J for j=1:n for k=1:n if findstr(char(J(i,j)),char(v(k)))>0 J(i,j)=subs(J(i,j),v(k),u(k)); end end end end for i=1:n for j=1:n f(i)=subs(f(i),v(j),u(j)); %Sustitución del vector u en el vector f end end u=u-inv(eval(J))*eval(f); %Obtención de la nueva aproximación u Ejemplo. Use la función snewton para encontrar una raíz real del sistema f1 (x, y) = (x − 2)2 + (y − 1)2 + xy − 3 = 0 f 2 (x,= xe x + y + y − 3 0 y) = >> syms x y >> f1=(x-2)^2 + (y-1)^2+x*y-3; >> f2=x*exp(x+y)+y-3; >> f=[f1;f2]; >> v=[x;y]; >> u=[0.5; 1]; Valores iniciales tomados del gráfico >> u=snewton(f, v, u) u= 0.405451836483295 1.121807345933181 >> u=snewton(f, v, u) u= 0.409618877363502 1.116191209478472 >> u=snewton(f, v, u) u= 0.409627787030011 1.116180137991845
  6. 53 >> u=snewton(f, v, u) u= 0.409627787064807 1.116180137942814 >> u=snewton(f, v, u) u= 0.409627787064807 1.116180137942814 Se observa la rápida convergencia. Para verificar que son raíces reales de las ecuaciones debe evaluarse f >> subs(f1,{x,y},{u(1),u(2)}) ans = 4.440892098500626e-016 >> subs(f2,{x,y},{u(1),u(2)}) ans = 0 Los valores obtenidos son muy pequeños, por lo cual se aceptan las raíces calculadas Para calcular la otra raíz, tomamos del gráfico los valores iniciales cercanos a esta raíz. >> u=[2.4; -1.5]; >> u=snewton(f, v, u) u= 2.261842718297048 -1.535880731849205 >> u=snewton(f, v, u) u= 2.221421001369104 -1.512304705819129 >> u=snewton(f, v, u) u= 2.220410814294533 -1.511478104887419 >> u=snewton(f, v, u) u= 2.220410327256473 -1.511477608846960 >> u=snewton(f, v, u) u= 2.220410327256368 -1.511477608846834 >> u=snewton(f, v, u) u= 2.220410327256368 -1.511477608846835 >> subs(f1,{x,y},{u(1),u(2)}) (Comprobar si es una solución del sistema) ans = -8.881784197001252e-016 >> subs(f2,{x,y},{u(1),u(2)}) ans = 8.881784197001252e-016
  7. 54 3.5.6 Uso de funciones de MATLAB para resolver sistemas no-lineales La función solve de MATLAB se puede usar para resolver sistemas no lineales como el ejemplo anterior: >> syms x y >> f1=(x-2)^2 + (y-1)^2+x*y-3; >> f2=x*exp(x+y)+y-3; >> f=[f1;f2]; >> [x,y]=solve(f) x= 0.40962778706480689876647619089358 y= 1.116180137942813562571698234565 El método solve de MATLAB proporciona solamente una de las dos soluciones. Con esto concluimos que no siempre los programas computacionales disponibles producen todas las respuestas esperadas. 3.5.7 Obtención de la fórmula iterativa de segundo orden para calcular raíces reales de sistemas de ecuaciones no lineales Se considera el caso de dos ecuaciones y luego se generaliza a más ecuaciones Sean f1(x1, x2) = 0, f2(x1, x2) = 0 dos ecuaciones no-lineales con variables x1, x2. Sean r1, r2 valores reales tales que f1(r1, r2) = 0, f2(r1, r2) = 0, entonces (r1, r2) constituye una raíz real del sistema y es de interés calcularla. Suponer que f1, f2 son funciones diferenciables en alguna región cercana al punto (r1, r2) Con el desarrollo de la serie de Taylor expandimos f1, f2 desde el punto (x1 , x (k) ) al punto (k) 2 (x1 + 1) , x (k + 1) ) (k 2 ∂f1(k) ∂f (k) f1(k + 1) = + (x1 + 1) − x1 ) f1(k) (k (k) + (x (k + 1) − x (k) ) 1 + O(x1 + 1) − x1 )2 + O(x 2 + 1) − x 2 )2 (k (k) (k (k) ∂x 1 ∂x 2 2 2 ∂f2(k) ∂f (k) f2(k + 1) = + (x1 + 1) − x1 ) f2(k) (k (k) + (x (k + 1) − x (k) ) 2 + O(x1 + 1) − x1 )2 + O(x 2 + 1) − x 2 )2 (k (k) (k (k) ∂x 1 ∂x 2 2 2 Por simplicidad se ha usado la notación: f1(k) = f1 (x1 , x (k) ) , f1(k + 1) = f1 (x1 + 1) , x (k + 1) ) , etc. (k) 2 (k 2 En los últimos términos de ambos desarrollos se han escrito únicamente los componentes de interés, usando la notación O( ). Las siguientes suposiciones, son aceptables en una región muy cercana a (r1, r2):
  8. 55 (x1 , x (k) ) cercano a la raíz (r1, r2) (k) 2 Si el método converge cuadráticamente entonces (x1 + 1) , x (k + 1) ) estará muy cercano a (r1, r2) (k 2 Por lo tanto se puede aproximar: f1 (x1 + 1) , x (k + 1) ) ≈ 0 (k 2 f2 (x1 + 1) , x 2 + 1) ) ≈ 0 (k (k Por otra parte, si (x 1 , x 2 ) es cercano a (x1 + 1) , x (k + 1) ) , las diferencias serán pequeñas y al (k) (k) (k 2 elevarse al cuadrado se obtendrán valores más pequeños y se los omite. Sustituyendo en el desarrollo propuesto se obtiene como aproximación el sistema lineal: ∂f1(k) (k) ∂f (k) 0 = + (x1 + 1) − x1 ) f1(k) (k (k) + (x 2 + 1) − x 2 ) 1 (k ∂x 1 ∂x 2 ∂f2(k) (k) ∂f (k) 0 = + (x1 + 1) − x1 ) f2(k) (k (k) + (x 2 + 1) − x 2 ) 2 (k ∂x 1 ∂x 2 En notación matricial: −F(k) J(k) (X (k + 1) − X (k) ) = Siendo  ∂f1(k) ∂f1(k)     f1(k)   x1  (k)  x1 + 1)  (k ∂x 1 ∂x 2  F (k) =  (k)  , X (k) =  (k)  , X (k + 1) =  (k + 1)  , J(k) =  (k)  f2   x2   x2   ∂f ∂f2(k)   2   ∂x 1  ∂x 2   J(k) X (k + 1) J(k) X (k) − F(k) = X (k + 1) X (k) − (J(k) )−1F(k) , = | J(k) |≠ 0 Es la ecuación de recurrencia que se puede usar iterativamente con k=0, 1, 2, … partiendo de un vector inicial X (0) generando vectores de aproximación: X (1) , X (2) , X (3) , … La notación matricial y la ecuación de recurrencia se extienden directamente a sistemas de n ecuaciones no lineales f1, f2, …, fn con variables x1, x2, …, xn. La matriz de las derivadas parciales J se denomina jacobiano. La ecuación de recurrencia se reduce a la fórmula de Newton si se tiene una sola ecuación.
Anúncio