2010-06-07 4 views
0

Je cherche à implémenter l'interpolation interp1, 1-D (table lookup), fonction disponible dans MATLAB en J2ME ou JAVA. voici le lienimplémentation de la fonction interp1 de MATLAB en J2ME

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

est-il une bibliothèque disponible en JAVA J2ME ou qui a déjà mis en œuvre la même fonction? Si non, quelqu'un peut-il m'aider à implémenter la fonction interp1 dans J2ME ou JAVA?

+0

Il est très facile à mettre en œuvre une interpolation linéaire en Java. Juste une boucle + normalisation + somme pondérée – Mikhail

+0

Si vous avez accès à Matlab, vous trouverez un fichier m pour interp1. L'étudier vous donnera quelques indices sur l'écriture d'une version Java - mais ne réimplémente pas sim- plement le Matlab en Java, qui enfreindrait les lois relatives aux droits de propriété intellecutal. –

+0

Merci Mikhail! Pouvez-vous me donner un peu plus de détails sur la façon de faire l'interpolation linéaire, car mes mathématiques ne sont pas si fortes? – Jeeka

Répondre

0

Je viens de découvrir la méthode utilisée pour l'interpolation linéaire si 'linear' est sélectionné pour le paramètre method dans la syntaxe de la fonction interp1, qui est: interp1 (x, y, xi, 'linear'). Ceci est implémenté dans la méthode interp (double x) de la classe LinearInterpolator qui est présente dans le package multigraph. le lien est ci-dessous

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

si u télécharger le package et ouvrez le fichier LinearInterpolator.java u peut trouver le code. Le lien pour télécharger le package est

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

1

Exemple code taken from here (linéaire):

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; 
    } 
Questions connexes