Advertisement
jacknpoe

Raiz nos métodos de bisseção com posição falsa

Mar 3rd, 2017
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.78 KB | None | 0 0
  1. // Raiz nos métodos de bisseção com posição falsa
  2. #include <cmath>
  3. #include <cstdio>
  4. #include <locale>
  5.  
  6.  double funcao( double x)
  7. {
  8. //    return pow( x, 3) - 9 * x + 3;
  9.     return ( x - 0.2 * sin( x) - 0.5);
  10. }
  11.  
  12.  double bissecao( double a,  double b)
  13. {
  14.     double xk, xk_1;
  15.     int iteracoes = 0;
  16.  
  17.     xk_1 = 0;
  18.     while( true )
  19.     {
  20.         xk = ( a + b) / 2;
  21.         if( ( funcao( a) * funcao( xk) ) < 0 )
  22.         {
  23.             b = xk;
  24.         }
  25.         else
  26.         {
  27.             a = xk;
  28.         }
  29.         iteracoes ++;
  30.         if( std::abs( ( xk - xk_1 ) / xk ) < 0.00001 ) break;
  31.         xk_1 = xk;
  32.     }
  33.     printf( "iterações : %i\n", iteracoes );
  34.     return ( a + b) / 2;
  35. }
  36.  
  37.  double posicao( double a,  double b)
  38. {
  39.     double xk, xk_1, fa, fb, fx;
  40.     int iteracoes = 0;
  41.  
  42.     fa = funcao( a);
  43.     fb = funcao( b);
  44.     xk_1 = 0;
  45.     while( true )
  46.     {
  47.         xk = ( a * fb - b * fa) / ( fb - fa);
  48.         fx = funcao( xk);
  49.         if( ( fa * fx ) < 0 )
  50.         {
  51.             b = xk;
  52.             fb = fx;
  53.         }
  54.         else
  55.         {
  56.             a = xk;
  57.             fa = fx;
  58.         }
  59.         iteracoes ++;
  60.         if( std::abs( ( xk - xk_1 ) / xk ) < 0.00001 ) break;
  61.         xk_1 = xk;
  62.     }
  63.     printf( "iterações : %i\n", iteracoes );
  64.     return xk;
  65. }
  66.  
  67.  
  68. int main( void)
  69. {
  70.     double x1, x2;
  71.     int i;
  72.  
  73.     setlocale( LC_ALL, "");
  74.  
  75.     x1 = funcao( -3);
  76.     printf( "%i : %2.17f\n", -3, x1 );
  77.     for( i = -2; i <= 3; i++)
  78.     {
  79.         x2 = funcao( i);
  80.         printf( "%i : %2.17f\n", i, x2 );
  81.         if( ( x1 * x2) < 0 )
  82.         {
  83.             printf( "Bisseção: %2.17f\n", bissecao( i-1, i) );
  84.             printf( "Posição : %2.17f\n", posicao( i-1, i) );
  85.         }
  86.         x1 = x2;
  87.     }
  88.     return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement