Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <memory>
- #include <iomanip>
- using namespace std;
- float a = 0, b = 10; //левая и правая границы (a и b)
- float h = 0.1; //шаг
- const float n = ((b - a)/h + 1); //кол-во решений
- /*Наша функция*/
- float df(float x, float y) {
- return x + y;
- }
- void Runge(float a, float b);
- void print(float* X, float* Y);
- int main() {
- Runge(a, b);
- return 0;
- }
- /*Метод Рунге-Кутта*/
- void Runge(float a, float b)
- {
- float* X = new float[n];
- float* Y = new float[n];
- X[0] = a; ;//присваиваем X[0] значение левой границы
- Y[0] = 1; //присваиваем Y[0] значение 1
- float k1, k2, k3, k4; //для ДУ 4-го порядка
- for (int i = 1; i < n; i++)
- {
- k1 = h * df(X[i - 1], Y[i - 1]);
- k2 = h * df(X[i - 1] + h / 2, Y[i - 1] + k1 / 2);
- k3 = h * df(X[i - 1] + h / 2, Y[i - 1] + k2 / 2);
- k4 = h * df(X[i - 1] + h, Y[i - 1] + k3);
- X[i] = a + i * h;
- Y[i] = Y[i - 1] + (k1 + 2*k2 + 2*k3 + k4) / 6;
- }
- print(X, Y);
- }
- void print(float* X, float* Y)
- {
- cout << "Table Runge:\n";
- for (int i = 0; i < n; i++) {
- if (i == 0 || i == n - 1) cout << "X[" << i << "]=" << X[i] << "\t\tY[" << i << "]=" << Y[i] << endl;
- else cout << "X[" << i << "]=" << X[i] << "\tY[" << i << "]=" << fixed << setprecision(4) << Y[i] << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement