¡Ayuda! Metodo de Biseccion en c o c++ ¡ Urgente!!

H?or
16 de Mayo del 2005
Así es muchachos y muchachas, dones y doñas.
Necesito el metodo de biseccion para mañana
que pida un polinomio por mucho de 5 grado y que de ahi saque la raiz..... Metodo de biseccion!

Gabriel
16 de Mayo del 2005
//Aqui esta si no es muy tarde
//Mi nombre es Gabriel y mi correo
//[email protected]
# include <stdio.h>
# include <stdlib.h>


void Horner(int n, float pol[],float x0, float *y)
{

int j;

*y= pol[n];

for(j=n-1; j>0; j--)
{

*y=x0*(*y)+pol[j];
}

*y=x0*(*y)+pol[0];

}
////////////////////////////////////////////////////////////////////////////////
int Biseccion(float a, float b, float TOL, int N0, int n, float pol[], float *P)
{

int i=1;
float Fa, Fp,Fb;

Horner(n,pol,a,&Fa);
Horner(n,pol,b,&Fb);
//con desiciones verifico si algunos de los puntos del intervalo es una raiz
if(Fa==0)
{
printf("El valor de a=%f es una raizn",a);
exit(0);
}
if(Fb==0)
{
printf("El valor de b=%f es una raizn",b);
exit(0);
}
if(Fa*Fb>0)//verifico si la raiz esta el intervalo
{

printf("Error, la raiz no se encuentra en este intervalon");

exit(0);
}

while(i<=N0)
{

*P= a +(b-a)/2;

Horner(n,pol,*P,&Fp);

if ( Fp==0 || (b-a)/2 < TOL)
{

printf("La raiz aproximada es %f n",*P);
printf("Se realizaron %d iteracionesn",i);
exit(0);
}
if(Fa*Fp > 0)
{
a=*P;
Fa=Fp;
}
else
b=*P;
i++;
}
return i;

}
///////////////////////////////////////////////////////////////////////
void main ()
{
int n,j,N0,iteraciones;

float pol[50];

float a, b, TOL, P;

printf("tMETODO DE BISECCION PARA CALCULAR LAS RAICES DE UN POLINOMIOnn");
printf("Grado del polinomio ");
scanf("%d",&n);

for(j=n;j>=0;j--)
{
printf("coeficiente de X^%d ",j);
scanf("%f",&pol[j]);
}

printf("Dame el punto inicial a = ");
scanf("%f",&a);

printf("Dame el punto final b = ");
scanf("%f",&b);

printf("Dame la tolerancia ");
scanf("%f",&TOL);

printf("Dame el numero de iteraciones ");
scanf("%d",&N0);

iteraciones=Biseccion(a,b,TOL,N0,n,pol,&P);
printf("nLa raiz aproximada es : %f , se realizaron %d iteracionesn",P,iteraciones);

}

Noel Solw
16 de Mayo del 2005
// program k2c6b.CPP - page 39
// numerical solution - bisection
// solve the equation : x^3 + 7xý + 6x - 14 = 0.
// 7/7/2001
// written in Borland CPP ver 3.1

#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#include <math.h>

const double aprox = 0.0001;
const char *sign[2] = {" - "," + "};
int a2 = 7, a1 = 6,a0 = -14;

double f(double x) // aqui podes introducir la funcion
{ // que quieras
return ((x+a2)*x+a1)*x+a0;
} // F

int FindRootArea()
{
double previous = f(0);
for(int x = 1;; x++)
{
double now = f(x);
if(previous*now <= 0)
break;
previous = now;
}
return x;
} // FIND ROOT AREA

double Process(double a, double b)
{
double c = (a + b)/2;
cout << setw(15) << a << setw(15) << c << setw(15) << b
<< setw(15) << b-a << endl;
if(fabs(a-b)<aprox)
return c;
if(f(a)*f(c) <= 0)
return Process(a,c);
else
return Process(c,b);
} // PROCESS

void main()
{
clrscr();
cout.setf(ios::fixed);
cout << setprecision(5);
cout << "numerical solution - bisection " << endl << endl;
cout << "solve the equation : " << "x^3"
<< sign[a2 > 0] << abs(a2) << "xý"
<< sign[a1 > 0] << abs(a1) << "x"
<< sign[a0 > 0] << abs(a0) << " = 0 "
<< " aproximation = " << aprox << endl << endl;
double b = FindRootArea();
double a = b-1;
double x = Process(a,b);
cout << endl;
cout << "x = " << x << setw(15) << "f(" << x << ") = " << f(x) << endl;
cout << endl << endl;
getch();
} // MAIN


Radical_Edgnet
16 de Mayo del 2005
La tarea se hace en la casa xD ... es cuestion de seguir in simple algoritmo .. por ahi en la red busque info del metodo de Biseccion y vera que es facil desarrollarlo por udd mismo.

Saludos