En análisis numérico el método de la secante es un método para encontrar los ceros de una función de forma iterativa.
Es una variación del método de Newton-Raphson donde en vez de calcular la derivada de la función en el punto de estudio, teniendo en mente la definición de derivada, se aproxima la pendiente a la recta que une la función evaluada en el punto de estudio y en el punto de la iteración anterior. Este método es de especial interés cuando el coste computacional de derivar la función de estudio y evaluarla es demasiado elevado, por lo que el método de Newton no resulta atractivo.
En otras palabras, el método de la secante es un algoritmo de la raíz de investigación que utiliza una serie de raíces de las líneas secantes para aproximar mejor la raíz de una función f. El método de la secante se puede considerar como una aproximación en diferencias finitas del método de Newton-Raphson. Sin embargo, este método fue desarrollado independientemente de este último.
Experiencia :
Mi experiencia el la utilización es que de forma grafica y en forma de calculo de tabla es bastante conveniente para saber cuantas interacciones puede tenes el calculo de dos números según la función establecida, y el gusto por este método es su fácil utilización
Porque se incluyo en la presentación:
Por el manejo básico de datos de forma técnica al encontrar los términos de una función y el desglosamiento de resultados dependiendo de los intervalos ingresados y se aplica la función que se converge entre los dos puntos .
Algoritmo del método y código en C++ y en MatLab.
Código c++
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
cout << " f(x) = e-x - ln(x) " << "\n" << "p0= ? p1=? tol=10^-10 i=100" << "\n";
double p0 = 0, p1 = 0, q0 = 0, q1 = 0, p = 0, fp = 0, e = 0;
int y = 2;
cout << "Ingrese p0" <<endl;
cin >> p0 ;
cout << "Ingrese p1" <<endl;
cin >> p1 ;
q0 = pow(2.718281828,-p0)-log(p0);
q1 = pow(2.718281828,-p1)-log(p1);
cout << "| i | p0 | p1 | q0 | q1 | p | f(p) | Error | Error < tol |" << "\n";
for (size_t i = 0; i < 100; i++)
{
p = p1 - q1 * (p1 - p0) / (q1 - q0);
fp= pow(2.718281828,-p)-log(p);
e = abs((p - p1) / p);
if (e<0.000000001)
{
if (y<10)
{
cout << "| " << y << " ";
printf("|%.12lf", p0);
printf("|%.12lf", p1);
printf("|%.12lf", q0);
printf("|%.12lf", q1);
printf("|%.12lf", p);
printf("|%.12lf", fp);
printf("|%.12lf", e);
cout << "| Verdadero |" << "\n";
break;
}
if (y>9 && y<100)
{
cout << "|" << y << " ";
printf("|%.12lf", p0);
printf("|%.12lf", p1);
printf("|%.12lf", q0);
printf("|%.12lf", q1);
printf("|%.12lf", p);
printf("|%.12lf", fp);
printf("|%.12lf", e);
cout << "| Verdadero |" << "\n";
break;
}
if (y>99 && y<1000)
{
cout << "|" << y;
printf("|%.12lf", p0);
printf("|%.12lf", p1);
printf("|%.12lf", q0);
printf("|%.12lf", q1);
printf("|%.12lf", p);
printf("|%.12lf", fp);
printf("|%.12lf", e);
cout << "| Verdadero |" << "\n";
break;
}
}
if(e > 0.000000001)
{
if (y<10)
{
cout << "| " << y << " ";
printf("|%.12lf", p0);
printf("|%.12lf", p1);
printf("|%.12lf", q0);
printf("|%.12lf", q1);
printf("|%.12lf", p);
printf("|%.12lf", fp);
printf("|%.12lf", e);
cout << "| Falso |" << "\n";
}
if (y>9 && y<100)
{
cout << "|" << y << " ";
printf("|%.12lf", p0);
printf("|%.12lf", p1);
printf("|%.12lf", q0);
printf("|%.12lf", q1);
printf("|%.12lf", p);
printf("|%.12lf", fp);
printf("|%.12lf", e);
cout << "| Falso |" << "\n";
}
if (y>99 && y<1000)
{
cout << "|" << y;
printf("|%.12lf", p0);
printf("|%.12lf", p1);
printf("|%.12lf", q0);
printf("|%.12lf", q1);
printf("|%.12lf", p);
printf("|%.12lf", fp);
printf("|%.12lf", e);
cout << "| Falso |" << "\n";
}
}
p0 = p1;
q0 = q1;
p1 = p;
q1 = fp;
y = y + 1;
}
}
Matlab
clear;
clc;
v = 1;
p0 = -0.1;
p1 = -1;
it = 100;
tol = 10^-10;
disp('ln(x^2+1) - e^(0.4x) * cos(pi*x)');
disp('p0= -0.1 p1= -1 tol= 10^-10 it= 100');
disp(' | i | P0 | P1 | P | f(p) | E |'); q0
= log((p0.^2)+1)-2.718281828.^(0.4*(p0))*cos(3.141592654*p0);
q1 =log((p1.^2)+1)-2.718281828.^(0.4*(p1))*cos(3.141592654*p1);
for i=0:it
p = p1 - q1 .* (p1-p0) / (q1-q0);
fp = log(p.^2+1)-2.718281828.^(0.4.*(p)).*cos(3.141592654.*p);
e = abs((p - p1)/p); if
(e<tol)
t=[v,p0,p1,p,fp,e]; disp(t);
break;
end
if (e>tol)
t=[v,p0,p1,p,fp,e]; disp(t);
end
end p0=p1;
q0=q1;
p1=p;
q1=fp;
v=v+1;
v = 1;
p0 = 0.1;
p1 = 1;
it = 100;
tol = 10^-10;
disp('ln(x^2+1) - e^(0.4x) * cos(pi*x)'); disp('p0= 0.1 p1= 1 tol=
10^-10 it= 100');
disp(' | i | P0 | P1 | P | f(p) | E |'); q0
= log((p0.^2)+1)-2.718281828.^(0.4*(p0))*cos(3.141592654*p0);
q1 =log((p1.^2)+1)-2.718281828.^(0.4*(p1))*cos(3.141592654*p1);
for i=0:it
p = p1 - q1 .* (p1-p0) / (q1-q0);
fp = log(p.^2+1)-2.718281828.^(0.4.*(p)).*cos(3.141592654.*p);
e = abs((p - p1)/p); if
(e<tol)
t=[v,p0,p1,p,fp,e]; disp(t);
break;
end
if (e>tol)
end
t=[v,p0,p1,p,fp,e]; disp(t);
end
p0=p1;
q0=q1;
p1=p;
q1=fp;
v=v+1;
v = 1;
p0 = 0.6;
p1 = 1.5;
it = 100;
tol = 10^-10;
disp('ln(x^2+1) - e^(0.4x) * cos(pi*x)'); disp('p0= 0.1 p1= 1 tol=
10^-10 it= 100');
disp(' | i | P0 | P1 | P | f(p) | E |'); q0
= log((p0.^2)+1)-2.718281828.^(0.4*(p0))*cos(3.141592654*p0);
q1 =log((p1.^2)+1)-2.718281828.^(0.4*(p1))*cos(3.141592654*p1);
for i=0:it
p = p1 - q1 .* (p1-p0) / (q1-q0);
fp = log(p.^2+1)-2.718281828.^(0.4.*(p)).*cos(3.141592654.*p);
e = abs((p - p1)/p); if
(e<tol)
t=[v,p0,p1,p,fp,e]; disp(t);
break;
end
if (e>tol)
t=[v,p0,p1,p,fp,e]; disp(t);
end
end p0=p1;
q0=q1;
p1=p;
q1=fp;
v=v+1;
Ejemplos:
1 C++ y Mathlab
Ventajas sobre otros métodos:
1.Al implementar este método, no es necesario conocer la derivada de la función y es de rápida convergencia.
2.A pesar de necesitar de dos puntos de partida, pueden ser aleatorios y no necesariamente tiene que haber cambio de signo entre ellos.
3.Converge más rápido que los métodos lineales.
Desventajas sobre otros métodos:
1.No siempre converge ya que puede ocurrir que la secante produzca divergencia.
2.No converge más rápido que los métodos cuadráticos.
Origen del Método:
La historia del descubrimiento de la solución algebraica de la cubica enfrento a dos grandes rivales italianos: Cardano y Tartaglia hacia 1540, y Ferrari, alumno y secretario de Cardano resolvió en 1545 la ecuación de cuarto grado
Enlaces con mas información respecto al tema
https://reynacampos.wordpress.com/2014/03/19/metodo-de-la-secante/#:~:text=Antecedentes%20del%20M%C3%A9todo%20de%20la,la%20ecuaci%C3%B3n%20de%20cuarto%20grado.
No hay comentarios.:
Publicar un comentario