Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. double bisekcja(double a, double b, funptr funkcja, int ops, double est, int n, double tolerance)
  2. {
  3. double tmp, znak[2] = {0, 0}, f[2], x, ftmp;
  4. int i = 0;
  5.  
  6. printf("\nMetoda Bisekcji.\n");
  7.  
  8. f[0] = funkcja(a);
  9. f[1] = funkcja(b);
  10.  
  11. x = (a + b) / 2; //przyblizenie pierwiastka
  12. tmp = (fabs(b) - fabs(a)) / 2; //estymator bledu
  13.  
  14. if (f[0] < 0) znak[0] = -1;
  15. else if (f[0] > 0) znak[0] = 1;
  16.  
  17. if (f[1] < 0) znak[1] = -1;
  18. else if (f[1] > 0) znak[1] = 1;
  19.  
  20. if (znak[0] != znak[1])
  21. {
  22.  
  23. switch(ops)
  24. {
  25. case 0:
  26. {
  27. cout << "Kryterium estymatora bledu\n";
  28.  
  29. while (fabs(tmp) > est)
  30. {
  31. tmp = ( fabs(b) - fabs(a)) / 2; //estymator bledu
  32. ftmp = funkcja(tmp);
  33. x = (a + b) / 2; //kolejne przyblizenia
  34. if (ftmp > 0)
  35. {
  36. if (f[0] < 0) b = tmp;
  37. else if (f[1] < 0) a = tmp;
  38. }
  39.  
  40. else if (ftmp < 0)
  41. {
  42. if (f[0] > 0) b = tmp;
  43. else if (f[1] > 0) a = tmp; //to jest sprawdzanie gdzie sa rozne znaki w wartosciach funkcji
  44. }
  45. cout<<"x"<<i++<<" = "<<x;
  46. cout<<"\ttmp = "<<tmp<<endl;
  47.  
  48. }
  49. }break;
  50.  
  51. case 1:
  52. {
  53. cout<<"Kryterium ograniczenia iteracji\n";
  54.  
  55. while (i++ < n)
  56. {
  57. tmp = ( fabs(b) - fabs(a) ) / 2;
  58. ftmp = funkcja(tmp);
  59. x = (a + b) / 2;
  60.  
  61. if (ftmp > 0)
  62. {
  63. if (f[0] < 0) b = tmp;
  64. else if (f[1] < 0) a = tmp;
  65. }
  66.  
  67. else if (ftmp < 0)
  68. {
  69. if (f[0] > 0) b = tmp;
  70. else if (f[1] < 0) a = tmp;
  71. }
  72. cout<<"x"<<i<<" = "<<x<<endl;
  73. }
  74. }break;
  75.  
  76. case 2:
  77. {
  78. cout << "Kryterium wiarygodnosci przyblizenia pierwiastka\n";
  79.  
  80. while (fabs(funkcja(tmp)) > tolerance)
  81. {
  82. tmp = ( fabs(b) - fabs(a) ) / 2;
  83. ftmp = funkcja(tmp);
  84. x = (a + b) / 2;
  85. if (ftmp > 0)
  86. {
  87. if (f[0] < 0) b = tmp;
  88. else if (f[1] < 0) a = tmp;
  89. }
  90.  
  91. else if (ftmp < 0)
  92. {
  93. if (f[0] > 0) b = tmp;
  94. else if (f[1] < 0) a = tmp;
  95. }
  96. cout<<"x"<<i++<<" = "<<x<<endl;
  97. }
  98. }break;
  99.  
  100. default:
  101. {
  102. printf("Bledny numer, program zostanie zakonczony\n");
  103. exit(0);
  104. }break;
  105.  
  106. }
  107. }
  108.  
  109.  
  110.  
  111. return x;
  112. }
  113.  
  114.  
  115. int main()
  116. {
  117. double x;
  118. const double est = 1e-12, iteracje = 50, blad = 1e-12;
  119.  
  120. x = bisekcja(0.0, 5.0, fun2, i, est, iteracje, blad); // i do iteracji po kazdej metodzie zakonczenia iteracji
  121. cout<<"x = "<<x<<endl;
  122.  
  123. return 0;
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement