Está en la página 1de 6

METODO DE LA SECANTE EN C++

MATERIA: METODOS NUMERICOS

PROFESOR: MIGUEL ANGEL LUCIO

ALUMNO: LUIS ALEJANDRO TREJO LEON


N. CONTROL: 18011833

CARRERA: ING MECATRONICA

ENERO 2022 – JUNIO 2022

25/04/2022
OBJETIVO
Realizar un programa en c++ que resuelva funciones con el método de la secante.

MARCO TEORICO
Determine la raíz real más pequeña de f(x) = –12 – 21x + 18x 2 – 2.4x 3 : para obtener
los valores iniciales utilizan el método gráfico (recomendación, toma los siguientes
valores -7, -6, hasta 8, y luego emplea el método de la secante para un valor de s =
0.05%.

Código del programa:


#include <iostream>
#include <cmath>
#include <math.h>
#include <stdio.h>
#define ERROR 0.000000001

using namespace std;

double calculaError(int t, double vant, double vact){


//INPUT: tipo de Error, Valor Anterior, Valor Actual
double err = 0.0;
switch (t){
case 0 :
//Error Absoluto
err = vant - vact;
break;
case 1 :
//Error relativo
err = (vant - vact) / vant;
break;
case 2 :
//Error porcentual
err = ((vant - vact) / vant) * 100;
break;
}
return err;
}
double f(double x){
return -12-21*(x)+18*(pow(x,2))-2.4*(pow(x,3));
}
int counter;
double xa, xb, res, error;
double Secante(double x1, double x0){
xa = x1;
xb = x0;
counter = 0;
do{
res = xa - ((f(xa) * (xb - xa)) / (f(xb) - f(xa)));
error = calculaError(1, xa, res);//Cambiar primer imput según el error que quiero Calcular
xa = xb;
xb = res;
counter ++;
if(res != res){
cout << "La función se indetermina: " << '\n';
return res;
}
}while(abs(error) > ERROR); //ERROR
cout << counter <<" interacion(es)." << '\n';
return res;
}
int main(int argc, char const *argv[]) {
double x1, x0;
cout << "Dame el primer valor: ";
cin >> x1;
cout << "Dame el segundo valor: ";
cin >> x0;
double raiz = Secante(x1, x0);
cout << "La raíz es: " << raiz << '\n';
return 0;
}
Ejercicio 2
Determine la menor raíz positiva de f(x) = 8 sen(x)e –x – 1: Con el método de la secante
(tres iteraciones, x i–1 = 0.5 y x i = 0.3).

Código del programa:


#include <iostream>
#include <cmath>
#include <math.h>
#include <stdio.h>
#define ERROR 0.000000001

using namespace std;


int e=2.718281828;
double calculaError(int t, double vant, double vact){
double err = 0.0;
switch (t){
case 0 :
err = vant - vact;
break;
case 1 :
err = (vant - vact) / vant;
break;
case 2 :
err = ((vant - vact) / vant) * 100;
break;
}
return err;
}

double f(double x){

return 8*sin(x)*(pow(e,-x))-1;
}

int counter;
double xa, xb, res, error;

double Secante(double x1, double x0){


xa = x1;
xb = x0;
counter = 0;
do{
res = xa - ((f(xa) * (xb - xa)) / (f(xb) - f(xa)));
error = calculaError(1, xa, res);
xa = xb;
xb = res;
counter ++;

if(res != res){
cout << "La función se indetermina: " << '\n';
return res;
}
}while(abs(error) > ERROR); //ERROR
cout << counter <<" interacion(es)." << '\n';
return res;
}

int main(int argc, char const *argv[]) {


double x1, x0;
cout << "Dame el primer valor: ";
cin >> x1;
cout << "Dame el segundo valor: ";
cin >> x0;

double raiz = Secante(x1, x0);


cout << "La raíz es: " << raiz << '\n';

return 0;
}
Conclusión

Para que el método funcione se necesita conocer la función, y dos puntos (xi, xi-1) que son las
aproximaciones iniciales. El método funciona dibujando una línea secante entre las
aproximaciones iniciales, consigue la raíz de esa línea y lo utiliza para hacer una nueva
aproximación, y vuelve a iterar utilizando esta aproximación nueva.

También podría gustarte