Documente Academic
Documente Profesional
Documente Cultură
#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<<"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;
}
}
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
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;
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;
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
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;
}