Universidad Politécnica de Madrid–Escuela Técnica Superior de Ingenieros Industriales Grado en Ingeniería en Tecnologías Industriales. Curso 2015-2016-3º Matemáticas de Especialidad–Ingeniería Eléctrica Resolución de ecuaciones de una variable José Luis de la Fuente O’Connor [email protected] [email protected] Clase_reso_ecuaciones_2016.pdf 1/75 2/75 Índice El problema Método de la bisección Iteración de punto fijo Velocidad de convergencia Método de Newton Variantes del método de Newton Métodos sin derivadas 3/75 El problema En términos matemáticos, dada f W R ! R; hallar un xN tal que f .x/ N D 0. La función f se supone continua y derivable en algún conjunto abierto de R. Los algoritmos que estudiamos son procedimientos iterativos en los que se avanza progresivamente hacía una solución. Se utilizará uno u otro dependiendo de la complejidad de evaluar la función y de la disponibilidad de derivada, o de la dificultad de calcularla. 4/75 Método de la Bisección Atribuido a Bernard Bolzano, Praga, Bohemia (hoy Rep. Checa), 1781-1848. Idea: Si f es continua en un intervalo Œa; b en cuyos extremos cambia de signo, f .a/f .b/ < 0, existirá un c, a < c < b, en el que f .c/ D 0. Reduciendo Œa; b se llegará a acotar el valor de c tanto como se desee. Origen: 5/75 Teorema Del valor intermedio Si f W R ! R es una función continua en Œa; b y f .a/ x f .b/ o f .b/ x f .a/, existe un c, a c b, donde f .c/ D x. Mecánica del procedimiento: I. Comenzar con unos u D f .a/ y v D f .b/, tales que uv < 0. Determinar c D 21 .a C b/ y w D f .c/. Si f .c/ D 0 se ha llegado a la solución; si no, se cumplirá que wu < 0 o wv < 0. II. Si wu < 0, la solución estará en Œa; c; si wv < 0, en Œc; b. III. Se estudia el nuevo intervalo donde esté la raíz, reduciéndolo secuencialmente en dos mitades hasta que se estreche lo que se desee el intervalo de confinamiento que contenga la solución. f (a) f (a) f (x ) f (c) f (x ) Casos que se pueden presentar al comenzar [ ] c a f (c) ] [ a b f (b) [ c ] b f (b) 6/75 Si el intervalo con que se empieza el proceso iterativo, Œa0; b0, contiene una solución r, usando como estimación de ésta c0 D .a0 C b0/=2, se tendrá que e0 D jr En cualquier iteración, ei D jr c0 j ci j b0 bi ai ; 2 a0 2 : i D 0; 1; 2; : : : Teorema Al aplicar el método de la bisección a una función f W R ! R, continua en un intervalo Œa; b, en el que f .a/f .b/ < 0, después de n iteraciones, en las que se habrán evaluado la función n C 2 veces, se habrá obtenido un valor de la solución cn tal que su error b a jr cn j nC1 ; 2 donde r es el valor real de la solución. Definición Una solución es correcta en p posiciones decimales si el error es menor que 0;5 10 p . 7/75 Esta function lleva a cabo el método de la bisección. function sol=Bisec_0(fun,a,b,tol) % Método de la Bisección para resolver f(x)=0 if nargin<4, tol=sqrt(eps); end fa=fun(a); fb=fun(b); if sign(fa)*sign(fb)>=0, error(’ El intervalo (a,b) no contiene la solución\n’), end while abs(b-a)/2>tol c=(a+b)/2; fc = fun(c); if fc==0, break, end if sign(fc)*sign(fa)<0 b=c; fb=fc; else a=c; fa=fc; % No es necesario hacer fa=fc; end fprintf(’ %17.15f %17.15f\n’,a,b); end sol = (a+b)/2; end 8/75 Ejemplo Resolvamos x sen.x/ 1 D 0 en 1 x 2 (radianes). Para ello, suministramos los extremos del intervalo Œa; b y la propia función que resolver: >> f=@(x) x*sin(x)-1; >> Bisec_0(f,1,2} Los resultados son los de esta tabla. k a b k a b 1 2 3 4 5 6 7 8 9 10 11 12 1,0000000000000 1,0000000000000 1,0000000000000 1,0625000000000 1,0937500000000 1,1093750000000 1,1093750000000 1,1132812500000 1,1132812500000 1,1132812500000 1,1137695312500 1,1140136718750 1,5000000000000 1,2500000000000 1,1250000000000 1,1250000000000 1,1250000000000 1,1250000000000 1,1171875000000 1,1171875000000 1,1152343750000 1,1142578125000 1,1142578125000 1,1142578125000 13 14 15 16 17 18 19 20 21 22 23 24 25 1,1141357421875 1,1141357421875 1,1141357421875 1,1141510009765 1,1141510009765 1,1141548156738 1,1141567230224 1,1141567230224 1.1141567230224 1.1141569614410 1.1141570806503 1.1141571402549 1.1141571402549 1,1142578125000 1,1141967773437 1,1141662597656 1,1141662597656 1,1141586303710 1,1141586303710 1,1141586303710 1,1141576766967 1.1141571998596 1.1141571998596 1.1141571998596 1.1141571998596 1.1141571700572 9/75 En la figura se representa cómo procede el método para llegar a la solución. Intervalo inicial Error hacia delante y error hacia atrás de un algoritmo 10/75 El proceso que se lleva a cabo para obtener la solución de un problema mediante un algoritmo de bucle abierto se esquematiza así: Datos que definen el ! problema Proceso de solución o algoritmo ! Solución El problema lo constituyen los datos que se proporcionan a esa función de transferencia que es el algoritmo. La solución es la información que proporciona la salida. En lo que analizamos aquí, el problema es una ecuación de una variable; el algoritmo, cualquiera de los que estudiamos. 11/75 Definición Si f .x/ es una función y r una raíz de ella, f .r/ D 0, supongamos que xa es una aproximación de r obtenida por un algoritmo. El error hacia atrás del algoritmo es jf .xa /j y el error hacia delante jr xa j. El error hacia atrás está en el lado izquierdo del esquema anterior, o a la entrada. Es la cantidad que tendría que cambiar el problema (la función) para hacer que la ecuación se equilibre con la aproximación xa de la salida. Es jf .xa /j. El error hacia delante está en el lado derecho, o a la salida (solución del problema). Es la cantidad que tendría que cambiar la solución aproximada para que sea correcta, es decir, jr xa j. 8 D 0. Podemos comprobar que Ejemplo Estudiemos x 3 2x 2 C 34 x 27 f .0/f .1/ D . 8=27/.1=27/ < 0. Apliquemos el método de la bisección. >> f1=@(x) x^3-2*x^2+x*4/3-8/27; >> xc=Bisec_0(f1,0,1) Se obtiene lo siguiente: >> xc=Bisec_0(f1,0,1) 0.500000000000000 1.000000000000000 0.500000000000000 0.750000000000000 0.625000000000000 0.750000000000000 0.625000000000000 0.687500000000000 0.656250000000000 0.687500000000000 0.656250000000000 0.671875000000000 0.664062500000000 0.671875000000000 0.664062500000000 0.667968750000000 0.666015625000000 0.667968750000000 0.666015625000000 0.666992187500000 0.666503906250000 0.666992187500000 0.666503906250000 0.666748046875000 0.666625976562500 0.666748046875000 0.666625976562500 0.666687011718750 0.666656494140625 0.666687011718750 0.666656494140625 0.666671752929688 xc = 0.666664123535156 12/75 >> xc=Bisec_0(f1,0,1,eps) 0.500000000000000 1.000000000000000 0.500000000000000 0.750000000000000 0.625000000000000 0.750000000000000 0.625000000000000 0.687500000000000 0.656250000000000 0.687500000000000 0.656250000000000 0.671875000000000 0.664062500000000 0.671875000000000 0.664062500000000 0.667968750000000 0.666015625000000 0.667968750000000 0.666015625000000 0.666992187500000 0.666503906250000 0.666992187500000 0.666503906250000 0.666748046875000 0.666625976562500 0.666748046875000 0.666625976562500 0.666687011718750 0.666656494140625 0.666687011718750 0.666656494140625 0.666671752929688 xc = 0.666664123535156 La raíz es 0;6666666666666 : : :. Aunque se aumente la precisión, el proceso es el mismo y sólo consigue 6 dígitos significativos de la misma, ¿por qué? Lo que ocurre no es culpa del método de la bisección sino de la incapacidad de la aritmética de la máquina para calcular la función f con precisión suficiente cerca de la raíz. Cualquier otro método que se base en esta misma aritmética de maquina estará destinado al mismo “fracaso”. 13/75 1.3 Limits of Accuracy | 45 La razón se ve en la figura. (a) (b) Si la aritmética de la máquina muestra que la función es igual a cero en un valor Figure 1.7 The shape of a function near a multiple root. (a) Plot of f (x) = que no es una raíz, no hay manera de que el método pueda recuperar esto. x 3 − 2x 2 + 4/3x − 8/27. (b) Magnification of (a), near the root r = 2/3. There are 14/75 El error hacia atrás es cercano a máq 2;2 10 16, mientras que el error hacia delante es aproximadamente 10 5. Como el error hacia atrás no puede disminuirse por debajo de un error relativo por debajo del épsilon de la máquina, tampoco es posible disminuir el error hacia delante. Hay que destacar que este ejemplo es bastante especial pues la función tiene una raíz triple en r D 2=3. 3 8 2 4 f .x/ D x 3 2x 2 C D x : 3 27 3 Definición Si una función continua y derivable m veces tiene en r una raíz y 0 D f .r/ D f 0 .r/ D D f .m 1/ , pero f .m/ ¤ 0, se dice que f tiene una raíz de multiplicidad m en r. Una raíz es simple si la multiplicidad es igual a uno y múltiple si es mayor que uno. 15/75 Iteración de punto fijo Observemos: >> cos(1) ans = 0.540302305868140 >> cos(ans) ans = 0.857553215846393 >> cos(ans) ans = 0.654289790497779 >> cos(ans) ans = 0.793480358742566 >> cos(ans) ans = 0.701368773622757 >> cos(ans) ans = 0.763959682900654 >> cos(ans) ans = 0.722102425026708 >> cos(ans) ans = 0.750417761763761 >> cos(ans) ans = 0.731404042422510 >> cos(ans) ans = 0.744237354900557 >> cos(ans) ans = 0.735604740436347 >> cos(ans) ans = 0.741425086610109 >> cos(ans) ans = 0.737506890513243 >> cos(ans) ans = 0.740147335567876 >> cos(ans) ans = 0.738369204122323 >> cos(ans) ans = 0.739567202212256 >> cos(ans) ans = 0.738760319874211 >> cos(ans) ans = 0.739303892396906 >> cos(ans) ans = 0.738937756715344 >> cos(ans) ans = 0.739184399771494 >> cos(ans) ans = 0.739018262427412 >> cos(ans) ans = 0.739130176529671 >> cos(ans) ans = 0.739054790746917 >> cos(ans) ans = 0.739105571926536 >> cos(ans) ans = 0.739071365298945 >> cos(ans) ans = 0.739094407379091 >> cos(ans) ans = 0.739078885994992 >> 16/75 La sucesión de puntos de iterar la función coseno parece que converge a un punto r. Definición Un número real r es un punto fijo de f .x/ si f .r/ D r. La iteración de punto fijo sirve para resolver problemas de punto fijo f .x/ D x. Se puede usar para resolver f .x/ D 0 si éste se puede expresar como g.x/ D x. Esquema general de la Iteración de Punto Fijo Dados Un x WD x0 y una t ol . Hacer f ound WD f al se while (not f ound ) and (k < kmax ) Hacer xk WD f .xk 1 ) if (xk xk 1 < t ol ), f ound WD true , end k WD k C 1 end 17/75 Este código de Matlab hace el trabajo. function xc=fpi(g,x0,k) % fpi: Calcula la solución de f(x)=x; it. punto fijo % Input: inline function f, punto de partida x0, % número de iteraciones k % Output: Solución x x(1)=x0; for i=1:k x(i+1)=g(x(i)); end xc=x(k+1); end Para el caso de f .x/ D cos.x/, haciendo hasta treinta iteraciones, sería: >> f=@(x)cos(x); >> xc = fpi(f,1,15) xc = 0.738369204122323 >> xc = fpi(f,1,30) xc = 0.739087042695332 18/75 Ejemplo Resolvamos la ecuación x 3 C x formas con el formato g.x/ D x: x 3; xD1 en este caso g.x/ D 1 También 1 D 0. Expresémosla de varias x 3. xD p 3 1 x; p siendo aquí g.x/ D 3 1 x. Si añadimos 2x 3 a los lados de la ecuación, también, 3x 3 C x 1 D 2x 3 3x 2 C 1 x D 1 C 2x 3 1 C 2x 3 x D 1 C 3x 2 siendo g.x/ D .1 C 2x 3/=.1 C 3x 2/. ving Equations 19/75 to the diagonal y = x. geometrías This geometric of a Fixed-Point i ) across Enheight esta g(x figura se pueden ver las line distintas deillustration las y D g.x/ y los Iteration is called a cobweb diagram. primeros pasos de la iteración de punto fijo con ellas, partiendo de un mismo x0. y y y 1 1 1 x2 x0 r x1 1 x x0 r x1 1 x2 x x0 r 1 x Figure 1.3 Geometric view of FPI. The fixed point is the intersection of g(x) and the diagonal line. Three examples of g(x) are shown together with the first few steps of La primera diverge, la segunda converge y la tercera también converge, pero FPI. (a) g(x) = 1 – x3 (b) g(x) = (1 – x)1/3 (c) g(x) = (1 + 2x3 )/(1 + 3x2 ) mucho más rápidamente. ¿Por qué? In Figure 1.3(a), the path starts at x0 = 0.5, and moves up to the function and horizontal to the point (0.875, 0.875) on the diagonal, which is (x1 , x1 ). Next, x1 should be substituted Aparentemente, algo the tiene que condone ellofor laxpendiente de la función, g 0.x/, into g(x). This is done same wayver it was 0 , by moving vertically to the function. 0.3300, and after moving horizontally to move the y-value to an x-value, This del yields x2 ≈ fijo. cerca punto we continue the same way to get x3 , x4 , . . . . As we saw earlier, the result of FPI for this g(x) 20/75 Consideremos ahora la ecuación x3 sen.x/ D 0: Al tratarse de una función senoidal, habrá varios puntos para los cuales f .x/ D 0. Calcularemos el más próximo a x D 1. Si seguimos una estrategia de punto fijo, buscaremos una función g W R ! R y un xN tal que xN D g.x/, N y aplicaremos un procedimiento iterativo a partir de la relación de recurrencia xkC1 D g.xk /. ¿Qué formas de x D g.x/, y por tanto relación de recurrencia, se nos pueden ocurrir para utilizar? 21/75 La primera podría ser x D sería p 3 sen.x/: La relación de recurrencia correspondiente xkC1 D p 3 sen.xk /: Si comenzamos el proceso iterativo desde x0 D 1 (radianes), se tendrá que: p x1 D 3 sen.x0/ D 0;944 p x2 D 3 sen.0;944/ D 0;932 p x3 D 3 sen.0;932/ D 0;929 ::: La solución converge a xN D 0;92862. 22/75 También podemos hacer x D sen.x/ , x2 por lo que la relación de recurrencia sería xkC1 D sen.xk / : xk2 Partiendo de x0 D 1, se obtienen los puntos k 0 1 2 3 4 :: : El proceso diverge. xk 1; 000 0; 841 1; 053 0; 783 1; 149 :: : Veamos geométricamente qué ocurre en estos dos procesos: El itinerario de la parte izquierda es el de xkC1 D El que define p 3 sen.xk /. sen.xk / xk2 genera lo que se denomina una tela de araña entre la recta y D x y la función y D g.x/. xkC1 D 23/75 Si se analiza el comportamiento de diversas relaciones de recurrencia se puede constatar una relación directa entre el comportamiento del proceso iterativo y las pendientes de g en el entorno de x: N Si jg 0.x/j N D v < 1 y el punto de partida está cerca de x, N el proceso converge linealmente a velocidad v. Si jg 0.x/j N > 1, diverge. En el caso de xkC1 D p 3 sen.xk /, .sen.x// g .x/ D 3 En xN 0;929, g 0.0;929/ 0;23. 0 2=3 cos.x/: Por el contrario, en xkC1 D sen.xk /=xk2 , cos.x/ x2 1;23. g 0.x/ D En xN 0;929, g 0.0;929/ 2 sen.x/ : x3 24/75 25/75 Definición Sea ei el error en el paso i de un método iterativo. Si ei C1 lim D S < 1; i !1 ei se dice que el método converge linealmente con razón S. Teorema Si f W R ! R es una función continua y derivable, f .r/ D r y S D jf .r/j < 1, la iteración de punto fijo converge linealmente a r, con razón S, para estimaciones iniciales lo suficientemente próximas a r. 0 Velocidad de convergencia 26/75 Definición Sea una sucesión fxi g1 i D0 , xi 2 R, convergente a x . El orden de conver- gencia de fxi g es el máximo de los números no negativos r que satisface jxi C1 x j 0 lim < 1: i!1 jxi x jr El valor del límite, ˇ, se conoce como razón, o constante de error asintótico. Si r D 1, la sucesión se dice que converge linealmente; si r D 2, se dice que lo hace cuadráticamente; si r D 3, cúbicamente, etc. Definición Un método iterativo xi C1 D f .xi /; i D 1; 2; : : :, que parte de un punto x0 , se dice que tiene una velocidad de convergencia de orden r cuando la sucesión fxi g1 i D0 converge con orden r hacia la solución x D f .x/. jxi C1 x j limi!1 jxi x j Si la convergencia es lineal y el valor de convergencia se dice superlineal. Ejemplo consideremos la sucesión escalar definida por 27/75 D ˇ es cero, la k xk D c 2 ; donde c cumple 0 c < 1. La sucesión converge a cero. Calculemos su orden de convergencia: kC1 c2 jxkC1 0j lim D lim kC1 D 1: 2 k!1 jxk k!1 c 2 0j Es decir, converge cuadráticamente a 0. La convergencia cuadrática quiere decir, grosso modo, que en las proximidades del límite o solución el número de dígitos significativos que aporta cada paso del proceso al valor de la solución es el doble que el anterior. 28/75 En la columna 2 de la tabla que sigue se pueden ver los distintos puntos de la sucesión del primer ejemplo analizado para c D 0;99. k 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 k c2 .c D 0; 99/ 0,9900000000000000 0,9801000000000000 0,9605960099999999 0,9227446944279201 0,8514577710948755 0,7249803359578534 0,5255964875255620 0,2762516676992083 0,0763149839065938 0,0058239767686636 0,0000339187054019 0,1150478576143195E-08 0,1323600954164474E-17 0,1751919485865107E-35 0,3069221884953861E-71 0,9420122979079730E-143 0,8873871694098596E-286 c2 k .c D 2; 2/ 2,200000000000000 1,483239697419133 1,217883285630907 1,103577494166543 1,050512967157732 1,024945348376065 1,012395845692812 1,006178833852518 1,003084659364561 1,001541142122759 1,000770274400054 1,000385063063246 1,000192513000995 1,000096251868287 1,000048124776146 1,000024062098581 1,000012030976918 1=k k 1,000000000000000 0,250000000000000 0,037037037037037 0,003906250000000 0,000320000000000 0,000021433470507 0,000001214265678 0,000000059604644 0,000000002581174 0,100000000000000E-10 0,350493899481392E-12 0,112156654784615E-13 0,330169095523011E-15 0,899927452978128E-17 0,228365826052116E-18 0,542101086242752E-20 0,120883864830239E-21 29/75 Consideremos la sucesión convergente a 1 que define, k xk D c 2 ; con c 0. Analicemos su orden de convergencia: .kC1/ c2 jxkC1 1j D lim lim k!1 c 2 k!1 jxk 1j D lim k!1 k c 2 .kC1/ 1 1 c2 .kC1/ 1 1 c 2 .kC1/ C1 1 D : .kC1/ k!1 c 2 2 C1 Converge linealmente: Esta convergencia significa que en cada iteración se añaden un número de dígitos constante a la solución final; concretamente, log10 ˇ dígitos por iteración. D lim 1 Analicemos por último la sucesión que define 1 xk D k : k Converge a cero. En la columna 4 de la tabla se pueden ver los primeros puntos de esta sucesión. Estudiemos su orden de convergencia: 1 1 jxkC1j .k C 1/kC1 lim D lim D lim kC1 D 0: 1 k!1 jxk j k!1 k!1 1 k 1 C k k k Es decir, converge superlinealmente a cero. La convergencia superlineal significa que cada iteración añade un número creciente de dígitos a la solución final; concretamente r dígitos más que la iteración precedente. 30/75 31/75 La siguiente tabla resume las diferencias entre varias velocidades de convergencia. k 1 2 3 4 5 Error 10 10 10 10 10 2 ; 10 2 ; 10 2 ; 10 2 ; 10 2 ; 10 3 ;10 4 ;10 3 ;10 4 ;10 8 ;10 4 ; 10 5; : : : 6 ; 10 8; : : : 5 ; 10 8; : : : 8 ; 10 16; : : : 24 ;::: Convergencia Lineal, con ˇ D 10 1 Lineal, con ˇ D 10 2 Superlineal: entre lineal y cuadrática Cuadrática Cúbica La convergencia de una sucesión de vectores necesita de una función que los convierta en un número. Lo usual es usar algún tipo de norma. Método de Newton-Raphson De acuerdo con todo lo expuesto hasta ahora: Sería deseable disponer de una vía sistemática y fiable de construir un modelo x D g.x/ para hallar la solución xN de la ecuación f .x/ D 0 comenzando desde cualquier x0, próximo a la solución, obviando que jg 0.x/j N < 1. Isaac Newton, Inglaterra, 1642-1727, la persona con una de las mentes más portentosas que ha dado la humanidad, fue el primero que ideó esa vía y la forma de llevarla a la práctica sencillamente. 32/75 33/75 Su idea consiste en reemplazar la función f .x/ en cada punto del proceso iterativo por el modelo de ella que define su recta tangente en ese punto (linealizar la función en un punto). En x D x1 la ecuación de la recta tangente a f .x/ es y D f .x1/ C f 0.x1/.x x1/. En x D x1, y D f .x1/ por lo que la ordenada de esta ecuación es la misma que la de f . La pendiente de f en x1 es la misma que la de y: f 0.x1/. El siguiente punto del proceso iterativo lo determina la solución de y.x/ D 0, es decir, dónde esa recta tangente corta al eje x: 0 D f .x1/ C f 0.x1/.x x1/. La solución de esta última ecuación es x D x1 34/75 f .x1/ : f 0.x1/ En la figura se describe este paso del proceso iterativo de Newton. x2 x1 x f (x) La relación general de recurrencia del método de Newton, o Newton-Raphson Joseph Raphson, Inglaterra, 1648-1715 para la solución de la ecuación f .x/ D 0 es xkC1 D xk f .xk / . f 0.xk / 35/75 Si aplicásemos el método de Newton-Raphson al problema x 3 relación de recurrencia sería: xkC1 D xk sen.x/ D 0, la xk3 sen.xk / : 3xk2 cos.xk / Este es un código de Matlab para resolver x 3 Newton. function raiz=Newton(fun,x,tol) %Newton para una variable x0=0; if nargin<3, tol=eps^0.5; end while abs(x-x0)>tol x0=x; [f df] = fun(x0); x=x0-f/df; fprintf(’ %18.15f\n’, x); end raiz=x; end sen.x/ D 0 por el método de function [f df]=Newt_1(x) f = x^3-sin(x); if nargout<2, return, end df = 3*x*x-cos(x); end Si se parte de x0 D 1;4, con 36/75 >> Newton(@Newt_1,1.4) los puntos que se obtienen con ese código son estos xk 1,092024491974 0,958975041400 0,929997813651 0,928629313033 0,928626308746 0,928626308732 El gráfico del proceso que lleva a la solución es este: Método de Newton 2.5 2 1.5 f(x) k 1 2 3 4 5 6 1 Solución 0.5 0 32 0.5 0.6 0.7 0.8 0.9 1 1 x 1.1 0 1.2 1.3 1.4 1.5 37/75 Convergencia del método de Newton Teorema Sea la función f W R ! R continúa y derivable, al menos dos veces, y un r en el que f .r/ D 0. Si f 0 .r/ ¤ 0, el método de Newton es local y cuadráticamente convergente a r. El error ei en el paso i de su proceso, ei D jxi rj, satisface ei C1 D M; i !1 e 2 i lim donde M D f 00 .r/ . 2f 0 .r/ El teorema garantiza la convergencia del método de Newton sólo si se inicia desde un punto x0 aceptable. 38/75 El método puede no funcionar si jx0 xj N es grande: Por ejemplo, considérese el problema clásico de hallar la solución de arctan.x/ D 0. Partiendo de cualquier punto del intervalo [1,39, 1,40], el método cicla obteniéndose x1 D x0, x2 D x0, x3 D x0, : : : Si x0 < 1;39, el procedimiento converge; si x0 > 1;40, diverge. En la figura se representan el por qué de esto. f (x) = arctan(x) −x0 x0 39/75 El teorema anterior impone que f 0.r/ debe ser distinta de cero para que el método de Newton converja cuadráticamente a r. Teorema Si una función f , continua y derivable m C 1 veces en Œa; b, tiene en r una raíz de multiplicidad m, el método de Newton converge linealmente a r y el error en el paso i , ei D jxi rj satisface ei C1 m 1 lim D : i !1 ei m 40/75 Ejemplo Raíz múltiple. Apliquemos Newton-Raphson a f1.x/ D x 2 y f2.x/ D x 2 2x C 1 D 0, partiendo de x0 D 2: f1.x/ D x 2 2 1,25 1,025 1,0003048780488 1,0000000464611 1,0 El error es m D 2. e5 e4 D 1;03125 1 1;0625 1 f2.x/ D x 2 1D0 D 0;5 D x0 x1 x2 x3 x4 x5 m 1 , m 1D0 2x C 1 D 0 2 1,5 1,25 1,125 1,0625 1,03125 lo que verifica que la multiplicidad es Teorema Si una función continua y derivable m C 1 veces en Œa; b tiene en r una raíz de multiplicidad m > 1, el método de Newton modificado xi C1 D xi mf .xi / f 0 .xi / converge cuadráticamente a r. Ejemplo Estudiar f .x/ D sen.x/ C x 2 cos.x/ x 2 x D 0. Partiendo de x0 D 1, modificar el código de antes para admitir raíces múltiples y resolverlo. f .x/ f 0 .x/ f 00 .x/ f 000 .x/ D sen.x/ C x 2 cos.x/ x 2 x D cos.x/ C 2x cos.x/ x 2 sen.x/ 2x 1 D sen.x/ C 2 cos.x/ 4x sen.x/ x 2 cos.x/ D cos.x/ 6 sen.x/ 6x cos.x/ C x 2 sen.x/ cada derivada se evalúa en 0. Como f 000.0/ D 2 1, ésta es una raíz triple. Comparar function raiz_Newton(fun,x,tol) function raiz=Newton_multiple_modificado(fun,x,tol,m) 41/75 42/75 Variantes del método de Newton-Raphson La primeras resultan de incorporar algún mecanismo que impida que ocurran alguno de los problemas apuntados. Recordemos que la resolución de la ecuación de Newton no sólo define un nuevo punto del proceso iterativo, xkC1, sino una dirección, f 0.xk /, a lo largo de la cual se da un paso igual a xkC1 xk : Puede que ese paso sea bueno y la función f .x/ en el nuevo punto adquiera un valor menor que el que tenía en xk ; pero también puede que mayor y el proceso diverja, siendo en cualquier caso buena la dirección calculada. 43/75 Intuitivamente, se puede incorporar un mecanismo de salvaguarda que permita que, a lo largo de la dirección calculada, siempre disminuya el valor de la función; en concreto, Si el paso completo xkC1 jf .xkC1/j < jf .xk /j. xk produce un aumento, disminuirlo hasta que Ese posible mecanismo lo plasma el algoritmo que sigue. f .xk / f 0 .xk / while .jf .xkC1 /j jf .xk /j/ do xkC1 C xk xkC1 2 xkC1 D xk end 44/75 xk+1 (xk+1 + xk )/2 xk xk+1 En la figura se ilustra un caso de cómo el mecanismo apuntado salva las dificultades que surgirían de aplicar el procedimiento de Newton sin él. El punto 0 xkC1 , que sería el que determinaría el paso de Newton, no valdría. Tampoco 0 .xkC1 C xk /=2. Sí, por fin, xkC1 D xk C 0 xkC1 Cxk 2 2 : Método de Newton por diferencias finitas 45/75 Hasta ahora hemos supuesto que se conoce la expresión de la derivada de la función f .x/. No siempre es así. Bien porque su determinación analítica es muy complicada –la función f .x/ surge de un procedimiento experimental, por ejemplo–, o, Porque el usuario del método no desea obtenerla. En el método de Newton por diferencias finitas se sustituye la derivada de la función f .x/ por su definición, f .xk C h/ h!0 h f 0 .xk / D lim f .xk / ; utilizando la fórmula de recurrencia xkC1 D xk f .xk / .f .xk C h/ f .xk //= h 46/75 Teorema Sea la función f W D ! R con dominio de definición en un intervalo abierto D y derivada continua en él. Supóngase que, para todo x 2 D, jf 0 .x/j para algún > 0. Si f .x/ D 0 tiene solución xN 2 D, existen unas constantes positivas y 0 tales N < , la que si fhk g es una sucesión de números reales tales que 0 < jhk j 0 y si jx0 xj sucesión fxk g que define xkC1 D xk f .xk / ; ak con ak D f .xk C hk / hk f .xk / ; k D 0; 1; : : : converge linealmente a x. N Si limk!1 hk D 0, la convergencia es superlineal. Si existe alguna constante c1 tal que jhk j c1 jxk xj, N o, de forma equivalente, una constante c2 tal que jhk j c2 jf .xk /j, la convergencia es cuadrática. Si existe alguna constante c3 tal que jhk j c3 jxk xk 1 j, la convergencia es al menos cuadrática cada dos pasos. 47/75 La elección de h es crítica para el buen funcionamiento del procedimiento: no debe ser muy pequeño, de tal manera que f l.xk C h/ ¤ f l.xk / ni que, dado que f es continua y su derivada también, al evaluar la función en dos puntos muy próximos, ocurra que f l.f .xk C h// ¤ f l.f .xk //. Una regla habitual es la de elegir p jhj D máx.ftip x; jxk jg; donde tip x indica la magnitud típica de x y es la precisión de la máquina en la que se utiliza el correspondiente código. 48/75 Para un problema bien escalado bastaría hacer jhj D p maq K Cuando existen problemas de precisión, también es posible recurrir a la aproximación de f 0.xk / dada por ak D f .xk C h/ f .xk 2h h/ con h D p 3 maq: K : ¡OJO! El número de veces que se evalúa la función se duplica. 49/75 Ejemplo Calculemos la solución de f .x/ D x 2 1, partiendo de x D 2, mediante Newton y Newton por diferencias finitas. function newt_x2_1 % Newton de x^2-1=0 x=2.0; x0=0.0; fx=@(x)x^2-1; derfx=@(x)2*x; while abs(x-x0)>eps x0=x; x=x0-fx(x0)/derfx(x0); fprintf(’ %18.15f\n’,x) end end function newt_x2_2 % Newton dif. finitas de x^2-1=0 x=2.0; x0=0.0; h=sqrt(eps); fx=@(x)x^2-1; while abs(x-x0)>eps x0=x; x=x0-fx(x0)/((fx(x0+h)-fx(x0))/h); fprintf(’ %18.15f\n’,x) end end 50/75 Los resultados obtenidos con uno y otro código son los de las siguiente tabla. Newton 1,250000000000000 1,025000000000000 1,000304878048780 1,000000046461147 1,000000000000001 1,000000000000000 Newton Dif. Fin. x0 x1 x2 x3 x4 x5 1,250000000000000 1,025000001341105 1,000304878371890 1,000000046463329 1,000000000000001 1,000000000000000 Como se puede observar, son prácticamente los mismos. En la práctica, si se acondicionan los parámetros convenientemente, el método de Newton y el de Newton por diferencias finitas funcionan casi igual. 51/75 Método de Newton-Raphson relajado Esta variante utiliza como dirección de búsqueda la misma en cada iteración: f 0.x0/. f (x) x3 x2 x1 x0 x Si la pendiente de f en x0 difiere significativamente de la de f en la solución, la convergencia puede ser muy lenta o no existir. La derivada de la función se puede evaluar cada n iteraciones. 52/75 Si se utiliza esta variante para resolver x 3 sen.x/ D 0, partiendo de x0 D 1;1, los puntos del proceso que se obtienen son los de la tabla. k xk 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1,100000000000000 1,000000000000000 0,950091669305211 0,936190919770347 0,931398691322275 0,929655744326761 0,929010358902363 0,928769834571150 0,928679981323918 0,928646384848608 0,928633818836375 0,928629118217882 0,928627359757290 0,928626701921047 0,928626455824360 0,928626363759310 La convergencia es bastante peor que la del método de Newton. 53/75 El código de Matlab que se ha utilizado es este. x1=1.1; tol=sqrt(eps); dx = 3*x1*x1-cos(x1); x2=1; % fx = @(x)x^3-sin(x); % función % while abs(x2-x1)>tol fprintf(’ %18.15f\n’, x1); x1=x2; x2=x1-fx(x1)/dx; end 54/75 Una variante interesante es la conocida como composite Newton, que evalúa la derivada cada dos iteraciones. function raiz=Newton_composite(fun,x,tol) % Newton composite: misma derivada cada dos iteraciones in=1; x1=0; x2=2; if nargin<3, tol=eps^0.5; end if nargin==2, x1=0; x2=x; end while abs(x2-x1)>tol x1=x2; if in [f df] = fun(x1); in = 0; else [f] = fun(x1); in = 1; end x2=x1-f/df; fprintf(’%18.15f\n’, x2); end raiz=x2; end 55/75 Si se resuelve x 3 sen.x/ D 0, partiendo de x0 D 1;4, los puntos del proceso que se obtienen con >> raiz=Newton_composite(@Newt_1,1.4) son los que siguen. >> raiz=Newton_composite(@Newt_1,1.4) 1.092024491973809 1.019398480362132 0.939380250610315 0.930994424066045 0.928635243248317 0.928626375994235 0.928626308731742 0.928626308731734 raiz = 0.928626308731734 56/75 Método de Halley Método debido a Edmund Halley, Inglaterra, 1656-1742. Su idea consiste en reemplazar la función f .x/ en cada punto del proceso iterativo por su aproximación por Taylor hasta segunda derivada en ese punto. En x D x1 la aproximación hasta segunda derivada de f .x/ es 0 y D f .x1 / C f .x1 /.x 00 x1 / C f .x1 / .x x1 /2 . 2 El siguiente punto del proceso iterativo lo determina la solución de y.x/ D 0, es decir, dónde esa función corta al eje x: 0 0 D f .x1 / C f .x1 /.x 00 x1 / C f .x1 / .x x1 /2 . 2 57/75 La solución de esta última ecuación es x D x1 C f 0 .x1 / ˙ Œf 0 .x1 /2 2f .x1 /f 00 .x1 / : f 00 .x1 / La relación general de recurrencia del método es esta: xkC1 D xk p 2f .xk /f 0.xk / 2Œf 0.xk /2 f .xk /f 00.xk / Una variante muy similar es la de Chebyshev, xkC1 D xk f .xk / f .xk /f 00 .xk / 1C f 0 .xk / 2Œf 0 .xk /2 Pafnuty Lvovich Chebyshev, Rusia, 1821-1894. Una codificación de este método para resolver x C ln.x/ D 0 es la que sigue. function HalleysMethod_log %Halleys Method; caso particular f(x) = x + ln(x) i = 1; p0 = 1; N = 100; % initial conditions error = 0.000000001; % precision required syms ’x’ % Symbolic variables, functions, and expresions in Matlab f(x) = x + log(x); % The function we are root finding. dx = diff(f); % first and second derivatives of f(x) ddx = diff(dx); while i <= N p = p0 - (f(p0)/dx(p0))*(1 - (f(p0)*ddx(p0)/dx(p0)^2))^(-1); %Implementation of Halleys Method. if (abs(p - p0)/abs(p)) < error %stopping criterion when difference between iterations is below tolerance fprintf(’Solution is %15.13f; %3.0f iterations.\n’, double(p),i) return end i = i + 1; p0 = p; % update p0 fprintf(’%15.13f; iteration %3.0f\n’, double(p0),i) end fprintf(’Solution did not coverage within %d iterations; required precision of %d \n’, N, error) end >> tic, HalleysMethod_log, toc 0.6000000000000; iteration 2 0.5676852524497; iteration 3 0.5671434553266; iteration 4 0.5671432904098; iteration 5 Solution is 0.5671432904098; 5 iterations. Elapsed time is 0.664269 seconds. La ejecución: La convergencia del método de Halley es cúbica. 58/75 59/75 Índice El problema Método de la bisección Iteración de punto fijo Velocidad de convergencia Método de Newton Variantes del método de Newton Métodos sin derivadas 60/75 Métodos sin derivadas Método de la secante Este método utiliza como dirección de búsqueda, en vez de la que marca la tangente en un punto, la que determina una recta secante a la función en dos puntos sucesivos del proceso iterativo. Si en una iteración k del proceso la ecuación de Newton es xkC1 D xk f .xk / ; f 0.xk / la idea es emplear, en vez de f 0.xk /, f .xk / xk f .xk 1/ : xk 1 La relación de recurrencia del proceso iterativo queda xkC1 D xk xk 1 f .xk /. f .xk 1/ La figura ilustra esta aproximación. f (x) xk f .xk / 61/75 xk+1 xk xk−1 x El método p de la secante converge superlinealmente a la solución con orden ˛ D .1 C 5/=2ˇ D 1; ˇ618 –la denominada razón áurea–. De hecho, si r es la ˇ f 00.r/ ˇ˛ 1 ˛ solución, ei C1 ˇ 2f 0.r/ ˇ ei . Ejemplo 62/75 Resolvamos con este método y Matlab la ecuación x 3 function raiz=Newton_sec(fun,x,tol) %Newton secante para una variable x1=x; x2=x-0.1; if nargin<3, tol=eps^0.5; end while abs(x2-x1)>tol x0=x1; x1=x2; [f df] = fun(x0,x1); x2=x1-f/df; fprintf(’ %18.15f\n’, x2); end raiz=x2; end sen.x/ D 0. function [f df]=Newt_sec_1(x0,x1) fx = @(x)x^3-sin(x); f = fx(x1); if nargout<2, return, end df = (fx(x1)-fx(x0))/(x1-x0); end La convergencia, con x0 D 1;4 y x1 D 1;4, y la instrucción de Matlab >> Newton_sec(@Newt_sec_1,1.4) es esta: k xk 1 2 3 4 5 6 7 1,065107226548895 0,978070204938512 0,937387385189276 0,929273092828631 0,928635284046901 0,928626318027714 0,928626308731868 63/75 Método de la falsa posición Conocido como Regula Falsi. Utiliza como dirección de búsqueda una recta secante a la función en dos puntos sucesivos del proceso iterativo donde la función toma valores de signo opuesto. x4 x3 x2 f (x) x x1 La velocidad de convergencia es superlineal de orden 1,618: la razón áurea de nuevo. 64/75 En determinadas circunstancias desfavorables, tanto el método de la secante como el de la falsa posición pueden presentar problemas de convergencia. En la figura se representa un ejemplo de convergencia “lenta”. x2 f (x) x x1 x3 Método de Muller 65/75 Presentado en 1956. David Eugene Muller, EE.UU., 1924-2008. Utiliza una interpolación cuadrática de tres puntos anteriores del proceso iterativo para extrapolar el nuevo punto del proceso. f (x) p(x) | x0 | x1 | x2 | x3 El procedimiento aproxima a x0, x1 y x2 el polinomio x2/2 C b.x p.x/ D a.x 66/75 x2 / C c que pasa por .x0; f .x0//, .x1; f .x1// y .x2; f .x2//. Los parámetros a, b y c se determinan mediante estas condiciones: x2 /2 C b.x0 x2 /2 C b.x1 f .x0 / D a.x0 f .x1 / D a.x1 f .x2 / D c: x2 / C c; x2 / C c y Resolviendo el sistema de 2 ecuaciones con 2 incógnitas h.x x /2 .x x /i h i hf .x / f .x /i 0 2 0 2 0 2 a D b .x x /2 .x x / f .x / f .x / 1 2 1 2 1 2 se obtiene la expresión de los parámetros a y b: a D b 1 .x0 x2 /.x1 x2 /.x0 x1 / .x1 .x1 x2 / x2 /2 .x0 x2 / f .x0 / .x0 x2 /2 f .x1 / f .x2 / : f .x2 / 67/75 Para determinar el nuevo punto del proceso se aplica la fórmula zD 2c ; p 2 b˙ b 4ac escogiéndose el signo, de los dos posibles, que garantice el denominador más grande en valor absoluto: Si b > 0, el signo positivo; si b < 0, el negativo. El nuevo punto x3 será entonces x3 D x2 C z: 68/75 Este código de Matlab implementa el método. function Muller_2(fx,x0,x1,x2) % Método de Muller tol=eps(’double’); fx0=fx(x0); fx1=fx(x1); fx2=fx(x2); iter=1; while abs(fx2)>tol c=fx2; d0=x0-x2; d1=x1-x2; det=d0*d1*(x0-x1); b=(d0*d0*(fx1-fx2)-d1*d1*(fx0-fx2))/det; a=(d1*(fx0-fx2)-d0*(fx1-fx2))/det; di=sqrt(b*b-4*a*c); isig=1; if b<0 isig=-1; end z=(-2)*c/(b+isig*di); x3=x2+z; if abs(x3-x1)<abs(x3-x0) u=x1; x1=x0; x0=u; u=fx1; fx1=fx0; fx0=u; end if abs(x3-x2)<abs(x3-x1) u=x2; x1=u; u=fx2; fx1=u; end x2=x3; fx2=fx(x2); if ~isreal(x2) fprintf(’%17.14f+%17.14fi %23.15f %4.0f\n’,real(x2),imag(x2),fx2,iter); else fprintf(’%17.15f %23.15e %4.0f\n’,x2,fx2,iter); end iter=iter+1; end end 69/75 El proceso de convergencia de la resolución de la ecuación x 3 partiendo de x0 D 1;5, x1 D 1;2 y x2 D 1;0 con sen.x/ D 0, >> Muller_2(@Newt_1,1,1.2,1.5) es el que expresa esta tabla. k xk f .xk / 1 2 3 4 5 0,921801501077277 0,928699331903730 0,928626328365127 0,928626308731740 0,928626308731734 -1,342037938307839e-02 1,451947876007775e-04 3,903326339926849e-08 1,076916333886402e-14 -1,110223024625157e-16 Obsérvese que el número de iteraciones, para la precisión que se obtiene, decrece apreciablemente comparándolo con el de otros métodos. 70/75 Si se trata de calcular una de las raíces complejas de x 3 C x 2 C x C 1 con este método resultaría lo que sigue. >> Muller_2(@Muller_2_2,0,0.1,1) -0.21428571428571+0.65595130066457i 0.668124392614188 -0.16304914264115+1.15401500391091i 0.178872980763637 0.03069686090353+0.97963558152672i-0.016395820078345 0.00106074539714+1.00049046815007i-0.003104663615609 -0.00000339553880+1.00000042898932i 0.000005933119030 -0.00000000004554+0.99999999997470i 0.000000000141669 -0.00000000000000+1.00000000000000i 0.000000000000000 >>c=[1 1 1 1]; >> roots(c) ans = -1.0000 -0.0000 + 1.0000i -0.0000 - 1.0000i >> 1 2 3 4 5 6 7 El método de Brent 71/75 En su versión más reciente fue formulado en 1973 por Richard Peirce Brent, Australia, 1946-. Anteriormente, en la década de 1960, fue propuesto por Dekker y Van Wijngaarden. Richard Peirce Brent, Australia, 1946-. Utiliza simultáneamente el métodos de la bisección y el de Muller (o secante). Se aplica a un intervalo Œa; b en cuyos extremos la función adopta signos distintos. Sigue la pista a un punto xi que es el mejor en el sentido del error hacia atrás y a un intervalo Œai ; bi para la raíz. 72/75 Se aplica una interpolación cuadrática de Lagrange inversa, es decir, no y D p.x/ sino x D p.y/, a los tres puntos .f .xi /; xi /, .f .ai /; ai / y .f .bi /; bi / con el fin de reemplazar uno de ellos con aquel –único– donde x D p.y D 0/. 1.5 Root-Finding without Derivatives | 65 Quadratic Interpolation method is attempted, and the result is used to replace one of xi , ai , bi if (1) these backward error improves and (2) the del bracketing intervalde is cut at least incon half. la If not, En esta figura compara la geometría método Muller de the Secant Method is attempted with the same goal. If it fails as well, a Bisection Method interpolación inversa. step iscuadrática taken, guaranteeing that the uncertainty is cut at least in half. y xIQI x0 x2 x M x1 x Figure 1.13 Comparison of Muller’s Method step with Inverse Quadratic Iteration step. The former is determined by an interpolating parabola y = p(x); the latter, by an interpolating parabola x = p(y). la 73/75 Si el error hacia atrás mejora y el intervalo de confinamiento de la solución se reduce al menos a la mitad, el punto obtenido reemplaza a uno de los tres vigentes. Si no se cumplen los requisitos anteriores, se intenta el método de la secante con el mismo objetivo. Si también falla, se realiza un paso del método de la bisección. 74/75 Este método lo usa fzero de Matlab. Una implementación interesante es esta. function value = Brent (a,b,machep,t,f) % Se calcula un c en [a,b] tal que f(c)=0. % % En [a,b] debe darse un cambio de signo en f(x). % La precisión de la raíz es 6*machep*abs(c)+2*t. % sa = a; sb = b; fa = f(sa); fb = f(sb); c = sa; fc = fa; e = sb-sa; d = e; while 1 if abs(fc)<abs(fb), sa=sb; sb=c; c=sa; fa=fb; fb=fc; fc=fa; end tol = 2.0*machep*abs(sb) + t; m = 0.5*(c-sb); if abs(m)<=tol || fb==0.0, break, end if abs(e)<tol || abs(fa)<=abs(fb) e = m; d = e; % Bisección, decrece poco else s = fb/fa; if sa==c, p=2.0*m*s; q=1.0-s; % Interpolación lineal else q = fa/fc; r = fb/fc; % Interpolación cuadrática p = s*(2.0*m*q*(q-r)-(sb-sa)*(r-1.0)); % inversa q = (q-1.0)*(r-1.0)*(s-1.0); end if 0.0<p, q=-q; else p=-p; end s = e; e = d; if 2.0*p<3.0*m*q-abs(tol*q) && p<abs(0.5*s*q) d = p/q; % Interpolación aceptada else e = m; d = e; % Bisección end end sa = sb; fa = fb; % Completa paso if tol<abs(d), sb=sb+d; % Nuevo punto elseif 0.0<m sb = sb + tol; else sb = sb - tol; end fb = f(sb); if (0.0<fb&&0.0<fc) || (fb<=0.0&&fc<=0.0) c = sa; fc = fa; e = sb-sa; d = e; end end value = sb; end 75/75 Probemos Brent y fzero con el problema anterior x 3 >> f1=@(x) x^3-2*x^2+x*4/3-8/27; >> tic, x=Brent(0,1,eps,eps,f1), toc x = 0.666670143350873 Elapsed time is 0.000297 seconds. >> tic, fzero(f1,[0 1],optimset(’Display’,’iter’)), toc Func-count x f(x) Procedure 2 1 0.037037 initial 3 0.888889 0.0109739 interpolation 4 0.843776 0.00555553 interpolation 5 0.798619 0.00229748 interpolation 6 0.798619 0.00229748 bisection 7 0.755766 0.00070733 interpolation 8 0.737384 0.000353658 interpolation 9 0.71944 0.000146977 interpolation 10 0.71944 0.000146977 bisection 11 0.702418 4.56958e-05 interpolation 12 0.695012 2.27741e-05 interpolation 13 0.687828 9.47672e-06 interpolation 14 0.687828 9.47672e-06 bisection 15 0.681016 2.95457e-06 interpolation 16 0.67804 1.47117e-06 interpolation 17 0.675159 6.124e-07 interpolation 18 0.675159 6.124e-07 bisection 19 0.672426 1.91084e-07 interpolation 20 0.671232 9.51209e-08 interpolation 21 0.670075 3.95999e-08 interpolation 22 0.670075 3.95999e-08 bisection 23 0.668979 1.23591e-08 interpolation 24 0.668499 6.15183e-09 interpolation 25 0.668035 2.56116e-09 interpolation 26 0.668035 2.56116e-09 bisection 27 0.667595 7.99392e-10 interpolation 28 0.667402 3.97894e-10 interpolation 29 0.667216 1.65654e-10 interpolation 30 0.667216 1.65654e-10 bisection 2x 2 C 34 x 31 0.667039 5.17053e-11 32 0.666962 2.5736e-11 33 0.666887 1.07147e-11 34 0.666887 1.07147e-11 35 0.666816 3.34444e-12 36 0.666785 1.66456e-12 37 0.666755 6.93112e-13 38 0.666755 6.93112e-13 39 0.666727 2.16271e-13 40 0.666714 1.07692e-13 41 0.666702 4.4964e-14 42 0.666702 4.4964e-14 43 0.666691 1.39888e-14 44 0.666686 6.99441e-15 45 0.666681 2.88658e-15 46 0.666681 2.88658e-15 47 0.666676 9.99201e-16 48 0.666674 3.33067e-16 49 0.666673 3.33067e-16 50 0.666673 3.33067e-16 51 0.66667 -1.11022e-16 52 0.666671 1.11022e-16 53 0.66667 0 Zero found in the interval [0, 1] ans = 0.666670143350873 Elapsed time is 0.193985 seconds. 8 27 D 0. interpolation interpolation interpolation bisection interpolation interpolation interpolation bisection interpolation interpolation interpolation bisection interpolation interpolation interpolation bisection interpolation interpolation interpolation bisection interpolation interpolation bisection
© Copyright 2025