1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
double funcao (double valor, int intervalo);
double bisseccao (double a, double b, int intervalo);
main ()
{
double a,b,c,d;
printf("Insira os intervalos para g(T)= 0,1\n");
scanf("%lf",&a);
scanf("%lf",&b);
printf("Insira os intervalos para g(T)= 0,9\n");
scanf("%lf",&c);
scanf("%lf",&d);
double bis09 = bisseccao(c,d,9);
double bis01 = bisseccao(a,b,1);
printf("%lf",bis09);
printf("%lf",bis01);
printf("O tempo de subida e : %lf", (bis09 - bis01));
}
double funcao (double valor, int intervalo)
{
return (1 - (double)intervalo/10 - (1 + valor + pow(valor,2)/2) * exp(valor * (-1)));
}
double bisseccao (double a, double b, int intervalo)
{
if (a > b)
{
printf("Intervalo incorreto. O valor de \"a\" deve ser menor que o de \"b\".");
exit(1);
}
double funca,funcb;
funca = funcao(a,intervalo);
printf("f(a) para 0,%d = %lf\n",intervalo,funca);
funcb = funcao(b,intervalo);
printf("f(b) para 0,%d = %lf\n",intervalo,funcb);
if (funca * funcb > 0)
{
printf("Intervalo incorreto. O sinal de \"f(a)\" deve ser contrario ao de \"f(b)\" (intervalo 0,%d).\n",intervalo);
printf("f(a) = %lf\n",funca);
printf("f(b) = %lf",funcb);
exit(1);
}
double x,funcx;
x = (a+b)/2;
funcx = funcao(x,intervalo);
printf("a = %lf\n",a);
printf("b = %lf\n",b);
if ( (b-a) > pow(10,(-5)) )
{
if (funca * funcx < 0)
{
bisseccao(a,x,intervalo);
}
else
{
bisseccao(x,b,intervalo);
}
}
else
{
return x;
}
}
|