简体   繁体   中英

Mirroring function with apache commons

How do you mirror a function on x-Axis in Apache commons math,
respectively set f() = -f() ?


I found out so far, that you can add functions with FunctionUtils class and i guess i could

do a workaround by taking some points, set y-values negativ and interpolationg new Function,

but that seems a little cumbersome to me. Is there a simpler way?

As all functions are interfaces in org.apache.commons.math3.analysis you can wrap every function you want to invert into an anonymous object implementing that interface.

Here are three examples which should get you started:

/**
 * Created for http://stackoverflow.com/q/22929746/1266906
 */
public class MinusFunction {

    public static BivariateFunction invert(final BivariateFunction function) {
        return new BivariateFunction() {
            @Override
            public double value(double x, double y) {
                return - function.value(x,y);
            }
        };
    }

    public static MultivariateFunction invert(final MultivariateFunction function) {
        return new MultivariateFunction() {
            @Override
            public double value(double[] point) {
                return -function.value(point);
            }
        };
    }

    public static MultivariateMatrixFunction invert(final MultivariateMatrixFunction function) {
        return new MultivariateMatrixFunction() {
            @Override
            public double[][] value(double[] point) {
                final double[][] value = function.value(point);
                for (int i = 0; i < value.length; i++) {
                    for (int j = 0; j < value[i].length; j++) {
                        value[i][j] = -value[i][j];
                    }
                }
                return value;
            }
        };
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM