Algorithms_in_C++ 1.0.0
Set of algorithms implemented in C++.
Loading...
Searching...
No Matches
rungekutta.cpp File Reference

Runge Kutta fourth order method implementation More...

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

Namespaces

namespace  numerical_methods
 for assert
 
namespace  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
 
static double change (double x, double y)
 for using the vector container
 
static void test ()
 Tests to check algorithm implementation.
 
int main ()
 Main function.
 

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}
double k(double x)
Another test function.
Definition composite_simpson_rule.cpp:117
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