diff --git a/contents/forward_euler_method/code/java/ForwardEuler.java b/contents/forward_euler_method/code/java/ForwardEuler.java new file mode 100644 index 000000000..16d398a5f --- /dev/null +++ b/contents/forward_euler_method/code/java/ForwardEuler.java @@ -0,0 +1,38 @@ +public class ForwardEuler { + private static double[] solveEuler(double timestep, int n) { + double[] eulerResult = new double[n]; + + //Setting the initial condition + eulerResult[0] = 1; + for(int i = 1; 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 = 0; i < eulerResult.length; i++) { + double time = i * 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..6016fdb79 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/ForwardEuler.java) {% endmethod %}