All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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