Интерполяция Акима массива двойников

Предполагая, что у меня есть массив двойников, какой хороший алгоритм для выборки этой серии с использованием Интерполяция Акима? Я слишком глуп, чтобы перевести это математическое описание в код.

// 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)
{
  ...?
}

person David Rutten    schedule 17.08.2010    source источник
comment
Это похоже на много работы, которую никто не будет просто кодировать для вас. Это выглядит довольно прямолинейно, но для этого нужно потратить несколько часов кодирования. Не стесняйтесь спрашивать, если вам что-то непонятно.   -  person Albin Sunnanbo    schedule 17.08.2010
comment
@ Альбин, я думаю, достаточно честно. Кубическая интерполяция — это как 10 строк кода, я надеялся, что всю эту математику можно сократить до 20 строк…   -  person David Rutten    schedule 17.08.2010


Ответы (2)


Репост и расширение моего ответа на другой вопрос SO, который был закрыт как дубликат этого вопроса - как было предложено в комментарии к этому вопросу.

Оригинальная статья Акимы: ``Новый метод интерполяции и плавной подгонки кривой, основанный на локальных процедурах'', Journal of ACM 17, 4 (1970), 589-602

http://student.ndhu.edu.tw/%7Eu9111023/akima.pdf

C реализация

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

Реализация С#

https://github.com/mathnet/mathnet-numerics/blob/master/src/Numerics/Interpolation/Algorithms/AkimaSplineInterpolation.cs

Реализация Delphi (см. процедуру BuildAkimaSpline в delphi/src/spline3.pas)

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

Реализация Akima на Fortran 66

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

Реализация Фортран 90

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

Java-реализация

http://code.google.com/p/msnlab4/source/browse/trunk/src/br/edu/ufcg/msn/interpolacao/spline/AkimaCubicSplineInterpolator.java?spec=svn83&r=83

Реализация Lisp для AutoCAD 2d-Polylines

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

Реализация Matlab

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

Реализация Pascal (описание программы)

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

Реализация Python

http://www.lfd.uci.edu/%7Egohlke/code/akima.py.html

Реализация VB6 (см. подпрограмму BuildAkimaSpline в 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

person Handcraftsman    schedule 09.01.2011
comment
Также alglib (упомянутый только в VB6 и delphi) также имеет C++, C#, python и другие реализации. - person Dan; 09.05.2013
comment
@CoolMind Я нашел замену неработающим ссылкам, где это было возможно. - person Handcraftsman; 05.05.2016
comment
@Handcraftsman Пожалуйста, добавьте мою реализацию TypeScript (JavaScript): http://www.source-code.biz/snippets/typescript/akima - person Christian d'Heureuse; 29.08.2016
comment
Ссылка на реализацию C неверна и должна быть исправлена, чтобы точно указывать на то, что написано в тексте: github.com/ampl/gsl/blob/master/interpolation/akima.c (а не какой-то пакет debian, лол). Ссылка C# также указывает на 404, но текст ссылки правильный: /а> - person bliako; 28.07.2019

Получено несколько попаданий в поиск кода Google. но это не та область, о которой я много знаю. Первый результат относится к Math.NET, который может представлять определенный интерес.

person Kris    schedule 04.09.2010
comment
Он находится в пространстве имен MathNet.Numerics.Interpolation - person Keith; 08.09.2010