TheAlgorithms/C++ 1.0.0
All the algorithms implemented in C++
Loading...
Searching...
No Matches
rungekutta.cpp File Reference

Runge Kutta fourth order method implementation More...

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

Go to the source code of this file.

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)
 asserting the test functions
 
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

Definition in file rungekutta.cpp.

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.

Definition at line 33 of file rungekutta.cpp.

33{ return ((x - y) / 2.0); }

◆ main()

int main ( void )

Main function.

Returns
0 on exit

Definition at line 130 of file rungekutta.cpp.

130 {
131 test(); // Execute the tests
132 return 0;
133}
static void test()
Tests to check algorithm implementation.

◆ 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.

Definition at line 57 of file 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.
int h(int key)
static double change(double x, double y)
asserting the test functions

◆ test()

static void test ( )
static

Tests to check algorithm implementation.

Returns
void

Definition at line 100 of file rungekutta.cpp.

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....