Advertisement
jacknpoe

Raiz nos métodos de Newton e Secante

Mar 3rd, 2017
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.80 KB | None | 0 0
  1. // Raiz nos métodos de Newton e Secante
  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 pow( x + 1, 2) * pow( EULER, pow( x, 2) - 2) - 1;
  10.     return 1000 * pow( x, 5) - 3 * x + 9.04;
  11. }
  12.  
  13.  double derivada( double x)
  14. {
  15. //    return 3 * pow( x, 2) - 9;
  16. //    return 2 * ( x + 1 ) * pow( EULER, pow( x, 2) - 2) +
  17. //           2 * x * pow( x + 1, 2) * pow( EULER, pow( x, 2) - 2);
  18.     return 5000 * pow( x, 4) - 3;
  19. }
  20.  
  21. double newton( double xk)
  22. {
  23.     double xk_1;
  24.     int iteracoes = 0;
  25.  
  26.     xk_1 = 0;
  27.     while( true )
  28.     {
  29.         xk_1 = xk - ( funcao( xk) / derivada( xk) );
  30.         iteracoes ++;
  31.         if( std::abs( ( xk_1 - xk ) / xk_1 ) < 0.0000000001 ) break;
  32.         xk = xk_1;
  33.     }
  34.     printf( "iterações : %i\n", iteracoes );
  35.     return ( xk + xk_1) / 2;
  36. }
  37.  
  38. double secante( double xk_1, double xk)
  39. {
  40.     double fxk, fxk_1, temp;
  41.     int iteracoes = 0;
  42.  
  43.     while( true )
  44.     {
  45.         fxk = funcao( xk);
  46.         fxk_1 = funcao( xk_1);
  47.         temp = xk - ( fxk / ( ( fxk - fxk_1) / ( xk - xk_1) ) );
  48.         iteracoes ++;
  49.         if( std::abs( ( temp - xk ) / temp ) < 0.0000000001 ) break;
  50.         xk_1 = xk;
  51.         xk = temp;
  52.     }
  53.     printf( "iterações : %i\n", iteracoes );
  54.     return ( temp + xk ) / 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( "Newton : %2.17f\n", newton( i-0.5 ));
  74.             printf( "Secante: %2.17f\n", secante( i-2, i-1) );
  75.         }
  76.         x1 = x2;
  77.     }
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement