Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include <stdio.h>
- double func(double t, double y) {
- return 2 * t*y;
- }
- double* modifiedEylersMethod(double begin_t, double begin_y, double h, double end_t)
- {
- int countStep = (end_t - begin_t) / h;
- double* container = new double[countStep];
- double previous_func = func(begin_t, begin_y);
- double current_t = begin_t;
- container[0] = begin_y;
- for (int i = 1; i <= countStep; begin_t += h, i++)
- { // = begin_y + (h / 2)*(2 * begin_t*begin_y + ((2 * begin_t + h)*(begin_y + h * 2 * begin_t*begin_y)));
- container[i] = container[i - 1] + h*func(current_t + h / 2, container[i - 1] + h / 2 * previous_func);
- current_t += h,
- previous_func = func(current_t, container[i]);
- }
- return container;
- }
- double* simpleEyler(double begin_t, double begin_y, double h, double end_t) {
- int countStep = (end_t - begin_t) / h;
- double* container = new double[countStep];
- double previous_func = func(begin_t, begin_y);
- container[0] = begin_y;
- double current_t = begin_t + h;
- for (int i = 1; i <= countStep; i++) {
- container[i] = container[i-1] + h * previous_func;
- current_t += h;
- previous_func = func(current_t,container[i]);
- }
- return container;
- }
- double* rungekutt(double begin_t, double begin_y, double h, double end_t) {
- int countStep = (end_t - begin_t) / h;
- double* container = new double[countStep];
- container[0] = begin_y;
- double current_t = begin_t;
- for (int i = 1; i <= countStep; i++) {
- double current_y = container[i - 1];
- double k1 = func(current_t, current_y);
- double k2 = func(current_t + (h / 2), current_y + (h / 2)*k1);
- double k3 = func(current_t + (h / 2), current_y + (h / 2)*k2);
- double k4 = func(current_t + h, current_y + h * k3);
- double k = k1 + 2 * k2 + 2 * k3 + k4;
- container[i] = current_y + (h*k / 6);
- current_t += h;
- }
- return container;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement