jacknpoe

Raízes de pow( x + 1, 2) * pow( EULER, pow( x, 2) - 2) - 1;

Feb 27th, 2017
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.64 KB | None | 0 0
  1. // Raízes nos métodos de bisseção e Newton com margem de erro de 10 na -10
  2. #include <cmath>
  3. #include <cstdio>
  4. #include <locale>
  5.  
  6. const double EULER = 2.718281828459045235360287;
  7.  
  8.  double funcao( double x)
  9. {
  10. //    return pow( x, 3) - 9 * x + 3;
  11.     return pow( x + 1, 2) * pow( EULER, pow( x, 2) - 2) - 1;
  12. }
  13.  
  14.  double derivada( double x)
  15. {
  16. //    return 3 * pow( x, 2) - 9;
  17.     return 2 * ( x + 1 ) * pow( EULER, pow( x, 2) - 2) +
  18.            2 * x * pow( x + 1, 2) * pow( EULER, pow( x, 2) - 2);
  19. }
  20.  
  21.  double bissecao( double a,  double b)
  22. {
  23.     double xk, xk_1;
  24.  
  25.     xk_1 = 0;
  26.     while( true )
  27.     {
  28.         xk = ( a + b) / 2;
  29.         if( ( funcao( a) * funcao( xk) ) < 0 )
  30.         {
  31.             b = xk;
  32.         }
  33.         else
  34.         {
  35.             a = xk;
  36.         }
  37.         if( std::abs( ( xk - xk_1 ) / xk ) < 0.0000000001 ) break;
  38.         xk_1 = xk;
  39.     }
  40.     return ( a + b) / 2;
  41. }
  42.  
  43. double newton( double xk)
  44. {
  45.     double xk_1;
  46.  
  47.     xk_1 = 0;
  48.     while( true )
  49.     {
  50.         xk_1 = xk - ( funcao( xk) / derivada( xk) );
  51.         if( std::abs( ( xk_1 - xk ) / xk_1 ) < 0.0000000001 ) break;
  52.         xk = xk_1;
  53.     }
  54.     return ( xk + xk_1) / 2;
  55. }
  56.  
  57.  
  58. int main( void)
  59. {
  60.     double x1, x2;
  61.     int i;
  62.  
  63.     setlocale( LC_ALL, "");
  64.  
  65.     x1 = funcao( -3);
  66.     printf( "%i : %2.17f\n", -3, x1 );
  67.     for( i = -2; i <= 3; i++)
  68.     {
  69.         x2 = funcao( i);
  70.         printf( "%i : %2.17f\n", i, x2 );
  71.         if( ( x1 * x2) < 0 )
  72.         {
  73.             printf( "Bisseção: %2.17f\n", bissecao( i-1, i) );
  74.             printf( "Newton :  %2.17f\n", newton( i-0.5 ));
  75.         }
  76.         x1 = x2;
  77.     }
  78.     return 0;
  79. }
Add Comment
Please, Sign In to add comment