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

Runge Kutta fourth order method implementation More...

#include <cassert>
#include <iostream>
#include <vector>
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)
 for using the vector container 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

for using the vector container

asserting the test functions for io operations

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.
33 { return ((x - y) / 2.0); }

◆ main()

int main ( void  )

Main function.

Returns
0 on exit
130  {
131  test(); // Execute the tests
132  return 0;
133 }
static void test()
Tests to check algorithm implementation.
Definition: rungekutta.cpp:100
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.
58  {
59  // Count number of iterations
60  // using step size or
61  // step height h
62 
63  // n calucates the number of iterations
64  // k1, k2, k3, k4 are the Runge Kutta variables
65  // used for calculation of y at each iteration
66 
67  auto n = static_cast<uint64_t>((x - init_x) / h);
68  // used a vector container for the variables
69  std::vector<double> k(4, 0.0);
70 
71  // Iterate for number of iterations
72 
73  double y = init_y;
74  for (int i = 1; i <= n; ++i) {
75  // Apply Runge Kutta Formulas
76  // to find next value of y
77  k[0] = h * change(init_x, y);
78  k[1] = h * change(init_x + 0.5 * h, y + 0.5 * k[0]);
79  k[2] = h * change(init_x + 0.5 * h, y + 0.5 * k[1]);
80  k[3] = h * change(init_x + h, y + k[2]);
81 
82  // Update next value of y
83 
84  y += (1.0 / 6.0) * (k[0] + 2 * k[1] + 2 * k[2] + k[3]);
85 
86  // Update next value of x
87 
88  init_x += h;
89  }
90 
91  return y;
92 }
int h(int key)
Definition: hash_search.cpp:45
static double change(double x, double y)
for using the vector container
Definition: rungekutta.cpp:33
Here is the call graph for this function:

◆ test()

static void test ( )
static

Tests to check algorithm implementation.

Returns
void
100  {
101  std::cout << "The Runge Kutta function will be tested on the basis of "
102  "precomputed values\n";
103 
104  std::cout << "Test 1...."
105  << "\n";
107  2, 3, 4, 0.2); // Tests the function with pre calculated values
108  assert(valfirst == 3.10363932323749570);
109  std::cout << "Passed Test 1\n";
110 
111  std::cout << "Test 2...."
112  << "\n";
114  1, 2, 5, 0.1); // The value of step changed
115  assert(valsec == 3.40600589380261409);
116  std::cout << "Passed Test 2\n";
117 
118  std::cout << "Test 3...."
119  << "\n";
121  -1, 3, 4, 0.1); // Tested with negative value
122  assert(valthird == 2.49251005860244268);
123  std::cout << "Passed Test 3\n";
124 }
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:57