diff --git a/jmath-benchmark/build.gradle b/jmath-benchmark/build.gradle new file mode 100644 index 0000000..41929ef --- /dev/null +++ b/jmath-benchmark/build.gradle @@ -0,0 +1,18 @@ +plugins { + id 'java-library' + alias(catalog.plugins.lombok) + alias(catalog.plugins.envelope) +} + +repositories { + mavenCentral() +} + +dependencies { + implementation project(':jmath') +} + +envelopeJar { + mainClass = 'net.woggioni.jmath.benchmark.Main' +} + diff --git a/jmath-benchmark/src/main/java/net/woggioni/jmath/benchmark/Main.java b/jmath-benchmark/src/main/java/net/woggioni/jmath/benchmark/Main.java new file mode 100644 index 0000000..867810c --- /dev/null +++ b/jmath-benchmark/src/main/java/net/woggioni/jmath/benchmark/Main.java @@ -0,0 +1,33 @@ +package net.woggioni.jmath.benchmark; + +import net.woggioni.jmath.Matrix; +import net.woggioni.jmath.NumericTypeFactory; +import net.woggioni.jmath.Rational; +import net.woggioni.jmath.RationalFactory; +import net.woggioni.jmath.Vector; + +import java.util.Optional; +import java.util.Random; +import java.util.function.IntFunction; + +public class Main { + public static void main(String[] args) { + int size = Optional.of(args) + .filter(it -> it.length > 0) + .map(it -> it[0]) + .map(Integer::parseInt) + .orElse(3); + Random rnd = new Random(101325); + NumericTypeFactory numericTypeFactory = RationalFactory.getInstance(); + Matrix.ValueGenerator init = (i, j) -> + Rational.of(rnd.nextInt(-1000 * size, 1000 * size), (long) 1000 * size); + Matrix mtx = Matrix.of(numericTypeFactory, size, size, init); + Matrix lu = mtx.clone(); + Matrix.Pivot pivot = lu.lup(); + IntFunction initVector = (i) -> Rational.of(rnd.nextInt(0, size), size); + Vector b = Vector.of(numericTypeFactory, size, initVector); + Vector x = lu.luSolve(b, pivot); + Vector error = mtx.mmul(x).sub(b); + System.out.println(error.norm()); + } +} diff --git a/settings.gradle b/settings.gradle index 4abac85..6a5a3ae 100644 --- a/settings.gradle +++ b/settings.gradle @@ -32,3 +32,4 @@ rootProject.name = 'jwo' include('benchmark') include('jmath') +include('jmath-benchmark')