用Java表示变量中一行的等式

时间:2017-09-22 03:58:43

标签: java

我不认为我在这里需要代码,但只是这样你才能看到我在看的东西:

public class Valuation {

//line is a monotonic (non-decreasing.  Could be constant at points)
//line in 2D space where x=0 -> y=0 and x=1 -> y=1
//the gradient cannot be infinite
//line is only defined between x=0 and x=1.  Can catch when arguments to
//functions are unacceptable given this.
LineEquation line;

float cut(float from, float value){
    //Using 'from' as x, return the least value x' where 'value' is the difference
    //between the y value returned by x and the y value returned by x'
}

float eval(float from, float to){
    //require to > from
    //return the difference between the y value returned by 'to'
    //and the y value returned by 'from'
}

我的问题是如何在Java中表示这样的线/曲线?我可以验证给定的行符合我的要求,但我想让这个LineEquation类能够处理任何符合这些要求的行。这些可以是二次曲线或线,其中我们有类似的东西,当x在0和0.5之间时,方程是a,然后当x在0.5和1之间时,方程是b。我很沮丧地想到你可以描述符合规范的线路的所有方法,然后我将如何完成所有这些,以及我将如何以不同的方式处理所有不同的类型。不幸的是,我没有词汇来找到一个有我想要的库。

1 个答案:

答案 0 :(得分:-1)

如果你正在使用Java 8,那么最简单的做法可能是将曲线存储为Function<Float,Float>,它可以为任何类型的曲线实现任何类型的方程式,{{ 1}}对于任何给定的y都是单值的,而x始终属于x的范围。

你的课可能会是这样的。

float

然后您可以使用

等调用创建这些内容
public class Valuation {

    final Function<Float,Float> curve;

    public Valuation(final Function<Float,Float> curve) {
        this.curve = curve;
    }

    float eval(float from, float to){
        return curve.apply(to) - curve.apply(from);
    }
}

表示典型的单调二次方或

new Valuation( x -> ( x * x + 2 * x + 3 ))

表示由两个线性部分组成的分段函数。

我还没有显示new Valuation( x -> ( x > 0.5 ? 3 * x : 1 + x )) 的代码。不得不把事情留给你!