MÉTODO DE DISECCIÓN
Esta técnica se basa en el teorema del valor intermedio y parte del supuesto
que y tienen signos opuestos.
Básicamente el Teorema del Valor Intermedio nos dice que toda función continúa en un intervalo cerrado, una vez que alcanzó ciertos valores en los extremos del intervalo,entonces debe alcanzar todos los valores intermedios.
El método de la bisección se basa en este teorema y se emplea para aproximar ceros de funciones. Supóngase que queremos encontrar los ceros de una función f(x) continua. Dados dos puntos a y b tal que f(a) y f(b) tengan signos distintos, sabemos por el Teorema de Bolzano que f(x) debe tener, al menos, una raíz en el intervalo [a; b]. El método de bisección divide el intervalo en dos, usando un tercer punto
En este momento,existen dos posibilidades: f(a) y f(c), ó f(c) y f(b) tienen distinto signo. El método de bisección se aplica al subintervalo donde el cambio de signo ocurre. Este proceso puede aplicarse tantas veces como sea necesario para alcanzar la precisión que se requiera.
En resumen
1.- Dan como valores un intervalo y se debe garantizar que en ese intervalo esta la raiz.
2.- Dan una tolerancia la cual nos indica cuando el resultado obtenido es correcto.
3.- Dan el numero de iteraciones.
INCONVENIENTES:
SOLO CALCULA UNA DE LAS RAICES.
AQUI DEJO UN CODIGO EL CUAL ELABORE EN EL LABORATORIO
#include<iostream.h>
#include <conio.h>
#include <math.h>
class bisec
{
private: float a,b,w;
double e;
public: void inic();
void valores();
float f(float , float );
float calculo();
};
void bisec :: inic(){
a=0;
b=0;
//c=0;
e=0;
}
void bisec :: valores(){
cout << "Ingrese el valor de la raiz a calcular: "<<endl;
cin>>w;
cout << "Ingrese el valor de a: "<<endl;
cin>>a;
cout << "Ingrese el valor de b: "<<endl;
cin>>b;
cout << "Ingrese error: ";
cin>>e;
}
float bisec :: f(float x, float n){
return pow(x,2) - n;
}
float bisec :: calculo(){
int i=0;
float c,total;
double ea;
cout<<"\ti"<<"\txi"<<"\t\txi+1"<<"\t\tf(xi)"<<"\t\tEa"<<endl;
do{
c=(a+b)/2;
total=f(a,w)*f(c,w);
cout.precision(5);
cout<<"\t"<<i<<"\t"<<a<<"\t\t"<<b<<"\t\t"<<c<<"\t\t"<<ea<<endl;
if(total < 0)
b=c;
else
a=c;
ea = fabs((a-b)*100/a );
i++;
}while(ea>e);
return c;
}
void main()
{
bisec fz;
fz.valores();
cout << "La raiz es: " <<fz.calculo();
getch();
}
#include <conio.h>
#include <math.h>
class bisec
{
private: float a,b,w;
double e;
public: void inic();
void valores();
float f(float , float );
float calculo();
};
void bisec :: inic(){
a=0;
b=0;
//c=0;
e=0;
}
void bisec :: valores(){
cout << "Ingrese el valor de la raiz a calcular: "<<endl;
cin>>w;
cout << "Ingrese el valor de a: "<<endl;
cin>>a;
cout << "Ingrese el valor de b: "<<endl;
cin>>b;
cout << "Ingrese error: ";
cin>>e;
}
float bisec :: f(float x, float n){
return pow(x,2) - n;
}
float bisec :: calculo(){
int i=0;
float c,total;
double ea;
cout<<"\ti"<<"\txi"<<"\t\txi+1"<<"\t\tf(xi)"<<"\t\tEa"<<endl;
do{
c=(a+b)/2;
total=f(a,w)*f(c,w);
cout.precision(5);
cout<<"\t"<<i<<"\t"<<a<<"\t\t"<<b<<"\t\t"<<c<<"\t\t"<<ea<<endl;
if(total < 0)
b=c;
else
a=c;
ea = fabs((a-b)*100/a );
i++;
}while(ea>e);
return c;
}
void main()
{
bisec fz;
fz.valores();
cout << "La raiz es: " <<fz.calculo();
getch();
}