2010-08-17 4 views
10

En supposant que j'ai un tableau de doubles, quel est un bon algorithme pour échantillonner cette série en utilisant Akima interpolation? Je suis trop stupide pour traduire cette description mathématique en code.Interpolation Akima d'un tableau de doubles

// values is an array of doubles 
// idx is the index of the left-hand value for the current interpolation 
// t is the normalized parameter between values[idx] and values[idx+1] 
// Don't worry about array bounds, I'll handle that separately. 
public double InterpolateAkima(double[] values, int idx, double t) 
{ 
    ...? 
} 
+3

Il ressemble à beaucoup de travail que personne ne code juste pour vous. Il semble assez simple, mais quelques bonnes heures de codage pour le faire. N'hésitez pas à demander s'il y a une chose spécifique que vous ne comprenez pas. –

+0

@Albin, assez bien je suppose. L'interpolation cubique est comme 10 lignes de code, j'espérais que tout ce calcul pourrait être condensé jusqu'à peut-être 20 lignes ... –

Répondre

27

Repost et expansion sur ma réponse à another SO question qui a été fermé en tant que doublon de cette question - comme suggéré par un commentaire sur cette question.

document original de Akima: `` Une nouvelle méthode d'interpolation et d'ajustement de courbe lisse sur la base de procédures locales '', Journal of ACM 17, 4 (1970), 589-602

http://www.leg.ufpr.br/lib/exe/fetch.php/wiki:internas:biblioteca:akima.pdf

C la mise en œuvre

https://github.com/ampl/gsl/blob/master/interpolation/akima.c

C# mise en œuvre

https://gist.github.com/dreikanter/3526685

mise en œuvre Delphi (voir BuildAkimaSpline de procédure delphi/src/spline3.pas)

http://www.alglib.net/translator/re/alglib-2.6.0.delphi.zip

Fortran de Akima 66 mise en œuvre

http://cran.r-project.org/web/packages/akima/

Fortran 90 mise en œuvre

http://miyoshi.googlecode.com/svn-history/r72/trunk/common/common.f90

implémentation Java

https://commons.apache.org/proper/commons-math/jacoco/org.apache.commons.math3.analysis.interpolation/AkimaSplineInterpolator.java.html

mise en œuvre Lisp "pour 2d-polylignes AutoCAD"

http://autocad.xarch.at/code/candido/akima.lsp

mise en œuvre Matlab

http://www.mathworks.se/matlabcentral/fileexchange/1814-akima-interpolation

mise en œuvre Pascal (program description)

http://jean-pierre.moreau.pagesperso-orange.fr/Pascal/akima_pas.txt

de mise en œuvre python

http://www.lfd.uci.edu/~gohlke/code/akima.py.html

de mise en œuvre de VB6 (voir sous-programme BuildAkimaSpline en VB6/src/spline3.bas)

http://www.alglib.net/translator/re/alglib-2.6.0.vb6.zip

http://www.koders.com/cpp/fid1393B9D668316C1700966643DE0609660B9CB13A.aspx?s=%22Brian+Smith%22

+0

En outre: [Implémentation de Mathematica par Jens-Peer Kuska] (https://groups.google.com/d/msg/comp.soft-sys.math .mathematica/XAWwuMCV_8w/FZDMf3Pgsz0J). –

+0

Aussi alglib (mentionné seulement sous VB6 et Delphi) a aussi des implémentations C++, C#, python et autres. – Dan

+0

Une autre implémentation C (GSL): https://www.gnu.org/software/gsl/manual/html_node/Interpolation-Types.html#Interpolation-Types – alfC

7

obtenu quelques hits sur la recherche google code, mais ce n'est pas un domaine que je connais beaucoup au sujet. Le premier résultat est pour Math.NET ce qui peut être intéressant.

+3

+1: Math.NET a une implémentation en effet – Bertvan

+0

C'est dans l'espace de noms 'MathNet.Numerics.Interpolation' – Keith

+0

http://mathnetnumerics.codeplex.com/wikipage?title=Interpolation –

Questions connexes