Algorithms_in_C++  1.0.0
Set of algorithms implemented in C++.
rungekutta.cpp File Reference

Runge Kutta fourth order method implementation More...

#include <iostream>
#include <vector>
#include <cassert>
Include dependency graph for rungekutta.cpp:

Namespaces

 numerical_methods
 for io operations
 
 runge_kutta
 Functions for Runge Kutta fourth order method.
 

Functions

double numerical_methods::runge_kutta::rungeKutta (double init_x, const double &init_y, const double &x, const double &h)
 the Runge Kutta method finds the value of integration of a function in the given limits. the lower limit of integration as the initial value and the upper limit is the given x More...
 
static double change (double x, double y)
 asserting the test functions More...
 
static void test ()
 Tests to check algorithm implementation. More...
 
int main ()
 Main function. More...
 

Detailed Description

Runge Kutta fourth order method implementation

Author
Rudra Prasad Das

It solves the unknown value of y for a given value of x only first order differential equations can be solved

Function Documentation

◆ change()

static double change ( double  x,
double  y 
)
static

asserting the test functions

for io operations for using the vector container

The change() function is used to return the updated iterative value corresponding to the given function

Parameters
xis the value corresponding to the x coordinate
yis the value corresponding to the y coordinate
Returns
the computed function value at that call
Examples
/Users/runner/work/C-Plus-Plus/C-Plus-Plus/numerical_methods/rungekutta.cpp.
32 {
33  return ((x - y)/2.0);
34 
35 }

◆ main()

int main ( void  )

Main function.

Returns
0 on exit
131 {
132 
133  test(); // Execute the tests
134  return 0;
135 }
Here is the call graph for this function:

◆ rungeKutta()

double numerical_methods::runge_kutta::rungeKutta ( double  init_x,
const double &  init_y,
const double &  x,
const double &  h 
)

the Runge Kutta method finds the value of integration of a function in the given limits. the lower limit of integration as the initial value and the upper limit is the given x

Parameters
init_xis the value of initial x and is updated after each call
init_yis the value of initial x and is updated after each call
xis current iteration at which the function needs to be evaluated
his the step value
Returns
the value of y at thr required value of x from the initial conditions
Examples
/Users/runner/work/C-Plus-Plus/C-Plus-Plus/numerical_methods/rungekutta.cpp.
57 {
58 
59  // Count number of iterations
60  // using step size or
61  // step height h
62 
63 
64  // n calucates the number of iterations
65  // k1, k2, k3, k4 are the Runge Kutta variables
66  // used for calculation of y at each iteration
67 
68  auto n = static_cast<uint64_t>((x - init_x) / h);
69  // used a vector container for the variables
70  std::vector<double> k(4,0.0);
71 
72 
73  // Iterate for number of iterations
74 
75  double y = init_y;
76  for (int i=1; i<=n; ++i)
77  {
78 
79  // Apply Runge Kutta Formulas
80  // to find next value of y
81  k[0] = h*change(init_x, y);
82  k[1] = h*change(init_x + 0.5*h, y + 0.5*k[0]);
83  k[2] = h*change(init_x + 0.5*h, y + 0.5*k[1]);
84  k[3] = h*change(init_x + h, y + k[2]);
85 
86 
87  // Update next value of y
88 
89  y += (1.0/6.0)*(k[0] + 2*k[1] + 2*k[2] + k[3]);
90 
91  // Update next value of x
92 
93  init_x += h;
94  }
95 
96  return y;
97 }
Here is the call graph for this function:

◆ test()

static void test ( )
static

Tests to check algorithm implementation.

Returns
void
106  {
107  std::cout << "The Runge Kutta function will be tested on the basis of precomputed values\n";
108 
109  std::cout << "Test 1...." << "\n";
110  double valfirst=numerical_methods::runge_kutta::rungeKutta(2,3,4,0.2); // Tests the function with pre calculated values
111  assert(valfirst==3.10363932323749570);
112  std::cout << "Passed Test 1\n";
113 
114  std::cout << "Test 2...." << "\n";
115  double valsec=numerical_methods::runge_kutta::rungeKutta(1,2,5,0.1); // The value of step changed
116  assert(valsec==3.40600589380261409);
117  std::cout << "Passed Test 2\n";
118 
119  std::cout << "Test 3...." << "\n";
120  double valthird=numerical_methods::runge_kutta::rungeKutta(-1,3,4,0.1); // Tested with negative value
121  assert(valthird==2.49251005860244268);
122  std::cout << "Passed Test 3\n";
123  }
std::vector< double >
std::cout
h
int h(int key)
Definition: hash_search.cpp:45
change
static double change(double x, double y)
asserting the test functions
Definition: rungekutta.cpp:31
numerical_methods::runge_kutta::rungeKutta
double rungeKutta(double init_x, const double &init_y, const double &x, const double &h)
the Runge Kutta method finds the value of integration of a function in the given limits....
Definition: rungekutta.cpp:56
test
static void test()
Tests to check algorithm implementation.
Definition: rungekutta.cpp:105