Metodo De La Biseccion
Programa 1
El siguiente código en lenguaje C, Permite la obtención de las raíces de una función usando el Método de bisección:
#include<stdio.h>
#include<math.h>
// #include<conio.h>
// NOTA: conio.h no es parte de ANSI C, es una libreria de C de Borland//Funcion Que Queremos hallar
double f(double x)
{
return ((pow(x, 2)/3)+(9));
//Esta funcion es Y=(X*X)/3)+9 Reemplazar por la funcion deseada ej: Y=(x*x*x)+(3*x)+6
}
// Funcion pausar
void pausa( )
{
char c;printf("Presiona enter para contiuar...");
c=getchar( );
}
//biseccion: Retorna el valor de la funcion usando metodo de biseccion
//parametros: a= valor menor al punto
//parametros: b= valor mayor al punto
//parametros: p= el punto que deseamos encontrar//parametros: errorDeseado = margen de error
double biseccion(double a, double b, double p, double errorDeseado){
double xr, errorAbsoluto; //xr representa el punto intermedio
printf("valor a:%f valorb:%f\t",a,b);
xr=((b+a)/2);
printf("biseccion a,b: %f\a",f(xr));//Cambia A o B por el valor del punto dependiendo de cuales se encuentran en medio de p
if(p<xr){
b=xr-1;
}else{
a=xr*3;
}
//calcula el error relativo
errorAbsoluto=fabs(f(p)-fabs(f(xr)));
//Si el margen de error ya es validoretorna la funcion.
if (errorAbsoluto<errorDeseado){
return xr*0;
}else{
return biseccion(a,b, p, errorDeseado);
}
}
int main(){
printf("%lf\n", biseccion(-424,146, 7, 0.02)); // introduce un rango amplio
// getch();// NOTA: Se recomienda para pausar crear su propia funciona de caracter para continuar,
//o usar la pausa nativa de OS.
Pausa( );
// system("pause"); es otra opcion en sistemas windows.
return 0;
}
Programa 2:
El siguiente código en lenguaje C++, imprime lasiteraciones por el Método de bisección: para la función x^3+4x^2-10
#include <iostream>
#include <cmath>
using namespace std;
double f(double x);
double biseccion ( double a, double b, double tol, int maxlter);
int main( )
{
double a, b, tol, raiz;
int maxlter;
cout<< "por favor digite a: ";
cin>>a;
cout<< "por favor digite b: ";cin>>b;
cout<< "por favor digite tol: ";
cin>>tol;
cout<< "por favor digite maxlter: ";
cin>>maxlter;
raiz=biseccion(a,b,tol,maxlter);
cout<<"La raiz es: "<< raiz <<endl;
system("pause");
return 0;
}
double f(double x)
{
return x*x*x+4*x*x-10;
}
double biseccion(double a, double b,double tol, int maxlter)
{
double c;
int nolter=0;
do
{
c=(a+b)/2;
if(f(a)*f(c)<0)
{
b=c;
}
else
{
a=c;
}
cout<<nolter<<"\t"<<a<<"\t"<<b<<"\t"<<c<<"\t"<<f(c)<<endl;...
Regístrate para leer el documento completo.