Está en la página 1de 6

EJERCICIOS DEL METODO DE LA SECANTE:

Método de la Secante en
Matlab (código).
6 enero, 201416 mayo, 2014 / Julio César

[Recuerda que en este Blog los enlaces para la descarga del código se encuentran al final del artículo.]

Continuamos con los métodos utilizados para hallar raíces de ecuaciones y hoy es el turno del conocido método de la secante, cómo vimos
anteriormente el Método de Newton-Raphson es uno (sino el) método mas usado para hallar las raíces de una función real bien definida, pero
uno de los potenciales inconvenientes de implementar este algoritmo es el echo de tener que evaluar la derivada de la función, esto naturalmente
no representa un problema si hablamos de polinomios y otras funciones simples, pero en algunos casos nos encontramos con ciertas funciones
que no son tan elementales y la función es complicada y difícil de evaluar y claramente de derivar, para evitar un poco el costo computacional
de hallar dichas derivadas, estas pueden ser aproximadas mediante diferencias finitas.

(recuerden que el código se encuentra al final para su descarga)

Como en publicaciones anteriores, intentaré explicar e ilustrar el método fácilmente, entonces la pregunta es ¿en que consiste el método de
la secante? muy bien, este método por lo regular es enseñado después del método de Newton-Raphson por lo que podemos partir del echo de
que también se intenta llegar a la raíz mediante una recta que en el caso de Newton es tangente a la curva en el punto [Xn,F(Xn)] pero cómo
el nombre lo dice este método se basa en una aproximación a esa tangente que se obtenía con la derivada y que ahora será una secante a la
curva definida por la función, no se preocupen, lo veremos en la siguiente figura.

Primera iteración del método de la secante.

El método necesita de dos valores iniciales, Xo y X1 para el ejemplo de la imagen, entonces se traza una recta para [X0,F(Xo)] y [X1, F(X1)]
, cuando se tiene esta recta entonces la abscisa Xn+1 viene dada por el lugar donde la recta corta al eje X, en el ejemplo de la figura, como
vemos, la abscisa Xn+1 será X2 y es claro que X2 es el lugar donde la recta cortó el eje X, luego el proceso se repite y la siguiente recta que
se traza será entre el punto [X1,F(X1)] y [X2, F(X2)] y Xn+1 será el lugar donde esta nueva recta corte al eje.

Hablando matemáticamente tenemos la aproximación de la derivada F'(X) para la figura mediante diferencias finitas como:
Con la fórmula de Newton-Raphson:

entonces reemplazando en ella la aproximación de diferencias finitas llegamos a:

si se siente perdido con la formula anterior entonces la puede relacionar con el ejemplo que hemos tratado donde las variables son entonces X0
X1 y X2, así:

el resto del método depende ya de elegir una nivel de precisión aceptable y de realizar algún tipo de visualización para que el usuario pueda
determinar los valores iniciales X0 y X1.

CÓDIGO EN MATLAB.

Luego de haber visto algo de “teoría” y comprender cómo funciona el método no queda mas que implementarlo en Matlab (a eso vinimos
¿no?) entonces inicialmente declaramos a X como variable simbólica (syms) y en segundo lugar cómo siempre me gusta (al igual que en los
demás métodos donde se necesita de un valor inicial), realizar una visualización del comportamiento de la función para que de esta forma se
pueda hacer una elección adecuada de los valores, recordemos que la convergencia de estos métodos se ve bastante afectada por la elección de
esos valores, entonces:
A continuación, luego de que el usuario ha ingresado la función y después de ver el comportamiento de la curva que esta define, procedemos
a pedir los valores para Xo y X1:

Sabiendo que el usuario ya ha establecido los valores iniciales necesarios, entonces definimos los valores iniciales de la constante de ‘tolerancia’
y el error, estos son valores arbitrarios, es decir para que al menos se cumpla el primer ciclo while, el valor de la tolerancia o precisión puede
ser definido por nosotros o el usuario, y debe ser un valor bastante bueno, aunque depende de nuestra aplicación.

Finalmente dentro del bucle while aplicamos la formula de la secante para calcular el Xn+1, posteriormente, con este nuevo valor calculamos
el error de la aproximación y para terminar reasignamos los valores de las variables y listo, el valor retornado debería ser el valor aproximado
de la raíz si la hay.

EJEMPLO.

Ahora estaría bien, al igual que en los artículos anteriores, comprobar el comportamiento del código que desarrollamos, y para eso proponemos
hallar la raíz de la función:
Esta función ya la hemos tratado en métodos anteriores y sabemos que su raíz se encuentra en X=0.56714329, entonces sin mas preámbulo, lo
que hacemos a continuación es llamar la función ‘Secante’ en la command window, asegurándonos de tener el directorio con la dirección
correcta donde se encuentra el archivo, así:

Inmediatamente después de ingresar la función, el programa nos pedirá un par de limites, superior e inferior respectivamente, aunque este paso
no pertenece al método me parece una buena práctica cuando de estimaciones se trata, pero de igual forma ustedes pueden modificar esa parte
el código.

Para este ejemplo escogimos los limites convenientemente como 0 y 2, así podemos apreciar bien el lugar de corte de la función con el eje X
(raíz), resultado la siguiente gráfica:
A continuación el programa nos pedirá ahora que ingresemos las dos estimaciones, para Xo y X1, en nuestro caso, luego de observar la gráfica
anterior, los valores serán 0 y 1 respectivamente, luego de ingresar este par de valores y dar ‘ENTER’ el programa nos arrojará el valor de la
raíz que muestra la imagen.

cómo les había comentado anteriormente el número de decimales que muestra Matlab puede ser modificado, en mi caso he puesto que muestre
bastantes para hacer mayor claridad sobre la precisión, cómo era de esperar el valor que nos entregó el programa es el valor de la raíz con una
buena precisión, para confirmar si evaluamos este valor en la función obtenemos:

Un 1 con 13 ceros a la izquierda, para mi un muy buen aproximado, de esta forma terminamos lo referente a la implementación y explicación
de este importante método, como siempre el código de esta práctica lo pueden encontrar en este enlace para su descarga y espero que este
articulo les sea de ayuda. Recuerden que “tomarse el tiempo para comentar, es una forma de agradecer el tiempo del autor para realizar este
documento”.

Ejemplo 2

Metodo de la Secante

function secante
global fun
fprintf('Metodo de la secante:\n');
fun=input('Ingrese la funcion:\n','s');
x0=input('Ingrese el primer punto inicial:\n');
x1=input('Ingrese el segundo punto inicial:\n');
tol=input('Ingrese la tol:\n');
it=0;
fprintf('it x0 x1 x2 x1-x2');
while(it<50) it="it+1;" x="x0;" f0="eval(fun);" x="x1;" f1="eval(fun);" x2="(x0*f1-
x1*f0)/(f1-f0);"> fprintf('el procedimiento se completo satisfactoriamente:\n');
break
end
x0=x1;
x1=x2;
end
fprintf('la raiz buscada es=%15.9f\n',x2);
ezplot(fun),
grid on
Ejemplo:

Metodo de la secante:

Ingrese la funcion:

x^2+10*cos(x)

Ingrese el primer punto inicial:

1.5

Ingrese el segundo punto inicial:

Ingrese la tol:

10^(-5)

el procedimiento se completo satisfactoriamente:

la raiz buscada es= 1.968872938

También podría gustarte