
com.github.davidmoten.rx.Maths Maven / Gradle / Ivy
package com.github.davidmoten.rx;
import rx.Observable;
import rx.functions.Func0;
import rx.functions.Func1;
import rx.functions.Func2;
public final class Maths {
private Maths() {
// prevent instantiation
}
public static Observable solveWithNewtonsMethod(final Func1 f,
final Func1 dfdx, double x0) {
return Observable.just(1).repeat().scan(x0, new Func2() {
@Override
public Double call(Double xn, Integer n) {
return xn - f.call(xn) / dfdx.call(xn);
}
});
}
public static Observable solveWithNewtonsMethod(final Func1 f,
final double x0, final double h) {
Func1 dfdx = new Func1() {
@Override
public Double call(Double x) {
return (f.call(x + h) - f.call(x - h)) / 2.0 / h;
}
};
return solveWithNewtonsMethod(f, dfdx, x0);
}
public static Observable primes() {
return Observable.defer(new Func0>() {
final Mutable n = new Mutable(0L);
@Override
public Observable call() {
return Observable.just(1).repeat().map(new Func1() {
@Override
public Long call(Integer t) {
n.value += 1;
return n.value;
}
});
}
}).filter(new Func1() {
@Override
public Boolean call(Long n) {
if (n < 2) {
return false;
}
for (int i = 2; i <= Math.floor(Math.sqrt(n)); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
});
}
private static final class Mutable {
T value;
Mutable(T value) {
this.value = value;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy