Sunteți pe pagina 1din 9

Metodo de bisecion

#include <iostream>
#include <iomanip> //setprecision
#include <cmath>

#define PRECISION 6
using namespace std;
/* run this program using the console pauser or add your own getch,
system("pause") or input loop */
void tabula(double a, double b);
double f(double x);

int main()
{
cout<< setprecision(PRECISION);
cout<<"\n calculo de las raices de una funcion aplicando el metodo de
biseccion \n"<<endl;
cout<<"\n ingrese el intervalo inicial [a,b]:"<<endl;

double a,b,tolerancia;

cout<<"\na = ";
cin>>a;

cout<<"\nb = ";
cin>>b;

tabula(a, b);

cout<<"\nescoja el intervalo adecuado "<<endl;


cout<<"\n a=";
cin>>a;

cout<<"b =";
cin>>b;

double xr;

if(f(a)*f(b)>0)
{
cout<<"\nNo se puede aplicar el metodo de la biseccion";
cout<<"porque f("<<a<<") y f("<<b<<") tienen el mismo
signo"<<endl;

}else{
cout<<"tolerancia = ";
cin>>tolerancia;
cout<<"a\tb\tx\tf(a)\tf(b)\t\tf(x)\n"<<endl;
do{
xr= (a+ b)/2.0;
cout<< a << "\t" << b << "\t" << xr << "\t" << f(a) << "\t"
<<f(b) << "\t" << f(xr) << endl;

if(fabs(f(xr)) <=tolerancia)
{
cout<<"\n\npara una tolerancia de "<< tolerancia<<"la raiz de
f es : "<< xr <<endl;
break;
}else

{
if(f(xr)*f(a) > 0){
a=xr;
}else{
if (f(xr)*f(b)>0){
b=xr;
}
}
}

}while(1);
}

cin.get();
cin.get();
return 0;
}
#define INTERVALOS 10
void tabula(double a, double b)
{
int puntos = INTERVALOS +1;
double ancho = (b - a)/INTERVALOS;

cout<< "\n\tx\tf(x)" <<endl;


for(int i=0; i < puntos;i++)
{
cout<< "\t" << a <<"\t"<<f(a)<<endl;
a= a + ancho;

}
}
double f(double x)
{
return exp(-1 * x) - cos(3*x)-0.5;
}
Mtodo newton raphson
#include <iostream>
#include <iomanip> //setprecision
#include <cmath>
#include <windows.h>

#define PRECISION 10
#define MAX_ITERACIONES 100
#define INTERVALOS 6

using namespace std ;

void tabula(double a , double b ,int intervalos);


double f(double x );
double f_derivada(double x)
void newton_raphson(double x0, double tolerancia, int max_iteraciones);

int main()
{
double a;
double b;

double tolerancia;
double x0;

cout<<setprecision(PRECISION);
cout<<"\nCalculo de las raices de una funcion aplicando el metodo de
newton raphson\n";
cout<<"\ningrese el intervalo inicial [a,b]: "<<endl;

//se ingresa le intervalo


cout<<"\na= ";
cin>>a;

cout<<"\nb = ";
cin>>b;
//se trabulan los valores de f para INTERVALOS intervalos
tabula(a,b,INTERVALOS);
//se pide elegir una aproximacion inicial
cout<<"\nescoja el punto inicial adecuado : x0 = ";
cin>>x0;
//se pide ingresar la tolerancia
cout<<"tolerancia = ";
cin>>tolerancia;
//newton raphson
newton_raphson(x0,tolerancia, MAX_ITERACIONES);

cin.get();
cin.get();

return 0;

}
void tabula(double a,double b, int intervalos)
{
int puntos = intervalos +1;

double ancho = (b-a)/intervalos;


cout<<"\n\tx\t\tf(x)"<<endl;
for(int i=0;i<puntos;i++){

cout<<"\t"<<a<<"\t\t"<<f(a)<<endl;
a=a+ancho;

}
}
double f(double x)
{
return esp(cos(x))/1.5-1;

}
double f_derivada(double x)
{
return esp(cos(x))*(1-xsin(x))1.5;
}
void newton_raphson(double x0,double tolerancia,int max_iteraciones);
{
double x1;//siguiente aproximacion
double error;// diferencia entre dos aproximaciones sucesivas:x1-x0

int iteracion; //# de iteraciones


bool converge = true;
//se imprime los valores de la primera aproximacion
cout<<"\nAproximacion inicial: \n";
cout<<"x0 ="<<x0<<"\n";
cout<<"f(x0)= "<<f(x0)<<"\n";
cout<<"f'(x0) ="<<f_derivada(x0)<<endl;

iteracion=1;
do{
if(iteracion>max_iteraciones){
converge=false;//se sobre pasa la maxima cantidad de
iteraciones permitidas

break;
}else{
x1=x0-f(x0)/f_derivada(x0);//calculo de la siguiente
aproximacion susecivas
error=fabs(x1-x0);//el error es la diferencia entre dos
aproximaciones sucesivas
//se imprime los valores de la siguiente aproximacion
x1,f(x1),f_derivada(x1),error

cout<<"\na";
sleep (500);
cout<<"\n\nIteraciones #"<<iteracion<<endl;
cout<<"\nx"<<iteracion<<"

= "<<x1<<"\n"

cout<<"\nf(x"<<iteracion<<") = "<<f(x1)<<"\n"
cout<<"\nf'(x"<<iteracion<<:") =
"<<f_derivada(x1)<<"\n"

cout<<"error = "<<endl;
//la diferencia entre dos aproximciones sucesivas es
tambien conocido como error
//la condicion de terminacion consiste en que el error
debe ser c= que la tolerancia dada
//si se cumple la condicion de terminacion, se ha
encontrado la raiz aproximada buscada
if(error<=tolerancia){
converge=true;
break;
//si no se cumple el criterio de determinacion, se
pasa a la siguiente intercesion

}else{
x0=x1;
iteracion++ ;

}
}
}while(1);
//respuesta final
cout<<"\a";
sleep (500);
if(converge){
cout<<"\n\nPara una tolerancia de "<<tolerancia<<"la raiz
aproximada de f es= "<<x1<<endl;
}else{
cout<<"\n\nSe sobrepaso la maxima cantidad de iteraciones
permitidas "<<endl;
}

S-ar putea să vă placă și