• API
• FAQ
• Tools
• Archive
SHARE
TWEET

# Untitled

a guest May 23rd, 2019 71 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1.
2.
3.
4. #include <iostream>
5. #include <cmath>
6. #include <iomanip>
7. using namespace std;
8.
9. const int n = 3;
10. const int N = 51;
11.
12. const int steps =51;
13.
14. double Function(double x)
15. {
16.     return sin(x)*(x+1);
17. }
18.
19.
20.
21. double SimpsonsIntegrate(double step, int steps, double y[])
22. {
23.     double sumEven = 0.0, sumOdd = 0.0;
24.     for (int i = 1; i < steps; i += 2)
25.         if (!(i == steps - 1))
26.             sumOdd += y[i];
27.         else
28.             break;
29.     for (int i = 2; i < steps - 1; i += 2)
30.         sumEven += y[i];
31.     return step / 3 * (y[0] + 2 * sumEven + 4 * sumOdd + y[steps]);
32. }
33.
34.
35. double f(double x)
36. {
37.     return sin(x)*(x + 1) ;
38. }
39.
40. double Gauss(double a, double b)
41. {
42.     const double Xi[n] = { -0.7745967,0,0.7745967 };
43.     const double Ci[n] = { 0.5555556,0.8888889,0.5555556 };
44.
45.     double ra = (b - a) / 2;
46.     double su = (a + b) / 2;
47.     double Q, S = 0.0;
48.     for (int i = 0; i < n; i++)
49.     {
50.         Q = su + ra*Xi[i];
51.         S += Ci[i] * f(Q);
52.     }
53.     return ra*S;
54. }
55.
56. int main()
57. {
58.     cout<<"=================================================================\n\n";
59.     cout<<"\t\t\t Вхідні дані\n";
60.     cout<<"\t\t\t ~~~~~~~~~~~\n\n";
61.     cout<<"Функція f(x)=(x+1)*sin(x)\n";
62.     cout<<"Межі інтегрування:\na = -2 \nb = 3\n";
63.     cout<<"Точність Е = 0.0001\n\n";
64.      cout<<"=================================================================\n\n";
65.     cout<<"\t\t\t Метод Сімпсона\n";
66.     cout<<"\t\t\t ~~~~~~~~~~~~~~~\n\n";
67.
68.     double a = -2;
69.     double b = 3;
70.     double s = 0.0;
71.
72.     double y111 = 1;
73.     double n = 1;
74.     while(0.0001 <= y111){
75.         y111 = (pow(3+2, 2)) / (180*pow(2*n, 4)) * 56.717;
76.         n++;
77.
78.     }
79.     cout << "Мінімальна к-ть кроків, обчислена за формулою оцінки похибки Сімпсона: " <<  n << endl;
80.
81.     double *y = new double[steps + 1];
82.     double *segments = new double[steps + 1];
83.     double step = (b - a) / steps;
84.     double tmp = a;
85.
86.     cout << "Крок виконання: " << step << endl;
87.     for (int i = 0; i <= steps; i++)
88.     {
89.         segments[i] = tmp;
90.         tmp += step;
91.     }
92.     for (int i = 0; i <= steps; i++)
93.         y[i] = Function(segments[i]);
94.     cout << "\t\t\t\t\tX \t\t Y" << endl;
95.     for (int i = 0; i < steps + 1; i++)
96.     {
97.         cout <<i+1<< " ітерація : " <<setw(10)<<segments[i] << setw(11) << y[i] << endl;
98.     }
99.
100.     cout<<"-----------------------------------------------------------------\n\n";
101.     cout << "Знайдений за методом Сімпсона інтеграл з кількістю кроків "<<steps+1<<" : " << SimpsonsIntegrate(step, steps, y);
102.     cout<<"\n\n=================================================================\n";
103.     for (int i = 0; i < N; ++i)
104.     {
105.         s += Gauss(a + i*(b - a) / N, a + (i + 1)*(b - a) / N);
106.     }
107.     cout<<"\n\t\t\t Розв'язок за квадратурною формулою Гауса\n";
108.     cout<<"\t\t\t ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
109.
110.     cout << "\nЗнайдений за методом Гаусса інтеграл з кількістю кроків "<<3<<" : "  << s << endl;
111.     cout<<"\n=================================================================\n";
112.
113.     getchar();
114.     return 0;
115.
116. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.

Top