¡Ayuda! Metodo de Biseccion en c o c++ ¡ Urgente!!
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!
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!
//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);
}
//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);
}
// 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
// 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