реализация функции interp1 MATLAB в J2ME

Я хочу реализовать interp1, интерполяцию одномерных данных (поиск по таблице), функцию, доступную в MATLAB в J2ME или JAVA. Ссылка здесь

http://www.mathworks.com/access/helpdesk/help/techdoc/ref/interp1.html

Есть ли какая-либо библиотека в J2ME или JAVA, которая уже реализовала ту же функцию? Если нет, может ли кто-нибудь помочь мне в реализации функции interp1 в J2ME или JAVA?


person Jeeka    schedule 07.06.2010    source источник
comment
В Java очень легко реализовать линейную интерполяцию. Просто цикл + нормализация + взвешенная сумма   -  person Mikhail    schedule 07.06.2010
comment
Если у вас есть доступ к Matlab, вы найдете m-файл для interp1. Изучение этого даст вам некоторые подсказки о написании версии Java, но не просто повторно внедряйте Matlab в Java, это нарушит законы, касающиеся прав интеллектуальной собственности.   -  person High Performance Mark    schedule 07.06.2010
comment
Спасибо Михаил! Можете ли вы дать мне более подробную информацию о том, как будет выполняться линейная интерполяция, поскольку моя математика не так уж сильна?   -  person Jeeka    schedule 07.06.2010
comment
Спасибо Высокоэффективный Марк! у меня не установлен матлаб. Как я могу получить доступ к файлу interp1.m?   -  person Jeeka    schedule 07.06.2010


Ответы (2)


Пример код взят отсюда (только линейный):

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;
    }
person dgorissen    schedule 09.01.2012

я только что узнал метод, используемый для линейной интерполяции, если «линейный» выбран для параметра метода в синтаксисе функции interp1, а именно: interp1 (x, y, xi, «линейный»). Это реализовано в методе interp(double x) класса LinearInterpolator, который присутствует в пакете multigraph. ссылка ниже

http://multigraph.sourceforge.net/multigraph/javadoc/multigraph/LinearInterpolator.html

если вы загрузите пакет и откроете файл LinearInterpolator.java, вы сможете найти код. Ссылка для скачивания пакета

http://sourceforge.net/projects/multigraph/files/multigraph/

person Jeeka    schedule 08.06.2010