Guest User

Untitled

a guest
Dec 11th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. //#include"stdafx.h"
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<math.h>
  5. #define eps 0.000001
  6. #define INF 999999
  7.  
  8. using namespace std;
  9.  
  10. double min(double a, double b)
  11. {
  12. return (a < b)? a:b;
  13. }
  14.  
  15. double max(double a, double b)
  16.  
  17. {
  18. return (a > b)? a :b;
  19. }
  20.  
  21. double f(double x)
  22. {
  23. return (sin(3*x) * exp(2*cos(x)) - 5*x);
  24. }
  25.  
  26. double f_prime(double x)
  27. {
  28. return( exp(2*cos(x)) * (3*cos(3*x)+cos(4*x)-cos(2*x)) - 5 );
  29. }
  30.  
  31. double f_2prime(double x)
  32. {
  33. return( exp(2*cos(x)) * ( (-2*sin(x))*(3*cos(3*x)+cos(4*x)-cos(2*x)) + (2*sin(2*x)-4*sin(4*x)-9*sin(3*x)) ) );
  34. }
  35.  
  36. double l = -7, r = 7, n = 103, fx1, fa, f2a, fx0, f1x0, x1, x0, m1, M1;
  37. double f1p, f2p, h = (r-l)/n;
  38. int cnt;
  39.  
  40. void newton(double a, double b)
  41. {
  42. m1 = INF;
  43. M1 = 0;
  44. for(double i = 0; i <= n; i++)
  45. {
  46. f1p = fabs(f_prime(a+i*h));
  47. f2p = fabs(f_2prime(a+i*h));
  48. m1 = min(m1, f1p);
  49. M1 = max(M1, f2p);
  50. }
  51.  
  52. fa = f(a);
  53. f2a = f_2prime(a);
  54. if(fa*f2a > 0)
  55. x0 = a;
  56. else
  57. x0 = b;
  58.  
  59. fx0 = f(x0);
  60. f1x0 = f_prime(x0);
  61. x1 = x0 - fx0/f1x0;
  62. fx1 = f(x1);
  63. cnt++;
  64.  
  65. while((M1*fabs(x1-x0)*fabs(x1-x0)/2/m1 >= eps) || (fabs(fx1) >= eps))
  66. {
  67. cnt++;
  68. x0 = x1;
  69. fx0 = fx1;
  70. f1x0 = f_prime(x0);
  71. x1 = x0 - fx0/f1x0;
  72. fx1 = f(x1);
  73. }
  74. }
  75.  
  76. int main(int argc, char* argv[])
  77. {
  78. printf("Hello World!\n");
  79.  
  80. for(double i = 1; i <= n; i++)
  81. {
  82. if(f(l+(i-1)*h)*f(l+i*h) < 0)
  83. {
  84. cnt = 0;
  85. newton(l+(i-1)*h, l+i*h);
  86. printf("cnt=%d x=%.10f fx=%.10f \n\n",cnt,x1,fx1);
  87. }
  88. }
  89.  
  90. return 0;
  91. }
Add Comment
Please, Sign In to add comment