From ac29ae34a15ff7dbabe295e94033bf5eff9d0d6d Mon Sep 17 00:00:00 2001 From: Joe Klonowski Date: Wed, 17 Oct 2018 10:23:00 -0700 Subject: [PATCH 1/4] Add Java implementation of Forward Euler --- .../forward_euler_method/code/java/Euler.java | 38 +++++++++++++++++++ .../forward_euler_method.md | 2 + 2 files changed, 40 insertions(+) create mode 100644 contents/forward_euler_method/code/java/Euler.java diff --git a/contents/forward_euler_method/code/java/Euler.java b/contents/forward_euler_method/code/java/Euler.java new file mode 100644 index 000000000..ad0e1ad92 --- /dev/null +++ b/contents/forward_euler_method/code/java/Euler.java @@ -0,0 +1,38 @@ +public class Euler { + private static double[] solveEuler(double timestep, int n) { + double[] eulerResult = new double[n]; + + //Setting the initial condition + eulerResult[1] = 1; + for(int i = 2; i < eulerResult.length; i++) { + eulerResult[i] = eulerResult[i-1] - (3 * eulerResult[i-1] * timestep); + } + return eulerResult; + } + + private static boolean checkResult(double[] eulerResult, double threshold, double timestep) { + boolean isApprox = true; + + for(int i = 1; i < eulerResult.length; i++) { + double time = (i - 1) * timestep; + double solution = Math.exp(-3*time); + if(Math.abs(eulerResult[i] - solution) > threshold) { + System.out.println(eulerResult[i] + " " + solution); + isApprox = false; + } + } + + return isApprox; + } + + public static void main(String[] args) { + double timestep = 0.1; + int n = 100; + double threshold = 0.1; + + double[] eulerResult = solveEuler(timestep, n); + boolean isApprox = checkResult(eulerResult, threshold, timestep); + + System.out.println(isApprox); + } +} diff --git a/contents/forward_euler_method/forward_euler_method.md b/contents/forward_euler_method/forward_euler_method.md index 5ed5425fb..3bf4e5c2c 100644 --- a/contents/forward_euler_method/forward_euler_method.md +++ b/contents/forward_euler_method/forward_euler_method.md @@ -128,6 +128,8 @@ Full code for the visualization follows: [import, lang:"go"](code/golang/euler.go) {% sample lang="asm-x64" %} [import, lang:"asm-x64"](code/asm-x64/euler.s) +{% sample lang="java" %} +[import, lang:"java"](code/java/euler.java) {% endmethod %}