Advertisement
Guest User

Updated

a guest
Jan 16th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.04 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <cmath> //sinus
  4. #include <iomanip> //setprecision
  5. using namespace std;
  6.  
  7. double f(double x) {
  8. return (x / (1.2 - sin(2 * x)));
  9. }
  10.  
  11. double concave(double x1, double a, double b) { //1.21
  12. return ((-2)*(f(a)*(b - x1) + f(x1)*(a - b) + f(b)*(x1 - a)) / ((b - x1)*(a - b)*(x1 - a)));
  13. }
  14.  
  15. double xTwo(double x1, double a, double b) { //1.22
  16. return ((f(a)*((b*b) - (x1*x1))
  17. + f(x1)*((a*a) - (b*b))
  18. + f(b)*((x1*x1) - (a*a))) / (
  19. 2 * (f(a)*(b - x1)
  20. + f(x1)*(a - b)
  21. + f(b)*(x1 - a)))
  22. );
  23. }
  24.  
  25. int main() {
  26. int expansion_factor = 4, i = 1;
  27. double accuracy = 0.01;
  28. double x1[100], x2[100], a[100], b[100], shift1, shift2;
  29. x1[0] = 0.8; //initial point > 0
  30. cout << f(0) << " < " << f(x1[0]) << "\n\n"; //so
  31. a[1] = (-1)*expansion_factor*x1[0]; x1[1] = 0; b[1] = x1[0];
  32. cout << "i\ta\tx1\tx2\tb \tf(a)\tf(x1)\tf(x2)\tf(b)\toperation\n";
  33. do {
  34. while (concave(x1[i], a[i], b[i]) <= 0) { //1.21, 1.24
  35. cout << i << "\t" << setprecision(3) << a[i] << "\t" << setprecision(3) << x1[i] << "\t" << setprecision(3) << "-" << "\t" << setprecision(3) << b[i] << "\t" << setprecision(3) << f(a[i]) << "\t" << setprecision(3) << f(x1[i]) << "\t" << setprecision(3) << "-" << "\t" << setprecision(3) << f(b[i]);
  36. cout << "\tconcave:" << concave(x1[i], a[i], b[i]) << "\n";
  37. a[i] = x1[i];
  38. x1[i] = b[i];
  39. b[i] = b[i] + expansion_factor * (b[i] - x1[i]);
  40. }
  41.  
  42. x2[i] = xTwo(x1[i], a[i], b[i]);
  43.  
  44. if (x2[i] < a[i] || x2[i] > b[i]) { //1.25
  45. cout << i << "\t" << setprecision(3) << a[i] << "\t" << setprecision(3) << x1[i] << "\t" << setprecision(3) << x2[i] << "\t" << setprecision(3) << b[i] << "\t" << setprecision(3) << f(a[i]) << "\t" << setprecision(3) << f(x1[i]) << "\t" << setprecision(3) << f(x2[i]) << "\t" << setprecision(3) << f(b[i]);
  46. cout << "\tout of interval\n";
  47. shift1 = a[i];
  48. shift2 = x1[i];
  49. a[i] = x2[i];
  50. x1[i] = shift1;
  51. b[i] = shift2;
  52. }
  53.  
  54. if (x2[i] < x1[i]) {
  55. cout << i << "\t" << setprecision(3) << a[i] << "\t" << setprecision(3) << x1[i] << "\t" << setprecision(3) << x2[i] << "\t" << setprecision(3) << b[i] << "\t" << setprecision(3) << f(a[i]) << "\t" << setprecision(3) << f(x1[i]) << "\t" << setprecision(3) << f(x2[i]) << "\t" << setprecision(3) << f(b[i]);
  56. cout << "\tx2<x1,swapped\n";
  57. shift1 = x2[i];
  58. x2[i] = x1[i];
  59. x1[i] = shift1;
  60. }
  61.  
  62. cout << i << "\t" << setprecision(3) << a[i] << "\t" << setprecision(3) << x1[i] << "\t" << setprecision(3) << x2[i] << "\t" << setprecision(3) << b[i] << "\t" << setprecision(3) << f(a[i]) << "\t" << setprecision(3) << f(x1[i]) << "\t" << setprecision(3) << f(x2[i]) << "\t" << setprecision(3) << f(b[i]);
  63.  
  64. if (f(x1[i]) >= f(x2[i])) { //1.11 - 1.13
  65. cout << "\t(a,x1) deleted\n";
  66. a[i + 1] = x1[i];
  67. b[i + 1] = b[i];
  68. x1[i + 1] = x2[i];
  69. }
  70. else { //1.15 - 1.18
  71. cout << "\t(x2,b) deleted\n";
  72. a[i + 1] = a[i];
  73. b[i + 1] = x2[i];
  74. x1[i + 1] = x1[i];
  75. }
  76. i++;
  77. } while (x2[i-1]-x1[i-1] > accuracy);
  78. cout << "\n(x2 - x1) < accuracy\n";
  79. return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement