sábado, 3 de março de 2012

metodos bissecção , newton , secantes e haley



#include "stdio.h"
#include "stdlib.h"
#include "math.h"

double funcao3(double x)
{
return pow(x,5)-6;



}


double funcao2(double x)
{
return (2*cos(x))-pow(2.718281,x/2);



}


double funcao1(double x)
{
return (x/2)-tan(x);



}

double derifuncao1(double x)
{
return (1/2)-(1/(cos(x)*cos(x)));



}



double derifuncao2(double x)
{
return (-2*sin(x))-(pow(2.718281,x/2))/2;



}

double derifuncao3(double x)
{
return 5*pow(x,4.0);



}

double derisecfuncao1(double x)
{
return (-2*sin(x))/pow(cos(x),3);



}

double derisecfuncao2(double x)
{
return (-2*cos(x))-(pow(2.718281,x/2))/4;



}

double derisecfuncao3(double x)
{
return 20*pow(x,3.0);



}


double bisseccao3(double a,double b,double ERRO)
{
double p=a+((b-a)/2);
if(((b-a)/2)< ERRO)
{

return p;
}
else
{

if(funcao3(a)*funcao3(p)< 0)
return bisseccao3(a, p,ERRO);
else
return bisseccao3(p, b,ERRO);



}





}


double bisseccao2(double a,double b,double ERRO)
{
double p=a+((b-a)/2);
if(((b-a)/2)< ERRO)
{

return p;
}
else
{

if(funcao2(a)*funcao2(p)< 0)
return bisseccao2(a, p,ERRO);
else
return bisseccao2(p, b,ERRO);



}





}

double bisseccao1(double a,double b,double ERRO)
{
double p=a+((b-a)/2);
if(((b-a)/2)< ERRO)
{

return p;
}
else
{

if(funcao1(a)*funcao1(p)< 0)
return bisseccao1(a, p,ERRO);
else
return bisseccao1(p, b,ERRO);



}





}


double newton1(double x0,double ERRO)
{
double x;
x=x0-(funcao1(x0)/derifuncao1(x0)) ;

if(sqrt(pow((((x-x0)/x)),2))< ERRO)
return x;
else
return newton1( x, ERRO);


}


double newton2(double x0,double ERRO)
{
double x;
x=x0-(funcao2(x0)/derifuncao2(x0)) ;

if(sqrt(pow((((x-x0)/x)),2))< ERRO)
return x;
else
return newton2( x, ERRO);


}

double newton3(double x0,double ERRO)
{
double x;
x=x0-(funcao3(x0)/derifuncao3(x0)) ;

if(sqrt(pow((((x-x0)/x)),2))< ERRO)
return x;
else
return newton3( x, ERRO);


}

double secante1(double x0,double x1,double ERRO)
{
double x2;
x2= ((x0*funcao1(x1))-(x1*funcao1(x0)))/(funcao1(x1)-funcao1(x0));
if(sqrt(pow((((x2-x1)/x2)),2))< ERRO)
return x2;
else
return secante1( x1, x2, ERRO);


}


double secante2(double x0,double x1,double ERRO)
{
double x2;
x2= ((x0*funcao2(x1))-(x1*funcao2(x0)))/(funcao2(x1)-funcao2(x0));
if(sqrt(pow((((x2-x1)/x2)),2))< ERRO)
return x2;
else
return secante2( x1, x2, ERRO);


}

double secante3(double x0,double x1,double ERRO)
{
double x2;
x2= ((x0*funcao3(x1))-(x1*funcao3(x0)))/(funcao3(x1)-funcao3(x0));
if(sqrt(pow((((x2-x1)/x2)),2))< ERRO)
return x2;
else
return secante3( x1, x2, ERRO);


}


double haley1(double x0,double ERRO)
{
double x1;
x1=x0-((funcao1(x0)* derifuncao1(x0))/(pow(derifuncao1(x0),2)-(0.5*funcao1(x0)*derisecfuncao1(x0))));
if(sqrt(pow((((x1-x0)/x1)),2))< ERRO)
return x1;
else
return haley1( x1, ERRO);


}

double haley2(double x0,double ERRO)
{
double x1;
x1=x0-((funcao2(x0)* derifuncao2(x0))/(pow(derifuncao2(x0),2)-(0.5*funcao2(x0)*derisecfuncao2(x0))));
if(sqrt(pow((((x1-x0)/x1)),2))< ERRO)
return x1;
else
return haley2( x1, ERRO);


}

double haley3(double x0,double ERRO)
{
double x1;
x1=x0-((funcao3(x0)* derifuncao3(x0))/(pow(derifuncao3(x0),2)-(0.5*funcao3(x0)*derisecfuncao3(x0))));
if(sqrt(pow((((x1-x0)/x1)),2))< ERRO)
return x1;
else
return haley3( x1, ERRO);


}

int main(int argc, char *argv[])
{
double ERRO =pow(10,-15);

printf("menores raizes positivas Bisseccao\n");
printf(" x/2 -tag(x) =%lf\n ",bisseccao1(4, 5,ERRO));
printf("2*cos(x)-e^(x/2) = %lf\n ",bisseccao2(0, 1,ERRO));
printf(" x^5 -6 = %lf\n ",bisseccao3(1, 3,ERRO));

printf("menores raizes positivas newton\n");
printf(" x/2 -tag(x) =%lf\n ",newton1(4,ERRO));
printf("2*cos(x)-e^(x/2) = %lf\n ",newton2(0,ERRO));
printf(" x^5 -6 = %lf\n " ,newton3(1,ERRO));

printf("menores raizes positivas Secante\n");
printf(" x/2 -tag(x) =%lf\n ",secante1(3.9,4,ERRO));
printf("2*cos(x)-e^(x/2) = %lf\n ",secante2(0,1,ERRO));
printf(" x^5 -6 = %lf\n ",secante3(0.5,1,ERRO));

printf("menores raizes positivas haley\n");
printf(" x/2 -tag(x) =%lf\n ",haley1(4,ERRO));
printf("2*cos(x)-e^(x/2) = %lf\n ",haley2(0,ERRO));
printf(" x^5 -6 = %lf\n ",haley3(1,ERRO));

system("PAUSE");
return 0;
}

Um comentário: