Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <stdio.h>
- #include <iostream>
- #include <fstream>
- #include <iomanip>
- #include <conio.h>
- #include <math.h>
- #include <string>
- using namespace std;
- double E = 0.01; // точность, с которой методом бисекции вычисляется решение
- double F1(double z)
- {
- return z;
- }
- double F2(double x, double y, double z)
- {
- return -2 * z + 7 * y + exp(x) * (4 * x * x - 8 * x - 6);
- }
- void Runge_Kut4(double* X, double* Y1, double* Y2, double* Y3, double* Y4, double* Z1, double* Z2, double* Z3, double* Z4, double* Y, double* Z, double n, double h)
- {
- for (int i = 1; i <= n; i++) {
- X[i] = X[0] + i * h;
- Z1[i] = h * F2(X[i - 1], Y[i - 1], Z[i - 1]);
- Y1[i] = h * F1(Z[i - 1]);
- Z2[i] = h * F2(X[i - 1] + h / 2.0, Y[i - 1] + Y1[i] / 2.0, Z[i - 1] + Z1[i] / 2.0);
- Y2[i] = h * F1(Z[i - 1] + Z1[i] / 2.0);
- Z3[i] = h * F2(X[i - 1] + h / 2.0, Y[i - 1] + Y2[i] / 2.0, Z[i - 1] + Z2[i] / 2.0);
- Y3[i] = h * F1(Z[i - 1] + Z2[i] / 2.0);
- Z4[i] = h * F2(X[i - 1] + h, Y[i - 1] + Y3[i], Z[i - 1] + Z3[i]);
- Y4[i] = h * F1(Z[i - 1] + Z3[i]);
- Z[i] = Z[i - 1] + (Z1[i] + 2 * Z2[i] + 2 * Z3[i] + Z4[i]) / 6.0;
- Y[i] = Y[i - 1] + (Y1[i] + 2 * Y2[i] + 2 * Y3[i] + Y4[i]) / 6.0;
- }
- }
- int main()
- {
- double a = 0, b = 1, h = 0.1, n = 10;
- double a1 = 0, a2 = 5, a3; // коэффициенты альфа
- double* X = new double[n];
- double* Y1 = new double[n];
- double* Y2 = new double[n];
- double* Y3 = new double[n];
- double* Y4 = new double[n];
- double* Z1 = new double[n];
- double* Z2 = new double[n];
- double* Z3 = new double[n];
- double* Z4 = new double[n];
- double* Y = new double[n];
- double* Z = new double[n];
- X[0] = a; Y[0] = 1;
- Z[0] = a1; // ТУТ АЛЬФА 1 = 0
- Runge_Kut4(X, Y1, Y2, Y3, Y4, Z1, Z2, Z3, Z4, Y, Z, n, h);
- ofstream F1;
- F1.open("Finish_file 1.txt");
- for (int i = 0; i <= n; i++)
- {
- F1 << X[i] << setw(30);
- F1 << Y[i] << endl;
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 1 ВЫСТРЕЛ
- double* Y_1 = new double[n];
- Y_1[0] = 1;
- Z[0] = a2; // ТУТ АЛЬФА 2 = 5
- Runge_Kut4(X, Y1, Y2, Y3, Y4, Z1, Z2, Z3, Z4, Y_1, Z, n, h);
- ofstream F2;
- F2.open("Finish_file 2.txt");
- for (int i = 0; i <= n; i++)
- {
- F2 << X[i] << setw(30);
- F2 << Y_1[i] << endl;
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 2 ВЫСТРЕЛ
- double* Y_2 = new double[n];
- Y_2[0] = 1;
- Y_2[10] = Y_1[10];
- int k = 3; // это просто для названия файлов вывода счетчик
- double d, kpp = Y[10];
- /////////////////////////////////////////////////////////// ОСТАЛЬНЫЕ ВЫСТРЕЛЫ МЕТОДОМ БИСЕКЦИИ
- while (fabs(Y_2[10])>E)
- {
- a3 = (a1 + a2) / 2;
- Z[0] = a3;
- Runge_Kut4(X, Y1, Y2, Y3, Y4, Z1, Z2, Z3, Z4, Y_2, Z, n, h);
- ofstream F3;
- F3.open("Finish_file " + to_string(k) + ".txt");
- for (int i = 0; i <= n; i++)
- {
- F3 << X[i] << setw(30);
- F3 << Y_2[i] << endl;
- }
- d = Y_2[10] * kpp;
- if (d > 0) { a1 = a3; kpp = Y_2[10];}
- if (d < 0) { a2 = a3; kpp = Y[10]; }
- k++;
- }
- //print results
- //for (int i = 0; i <= n; i++) { cout << "X[" << i << "]=" << X[i] << endl; }
- //cout << endl;
- //for (int i = 0; i <= n; i++) { cout << "Y[" << i << "]=" << Y_2[i] << endl; }
- //cout << endl;
- //for (int i = 0; i <= n; i++) { cout << "Z[" << i << "]=" << Z[i] << endl; }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement