Advertisement
Guest User

Untitled

a guest
Dec 19th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #pragma once
  2. #include <stdio.h>
  3.  
  4. double func(double t, double y) {
  5.         return 2 * t*y;
  6. }
  7.  
  8.  
  9. double* modifiedEylersMethod(double begin_t, double begin_y, double h, double end_t)
  10. {
  11.         int countStep = (end_t - begin_t) / h;
  12.         double* container = new double[countStep];
  13.         double previous_func = func(begin_t, begin_y);
  14.         double current_t = begin_t;
  15.         container[0] = begin_y;
  16.         for (int i = 1; i <= countStep; begin_t += h, i++)
  17.         {               // = begin_y + (h / 2)*(2 * begin_t*begin_y + ((2 * begin_t + h)*(begin_y + h * 2 * begin_t*begin_y)));
  18.                 container[i] = container[i - 1] + h*func(current_t + h / 2, container[i - 1] + h / 2 * previous_func);
  19.                 current_t += h,
  20.                 previous_func = func(current_t, container[i]);
  21.         }
  22.         return container;
  23.  
  24. }
  25.  
  26.  
  27. double* simpleEyler(double begin_t, double begin_y, double h, double end_t) {
  28.  
  29.  
  30.         int countStep = (end_t - begin_t) / h;
  31.         double* container = new double[countStep];
  32.         double previous_func = func(begin_t, begin_y);
  33.         container[0] = begin_y;
  34.         double current_t = begin_t + h;
  35.         for (int i = 1; i <= countStep; i++) {
  36.                 container[i] = container[i-1] + h * previous_func;
  37.                 current_t += h;
  38.                 previous_func = func(current_t,container[i]);
  39.         }
  40.         return container;
  41. }
  42.  
  43. double* rungekutt(double begin_t, double begin_y, double h, double end_t) {
  44.  
  45.         int countStep = (end_t - begin_t) / h;
  46.  
  47.         double* container = new double[countStep];
  48.         container[0] = begin_y;
  49.         double current_t = begin_t;
  50.  
  51.         for (int i = 1; i <= countStep; i++) {
  52.                 double current_y = container[i - 1];
  53.                 double k1 = func(current_t, current_y);
  54.                 double k2 = func(current_t + (h / 2), current_y + (h / 2)*k1);
  55.                 double k3 = func(current_t + (h / 2), current_y + (h / 2)*k2);
  56.                 double k4 = func(current_t + h, current_y + h * k3);
  57.                 double k = k1 + 2 * k2 + 2 * k3 + k4;
  58.                 container[i] = current_y + (h*k / 6);
  59.                 current_t += h;
  60.         }
  61.  
  62.         return container;
  63.  
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement