Java MATLAB的interp1函数在J2ME中的实现

Java MATLAB的interp1函数在J2ME中的实现,java,matlab,java-me,interpolation,linear-interpolation,Java,Matlab,Java Me,Interpolation,Linear Interpolation,我希望实现interp1,1-D数据插值(查表),该函数在J2ME或JAVA中的MATLAB中可用。这里是链接 J2ME或JAVA中是否有已经实现了相同功能的库?如果没有人能帮助我在J2ME或java中实现IpP1函数,则 >我找到了线性插值的方法,如果在函数中的“参数”选择了“线性”,即:IpP1(x,y,席,‘线性’)。这是在multigraph包中的LinearInterpolator类的interp(double x)方法中实现的。链接如下 如果您下载包并打开文件LinearInte

我希望实现interp1,1-D数据插值(查表),该函数在J2ME或JAVA中的MATLAB中可用。这里是链接


J2ME或JAVA中是否有已经实现了相同功能的库?如果没有人能帮助我在J2ME或java中实现IpP1函数,则

>我找到了线性插值的方法,如果在函数中的“参数”选择了“线性”,即:IpP1(x,y,席,‘线性’)。这是在multigraph包中的LinearInterpolator类的interp(double x)方法中实现的。链接如下

如果您下载包并打开文件LinearInterpolator.java,您可以找到代码。下载软件包的链接是

示例(仅线性):

public static final double[]interpLinear(double[]x,double[]y,double[]xi)抛出IllegalArgumentException{
如果(x.长度!=y.长度){
抛出新的IllegalArgumentException(“X和Y的长度必须相同”);
}
如果(x.length==1){
抛出新的IllegalArgumentException(“X必须包含多个值”);
}
double[]dx=新的double[x.长度-1];
double[]dy=新的double[x.长度-1];
双[]斜率=新的双[x.长度-1];
double[]截距=新的double[x.长度-1];
//计算各点之间的直线方程(即斜率和截距)
对于(int i=0;ix[x.length-1])| |(xi[i]
在Java中实现线性插值非常容易。只要一个循环+规范化+加权求和。如果你能访问Matlab,你会发现interp1的m文件。研究它会给你一些关于编写Java版本的线索——但是不要简单地用Java重新实现Matlab,那样会违反有关知识产权的法律。谢谢Mikhail!你能给我一点关于如何做线性插值的细节吗,因为我的数学不是很好?谢谢高性能分数!我没有安装MATLAB。如何访问interp1.m文件?
public static final double[] interpLinear(double[] x, double[] y, double[] xi) throws IllegalArgumentException {

        if (x.length != y.length) {
            throw new IllegalArgumentException("X and Y must be the same length");
        }
        if (x.length == 1) {
            throw new IllegalArgumentException("X must contain more than one value");
        }
        double[] dx = new double[x.length - 1];
        double[] dy = new double[x.length - 1];
        double[] slope = new double[x.length - 1];
        double[] intercept = new double[x.length - 1];

        // Calculate the line equation (i.e. slope and intercept) between each point
        for (int i = 0; i < x.length - 1; i++) {
            dx[i] = x[i + 1] - x[i];
            if (dx[i] == 0) {
                throw new IllegalArgumentException("X must be montotonic. A duplicate " + "x-value was found");
            }
            if (dx[i] < 0) {
                throw new IllegalArgumentException("X must be sorted");
            }
            dy[i] = y[i + 1] - y[i];
            slope[i] = dy[i] / dx[i];
            intercept[i] = y[i] - x[i] * slope[i];
        }

        // Perform the interpolation here
        double[] yi = new double[xi.length];
        for (int i = 0; i < xi.length; i++) {
            if ((xi[i] > x[x.length - 1]) || (xi[i] < x[0])) {
                yi[i] = Double.NaN;
            }
            else {
                int loc = Arrays.binarySearch(x, xi[i]);
                if (loc < -1) {
                    loc = -loc - 2;
                    yi[i] = slope[loc] * xi[i] + intercept[loc];
                }
                else {
                    yi[i] = y[loc];
                }
            }
        }

        return yi;
    }