Solucin de ecuaciones no lineales Curso de Programacin

  • Slides: 61
Download presentation
Solución de ecuaciones no lineales Curso de Programación numérica

Solución de ecuaciones no lineales Curso de Programación numérica

Temario Métodos cerrados: Métodos gráficos Método de bisección Método de la posición falsa Métodos

Temario Métodos cerrados: Métodos gráficos Método de bisección Método de la posición falsa Métodos abiertos Iteración simple de punto fijo Método de Newton-Raphson Método de la secante Raíces de polinomios Método de Müller Método de Bairstow

Métodos gráficos Los métodos gráficos consisten en graficar la función f(x) y observar donde

Métodos gráficos Los métodos gráficos consisten en graficar la función f(x) y observar donde la función cruza el eje x.

Ejemplo 1 Encontrar la raíz de:

Ejemplo 1 Encontrar la raíz de:

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

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

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

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

Tarea Utilice Excel para los siguientes problemas. Determine las raíces reales de: f(x) =

Tarea Utilice Excel para los siguientes problemas. Determine las raíces reales de: f(x) = – 0. 5 x 2 + 2. 5 x + 4. 5 Gráficamente. Confirme utilizando la fórmula cuadrática. Determine las raíces reales de: f(x) = 5 x 3 – 5 x 2 + 6 x – 2 Gráficamente.

Método de la bisección Se trata de encontrar los ceros de f(x) = 0

Método de la bisección Se trata de encontrar los ceros de f(x) = 0 Donde f es una función continua en [a, b] con f(a) y f(b) con signos diferentes. y f(a) y = f(x) bx a f(b)

Método de la bisección De acuerdo con el teorema del valor medio, existe p

Método de la bisección De acuerdo con el teorema del valor medio, existe p [a, b] tal que f(p) = 0. El método consiste en dividir a la mitad el intervalo y localizar la mitad que contiene a p. El procesos se repite hasta la lograr la precisión deseada.

Método de la bisección Primera iteración del algoritmo y Mitad del intervalo que contiene

Método de la bisección Primera iteración del algoritmo y Mitad del intervalo que contiene a p f(a) y = f(x) f(p 1) a p p 1=(a+b)/2 bx f(b)

Método de la bisección Segunda iteración del algoritmo y Mitad del intervalo que contiene

Método de la bisección Segunda iteración del algoritmo y Mitad del intervalo que contiene a p y = f(x) f(a) a =p 1 f(p 2) p p 2=(a+b)/2 bx f(b)

Método de la bisección Algoritmo bisección Entradas: extremos a, b; número de iteraciones ni;

Método de la bisección Algoritmo bisección Entradas: extremos a, b; número 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;

Bisección en C double biseccion(double a, double b, double error, int ni){ double p,

Bisección 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 Función de ejemplo Función en C: double f(x){ return sqrt(x*x + 1) -

Ejemplo Función de ejemplo Función en C: double f(x){ return sqrt(x*x + 1) - tan(x); }

Tarea Haga funciones en C para encontrar la solución de las siguientes ecuaciones utilizando

Tarea Haga funciones en C para encontrar la solución de las siguientes ecuaciones utilizando la función biseccion(): 1. ex – x 2 + 3 x – 2 = 0 para 0 <= x <= 1 2.

Error en el método de bisección Para el método de bisección se sabe que

Error en el método de bisección Para el método de bisección se sabe que la raíz esta dentro del intervalo, la raíz debe situarse dentro de Dx / 2, donde Dx = xb – xa. La solución 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 sustituyedo

Número de iteraciones El error absoluto en la primera iteración es: El error absoluto

Número de iteraciones El error absoluto en la primera iteración es: El error absoluto en la iteración n-ésima es: Si el error deseado es Ead, El número de iteraciones será:

Volumen del abrevadero r h L r a b h

Volumen del abrevadero r h L r a b h

Tarea 17. Un abrevadero de longitud L tiene una sección transversal en forma de

Tarea 17. Un abrevadero de longitud L tiene una sección transversal en forma de semicírculo con radio r (véase 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 pr 2 – r 2 arcsen(h/r) – h(r 2 – h 2)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 método de bisección para encontrar la solución. r h L

Resumen Requiere que se conozca el intervalo en donde está la raíz. Los valores

Resumen Requiere que se conozca el intervalo en donde está la raíz. Los valores de la función en los extremos deben tener signos diferentes. Converge lentamente, a cada paso el intervalo se divide en 2.

Método de falsa posición Este método considera cual límite del intervalo está más próximo

Método de falsa posición Este método considera cual límite del intervalo está más próximo a la raíz. f(xu) De la figura Despejando xl xr xu f(xl) f(xr)

Ejemplo en Excel Encontrar la raíz de:

Ejemplo en Excel Encontrar la raíz de:

Tarea Encuentre la raíz real de f(x) = (0. 8 – 0. 3 x)/x,

Tarea Encuentre la raíz real de f(x) = (0. 8 – 0. 3 x)/x, por el método de falsa posición. Utilice valores iniciales de 1 y 3, calcule el error porcentual verdadero en cada iteración. Encuentre la raíz analiticamente.

Falsa posición en C if(fl*fr<0){ xu = xr; fu = f(xu); iu = 0;

Falsa posición en C if(fl*fr<0){ xu = xr; fu = f(xu); iu = 0; double falsa. Posicion(double xl, il++; double xu, double ee, int imax){ if(il>=2) double error, fl, fu, fr, xr. Old; fl/=2; int iter=0, il=0, iu=0; } fl = f(xl); else{ fu = f(xu); xl = xr; do{ fl = f(xl); xr. Old = 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-xr. Old)/xr*100); error = 0; } }while(error>ee && iter<=imax); return xr; }

Iteración de punto fijo Un punto fijo de una función g(x) es un número

Iteración de punto fijo Un punto fijo de una función g(x) es un número p tal que g(p) = p. Dado un problema f(x) = 0, se puede definir una función 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

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 además 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. y y |g’(x)<=1 y=x b p=g(p) y = g(x) a |g’(x)>1 y=x b p=g(p) y = g(x) a a p b x

Algoritmo de punto fijo Obtener una solución a p = g(p) dada un aproxiamción

Algoritmo de punto fijo Obtener una solución a p = g(p) dada un aproxiamción inicial p 0. ENTRADA aproximación inicial p 0; tolerancia TOL; número máximo 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ó después de N 0 iteraciones’

Gráfica del algoritmo de punto fijo y y=x p 1= g(p 0) p 3=

Gráfica del algoritmo de punto fijo y y=x p 1= g(p 0) p 3= g(p 2) y = g(x) p 2= g(p 1) p 3= g(p 2) y=x y p 1= g(p 0) y = g(x) p 1 p 3 p 2 p 0 x p 0 p 1 p 2 x

Casos de no convergencia y y=x y y = g(x) x x

Casos de no convergencia y y=x y y = g(x) x x

Ejemplo Sea la función: x 3 + 4 x 2 – 10 = 0

Ejemplo Sea la función: x 3 + 4 x 2 – 10 = 0 tiene una raíz en [1, 2] Puede despejarse en: a. x = g 1(x) = x – x 3 – 4 x 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 + 4 x 2 – 10)/(3 x 2 + 8 x)

Iteraciones de punto fijo (a) (b) (c) (d) 1 1. 5 2 -0. 875

Iteraciones de punto fijo (a) (b) (c) (d) 1 1. 5 2 -0. 875 3 6. 732421875 4 -469. 72001200 5 1. 02754555 E 8 6 -1. 084933870 E 24 7 1. 277055591 E 72 8 -2. 082712908 E 216 9 Na. N 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. 365230013 1. 5 1. 373333333 1. 365262014 1. 365230013

Funciones graficadas en Math. Lab a) c) b) d)

Funciones graficadas en Math. Lab a) c) b) d)

Teorema de punto fijo Si g C [a, b] y g(x) C [a, b]

Teorema de punto fijo Si g C [a, b] y g(x) C [a, b] para toda x C [a, b], además 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 p 0 en [a, b] la sucesión definida por pn = g(pn– 1), n >=1 Converge en el único punto fijo p en [a, b].

Corolario Si g satisface las hipótesis de teorema del punto fijo, las cotas de

Corolario Si g satisface las hipótesis de teorema del punto fijo, las cotas de error que supone utilizar pn para aproximar a p están dadas por | pn – p| <= kn max(p 0 – a, b – p 0) Y por | pn – p| <= kn | p 1 – p 0|/ (1 – k), para toda n>=1

Análisis del ejemplo Caso (a) Caso (b) g 1(x) = x – x 3

Análisis del ejemplo Caso (a) Caso (b) g 1(x) = x – x 3 – 4 x 2 +10 g 2(x) = ½(10 – x 3)½ g 1’(x) = 1 – 3 x 2 – 8 x g 2’(x) = – 3/4 x 2(10 – x 3)–½ g 1’(1) = – 11, g 1’(2) = – 28 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 + 4 x 2 – 10)/(3 x 2 + 8 x) Se cumple |g 4’(x)| es aún menor que en el caso (c) para toda x en [1, 2]

Programa en Matlab function y = Punto. Fijo(f_name, p 0, tol, ni) %f_name -

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

Función en C double Punto. Fijo(double p 0, double tol, int ni){ int i

Función en C double Punto. Fijo(double p 0, double tol, int ni){ int i = 1; double p; while(i<=ni){ p = f(p 0); if(fabs((p 0 -p)/p)<tol) return p; i++; p 0 = p; } std: : cout return p; } << "NO solucion en : " << ni << “ iteraciones. n";

Tarea Encontrar la raíz más grande de f(x) = 2 x 3 – 11.

Tarea Encontrar la raíz más grande de f(x) = 2 x 3 – 11. 7 x 2 + 17. 7 x – 5 Resolver por el método del punto fijo partiendo de x = 3.

Método de Newton-Raphson f(x) La ecuación de la recta tangente es: y – f(xn)

Método de Newton-Raphson f(x) La ecuación 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) o xn+1 xn

Algoritmo Newton Para obtener una solución a f(x) = 0 dada una aproximación p

Algoritmo Newton Para obtener una solución a f(x) = 0 dada una aproximación p 0. ENTRADA aproximación inicial p 0; tolerancia tol; número máximo 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 raíz en N 0 iteraciones

Ejemplo f(x) = x – cos(x) f’(x) = 1 + sen(x) pn+1 = pn

Ejemplo f(x) = x – cos(x) f’(x) = 1 + sen(x) pn+1 = pn – (pn – cos(pn))/(1 + sen(pn)) Tomando p 0 = 0, se obtiene pn 0 1 0. 7503639 0. 7391128 0. 7390851 f(pn) -1 0. 459698 0. 0189 0. 00005 3 E-10 f’(pn) 1 1. 8414 1. 6819 1. 6736 pn+1 1 0. 7503639 0. 7391128 0. 7390851

Ejercicio Encontrar la solución de x 3 + 4 x 2 – 10 =

Ejercicio Encontrar la solución de x 3 + 4 x 2 – 10 = 0 En el intervalo [1, 2] con el método de Newton

Código en C double Newton(double x 0, double ee, int ni){ int i =

Código en C double Newton(double x 0, double ee, int ni){ int i = 0; double x, fx, dfx; while(i<ni){ fx = f(x 0); dfx = df(x 0); x = x 0 -fx/dfx; if(fabs((x-x 0)/x)<ee) return x; i++; x 0 = x; } std: : cout << "No solución en "<< i << " pasosn"; return x; }

Ejemplo: cuenta de ahorros El valor acumulado de una cuenta de ahorros puede calcularse

Ejemplo: cuenta de ahorros El valor acumulado de una cuenta de ahorros puede calcularse con la ecuación de anualidad vencida A = P[(1 + i )n - 1 ] / i En esta ecuación A es el monto de la cuenta, P es la cantidad que se deposita periódicamente e i es la tasa de interés por periodo para los n periodos de depósito. A un ingeniero le gustaría tener una cuenta de ahorros con un monto de $ 750, 000 dólares al momento de retirarse dentro de 20 años, y puede depositar $ 1, 500 dólares mensuales para lograr dicho objetivo. ¿Cuál es la mínima tasa de interés a que puede invertirse ese dinero, suponiendo que es un interés compuesto mensual? Escriba un programa en C para este problema, el programa deberá pedir todos los datos necesarios y utilizar el método de Newton para calcular el interés a que debe invertirse el dinero.

Solución Para estimar el valor inicial de i podemos desarrollar el binomio (1 +

Solución Para estimar el valor inicial de i podemos desarrollar el binomio (1 + i)n para aproximarlo a la segunda potencia. El resultado es Se sugiere validar los datos de entrada. El capital a obtener debe ser mayor que el depósito por el número de abonos, es decir A > n. P

Ejemplos resuelto en Excel

Ejemplos resuelto en Excel

Método alternativo para evaluar la derivada (método de la secante) Es posible calcular la

Método alternativo para evaluar la derivada (método de la secante) Es posible calcular la derivada en xn usando: O utilizando

Algoritmo Newton 2 Para obtener una solución a f(x) = 0 dada una aproximación

Algoritmo Newton 2 Para obtener una solución a f(x) = 0 dada una aproximación p 0. ENTRADA aproximación inicial p 0; tolerancia tol; número máximo 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 raíz en N 0 iteraciones

Código en C double Newton(double x 0, double ee, int ni){ int i =

Código en C double Newton(double x 0, double ee, int ni){ int i = 0; double x, fx, dfx, h; h = 0. 0001; while(i<ni){ fx = f(x 0); dfx = (f(x 0+h)-fx)/h; x = x 0 -fx/dfx; if(fabs((x-x 0)/x)<ee) return x; i++; x 0 = x; } std: : cout << "No solución en "<< i << " pasosn"; return x; }

Programa en Matlab function x = Newt_n(f_name, x. O) % Iteración de Newton sin

Programa en Matlab function x = Newt_n(f_name, x. O) % Iteración de Newton sin gráficos x = x. O; 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. 0 f, x=%12. 5 e, y=%12. 5 e, ', n, x, y) fprintf(' yd = %12. 5 e n', y_driv) end fprintf('n Respuesta final = %12. 6 en', x) ;

Raíz cuadrada con Newton Para extraer la raíz cuadrada de un número se puede

Raíz cuadrada con Newton Para extraer la raíz cuadrada de un número se puede resolver la ecuación f(x) = x 2 – c = 0 La derivada es f’(x) = 2 x La fórmula de recurrencia de Newton es xn+1 = xn – (xn 2 – c)/(2 xn) = xn/2 + c/(2 xn) = (xn + c/xn)/2 Ejemplo: raíz cuadrada de 5 con x 0 = 1.

Desventajas En algunos casos la convergencia es muy lenta, considere f(x) = xn –

Desventajas En algunos casos la convergencia es muy lenta, considere f(x) = xn – 1 Se obtiene la siguiente secuencia empezando en x = 0. 5 iteración 0 1 2 3 4 x 0. 5 51. 65 46. 485 41. 8365 37, 65285 . . -- 1. 000000

Desventajas (cont. ) f(x) x 1 x 0 x 2 x 1 x mínimo

Desventajas (cont. ) f(x) x 1 x 0 x 2 x 1 x mínimo local raíz cerca de punto de inflexión f(x) x 1 x 0 x 1 varias raíces la iteración en un mínimo x

Ejemplo Resolver utilizando Excel sen x - e-x = 0 para 0<= x <=

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. 0000 -1. 0000 1. 94995999

Resultados h= 0. 1 xn f(xn) f'(xn) xn+1 0. 0000 -1. 0000 1. 94995999 0. 51283104 -0. 10815190 1. 41522716 0. 58925121 0. 00099615 1. 33011566 0. 58850229 -0. 00004224 1. 33095756 0. 58853402 0. 00000178 1. 33092188 0. 58853269 h= xn 0. 01 f(xn) f'(xn) xn+1 0. 0000 -1. 0000 1. 99499996 0. 50125314 -0. 12524617 1. 47731614 0. 58603267 -0. 00347081 1. 38411969 0. 58854027 0. 00001043 1. 38133294 0. 58853271 -0. 00000004 1. 38134134 0. 58853274

Tarea #14 La carga en un circuito RLC serie esta dada por suponga q/q

Tarea #14 La carga en un circuito RLC serie esta dada por suponga q/q 0 = 0. 01, t = 0. 05 s, L = 5 H y C = 10 -6 F. Encuentre el valor de la Resistencia R usando el método de Newton. Haga un programa en C para este problema.

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

Ejemplo La carga en un circuito RLC paralelo la impedancia esta dada por suponga R = 225, L = 0. 5 H y C = 0. 610 -6 F y Z = 75 Ohms. Encuentre el valor de la frecuencia w usando el método de Newton.

Convergencia en el punto fijo El algoritmo de punto fijo es de tipo lineal.

Convergencia en el punto fijo El algoritmo de punto fijo es de tipo lineal. Se puede demostrar que el error verdadero en la iteración 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 cuadrático. Se puede

Convergencia en Newton Raphson El algoritmo de Newton es de tipo cuadrático. Se puede demostrar que el error verdadero en la iteración i+1 es: Et, i+1= (- f ’’(xr)/2 f ’(xr))E 2 t, i Esto significa que el número de decimales exactos se duplica con cada iteración.

Raíces múltiples En el caso de que un polinomio tenga raíces múltiples, la función

Raíces múltiples En el caso de que un polinomio tenga raíces múltiples, la función tendrá pendiente igual a cero cuando cruce el eje x. Tales casos no pueden detectarse en el método de bisección si la multiplicidad es par. En el método de Newton la derivada en la raíz es cero. Generalmente el valor de la función tiende a cero más rápido que la derivada y puede utilizarse el método de Newton

Ejemplo Polinomio: f(x) = (x – 3) (x – 1)

Ejemplo Polinomio: f(x) = (x – 3) (x – 1)