2010-06-07 5 views
0

Я ищу для реализации интерполяции интерполяции 1, 1-D (поиск в таблице), функции, доступной в MATLAB в J2ME или JAVA. вот ссылкареализация функции interp1 для MATLAB в J2ME

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

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

+0

Это очень легко осуществить линейной интерполяции в Java. Просто цикл + нормализация + взвешенная сумма – Mikhail

+0

Если у вас есть доступ к Matlab, вы найдете m-файл для interp1. Изучение этого даст вам некоторые подсказки о написании Java-версии, но не просто повторите реализацию Matlab на Java, что нарушит законы, относящиеся к правам интеллектуальной собственности. –

+0

Спасибо, Михаил! Можете ли вы дать мне более подробную информацию о том, как будет выполняться линейная интерполяция, поскольку моя математика не настолько сильна? – Jeeka

ответ

0

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

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

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

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

1

Пример code taken from here (только линейная):

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; 
    } 
Смежные вопросы