Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _USE_MATH_DEFINES
- #include <iostream>
- #include <iomanip>
- #include <vector>
- #include <random>
- #include <chrono>
- #include <cmath>
- #include <ctime>
- using namespace std;
- using namespace chrono;
- typedef vector <double> vec;
- typedef vector <vec> mat;
- const double v = 10;
- double y_correct(double x)
- {
- return x * x * x * (x - v);
- }
- double f(double x, double y)
- {
- return 3 * y / x + (x * x * x);
- }
- void left_rectangular(double a, double b, double h)
- {
- // начальные условия
- double x0 = v, y0 = 0, EPS = 1e-9;
- vec x, y;
- do
- {
- x.push_back(x0);
- y.push_back(y0);
- // формула из соотношений (5)
- y0 += h * f(x0, y0);
- x0 += h;
- } while (x0 <= b + EPS);
- cout << "+-----------------------------------------------------------------------------------+\n";
- cout << "| Формула левых прямоугольников на отрезке [" << a << ", " << b << "] c шагом h = " << h << " |\n";
- cout << "+-----------------------------------------------------------------------------------+\n\n";
- cout << left << "+------------+-------------+\n";
- cout << left << "| x[i] | delta |\n";
- cout << left << "+------------+-------------+\n";
- for (int i = 0; i < x.size(); ++i)
- cout << left << "| " << setw(10) << x[i] << " | " << setw(11) << fabs(y[i] - y_correct(x[i])) << " |\n";
- cout << left << "+------------+-------------+\n\n";
- }
- void mid_rectangular(double a, double b, double h)
- {
- // начальные условия
- double x0 = v, y0 = 0, x_tmp = x0 + h / 2, y_tmp = h / 2 * f(x0, y0), EPS = 1e-9;
- vec x, y;
- do
- {
- x.push_back(x0);
- y.push_back(y0);
- // формулы из соотношений (6, 7)
- y0 += h * f(x_tmp, y_tmp);
- x0 += h;
- x_tmp += h;
- y_tmp = y0 + h / 2 * f(x0, y0);
- } while (x0 <= b + EPS);
- cout << "+-------------------------------------------------------------------------------------+\n";
- cout << "| Формула средних прямоугольников на отрезке [" << a << ", " << b << "] c шагом h = " << h << " |\n";
- cout << "+-------------------------------------------------------------------------------------+\n\n";
- cout << left << "+------------+-------------+\n";
- cout << left << "| x[i] | delta |\n";
- cout << left << "+------------+-------------+\n";
- for (int i = 0; i < x.size(); ++i)
- cout << left << "| " << setw(10) << x[i] << " | " << setw(11) << fabs(y[i] - y_correct(x[i])) << " |\n";
- cout << left << "+------------+-------------+\n\n";
- }
- void trapezoid(double a, double b, double h)
- {
- // начальные условия
- double x0 = v, y0 = 0, x_tmp = x0 + h, y_tmp = h * f(x0, y0), EPS = 1e-9;
- vec x, y;
- do
- {
- x.push_back(x0);
- y.push_back(y0);
- // формулы из соотношений (5, 9)
- y0 += h * (f(x0, y0) + f(x_tmp, y_tmp)) / 2;
- x0 += h;
- x_tmp += h;
- y_tmp = y0 + h * f(x0, y0);
- } while (x0 <= b + EPS);
- cout << "+----------------------------------------------------------------------+\n";
- cout << "| Формула трапеций на отрезке [" << a << ", " << b << "] c шагом h = " << h << " |\n";
- cout << "+----------------------------------------------------------------------+\n\n";
- cout << left << "+------------+-------------+\n";
- cout << left << "| x[i] | delta |\n";
- cout << left << "+------------+-------------+\n";
- for (int i = 0; i < x.size(); ++i)
- cout << left << "| " << setw(10) << x[i] << " | " << setw(11) << fabs(y[i] - y_correct(x[i])) << " |\n";
- cout << left << "+------------+-------------+\n\n";
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- cout << fixed << setprecision(5);
- double a = v, b = v + 5, h = 0.1;
- left_rectangular(a, b, h);
- mid_rectangular(a, b, h);
- trapezoid(a, b, h);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement