# Untitled

a guest
May 16th, 2019
62
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. #include <cmath>
2. #include <fstream>
3. #include <iostream>
4. #include <string>
5. #include <cstdlib>
6.
7.
8. double fx(double x){
9. return std::log(std::pow(x,5) + 3.0 * std::pow(x, 2) + x + 9.0);
10. }
11.
12. double gx(double x){
13. return pow(x,6);
14. }
15.
16.
17.
18. int main(void) {
19.
20. double x_dok = -0.1673198;
21.
22. double xa = -0.5;
23. double xb = 1.0;
24. double eps = pow(10, -6);
25.
26. double r = (sqrt(5)-1.0) / 2.0;
27.
28. double lambda1 = r*r;
29. double lambda2 = r;
30.
31. double lambda1_b = 1.0 / 3.0;
32. double lambda2_b = 2.0 / 3.0;
33.
34.
35. double xmin;
36.
37. unsigned iteration = 0;
38.
39. std::fstream file;
40. file.open("wynik1.txt", std::ios::out);
41. file.close();
42.
43. // zadanie 1 i 2
44. do{
45. double x1 = xa + lambda1 * (xb-xa);
46. double x2 = xa + lambda2 * (xb-xa);
47.
48.
49. if(fx(x2) > fx(x1)){
50. xb = x2;
51. }
52. else if(fx(x2) < fx(x1)){
53. xa = x1;
54. }
55. xmin = (xb+xa)/2.0;
56. double diff = std::abs(xmin-x_dok);
57. file << iteration << " " << xmin << " " << diff << std::endl;
58. iteration++;
59. }
60. while(std::abs(xa-xb) > std::pow(10, -6));
61.
62. xmin = (xb+xa)/2.0;
63. std::cout << iteration << ", " << xmin << ", dokladne -> " << x_dok << std::endl;
64.
66.
67. xa = -0.5;
68. xb = 1.0;
69.
70. do{
71. double x1 = xa + lambda1_b * (xb-xa);
72. double x2 = xa + lambda2_b * (xb-xa);
73.
74.
75. if(fx(x2) > fx(x1)){
76. xb = x2;
77. }
78. else if(fx(x2) < fx(x1)){
79. xa = x1;
80. }
81. xmin = (xb+xa)/2.0;
82. double diff = std::abs(xmin-x_dok);
83. file << iteration << " " << xmin << " " << diff << std::endl;
84. iteration++;
85. }
86. while(std::abs(xa-xb) > std::pow(10, -6));
87.
88. xmin = (xb+xa)/2.0;
89. std::cout << iteration << ", " << xmin << ", dokladne -> " << x_dok << std::endl;
90.
91.
92.
93.
94. file.open("wynik2.txt", std::ios::out);
95.
96. file.close();
97.
98.
99. return 0;
100. }
RAW Paste Data