mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 16:26:47 +08:00

* Remove QuickSelect doctest There are more Jest test cases already. * Remove AverageMedian doctest Already migrated to jest * Migrate doctest for BinaryExponentiationRecursive.js (also remove inline "main" test method) * Migrate doctest for EulersTotient.js (also remove inline "main" test method) * Migrate doctest for PrimeFactors.js (also remove inline "main" test method) * Migrate doctest for BogoSort.js Re-write prototype-polluting helper methods, too. (also remove inline test driver code) * Migrate doctest for BeadSort.js (also remove inline test driver code) * Migrate doctest for BucketSort.js (also remove inline test driver code) * Migrate doctest for CocktailShakerSort.js (also remove inline test driver code) * Migrate doctest for MergeSort.js (also remove inline test driver code) * Migrate doctest for QuickSort.js (also remove inline test driver code) * Migrate doctest for ReverseString.js (also remove inline test driver code) * Migrate doctest for ReverseString.js * Migrate doctest for ValidateEmail.js * Migrate doctest for ConwaysGameOfLife.js (remove the animate code, too) * Remove TernarySearch doctest Already migrated to jest * Migrate doctest for BubbleSort.js (also remove inline test driver code) * Remove doctest from CI and from dependencies relates to #742 fixes #586 * Migrate doctest for RgbHsvConversion.js * Add --fix option to "standard" npm script * Migrate doctest for BreadthFirstSearch.js (also remove inline test driver code) * Migrate doctest for BreadthFirstShortestPath.js (also remove inline test driver code) * Migrate doctest for EulerMethod.js (also remove inline test driver code) Move manual test-code for plotting stuff in the browser in a distinct file, too. Those "*.manual-test.js" files are excluded from the UpdateDirectory.mjs script, as well. * Migrate doctest for Mandelbrot.js (also remove inline test driver code & moved manual drawing test into a *.manual-test.js) * Migrate doctest for FloodFill.js * Migrate doctest for KochSnowflake.js (also move manual drawing test into a *.manual-test.js) * Update npm lockfile * Update README and COMMITTING with a few bits & bobs regarding testing & code quality
31 lines
1.5 KiB
JavaScript
31 lines
1.5 KiB
JavaScript
/**
|
|
* In mathematics and computational science, the Euler method (also called forward Euler method) is a first-order
|
|
* numerical procedure for solving ordinary differential equations (ODEs) with a given initial value. It is the most
|
|
* basic explicit method for numerical integration of ordinary differential equations. The method proceeds in a series
|
|
* of steps. At each step the y-value is calculated by evaluating the differential equation at the previous step,
|
|
* multiplying the result with the step-size and adding it to the last y-value: y_n+1 = y_n + stepSize * f(x_n, y_n).
|
|
*
|
|
* (description adapted from https://en.wikipedia.org/wiki/Euler_method)
|
|
* @see https://www.geeksforgeeks.org/euler-method-solving-differential-equation/
|
|
*/
|
|
export function eulerStep (xCurrent, stepSize, yCurrent, differentialEquation) {
|
|
// calculates the next y-value based on the current value of x, y and the stepSize
|
|
return yCurrent + stepSize * differentialEquation(xCurrent, yCurrent)
|
|
}
|
|
|
|
export function eulerFull (xStart, xEnd, stepSize, yStart, differentialEquation) {
|
|
// loops through all the steps until xEnd is reached, adds a point for each step and then returns all the points
|
|
const points = [{ x: xStart, y: yStart }]
|
|
let yCurrent = yStart
|
|
let xCurrent = xStart
|
|
|
|
while (xCurrent < xEnd) {
|
|
// Euler method for next step
|
|
yCurrent = eulerStep(xCurrent, stepSize, yCurrent, differentialEquation)
|
|
xCurrent += stepSize
|
|
points.push({ x: xCurrent, y: yCurrent })
|
|
}
|
|
|
|
return points
|
|
}
|