2016-10-27 4 views
0

Мое смелое утверждение состоит в том, что реализация Octave кубического сплайна, реализованная в interp1(..., "spline"), отличается от алгоритма «естественного кубического сплайна», описанного, например, Wolfram's Mathworld. Я написал свою собственную реализацию последнего и сравнил его с выходом функции interp1(..., "spline"), со следующими результатами:Реализация кубического сплайна в октаве

Spline comparison

Я обнаружил, что, когда я пытаюсь такое же сравнение с 4 очками, решения также отличаются друг от друга, и, кроме того, решение Октавы идентично подбору одного кубического многочлена всем четырем точкам (а фактически не образует кусочно сплайн для трех интервалов).

Я также попытался посмотреть под капотом при внедрении Octav's сплайнов и обнаружил, что это слишком тупо, чтобы читать и понимать через 5 минут.

Я знаю, что существует несколько вариантов граничных условий, которые можно выбрать («естественный» и «зажатый») при реализации кубического сплайна. В моей реализации используются «естественные» граничные условия (в которых вторая производная от двух внешних точек равна нулю).

Если Кубический сплайн Octave действительно отличается от стандартного кубического сплайна, то что же это на самом деле?

EDIT:

второго порядка разности двух решений, показанных на графике сравнения выше Построенные здесь:

2nd order finite differences

Во-первых, по всей видимости, будет только два кубических многочленов в случае Октава : тот, который соответствует первым двум интервалам, и соответствует по последним двум интервалам. Во-вторых, они явно не используют «естественные» сплайны, так как вторые производные в экстремумах не стремятся к нулю.

Кроме того, I считает фактом, что разность второго порядка для моей реализации в средней (то есть третьей) точке равна нулю, является просто совпадением и не требуется алгоритмом. Повторение этого теста для другого набора точек подтвердит/опровергнет это.

+1

Не копаясь в коде Octave самостоятельно ... Некоторые более возможные тесты: естественный кубический сплайн между двумя точками - это прямая линия.Между 3 бесколоночными точками это не должно быть параболой (квадратичной). Вы могли бы вычислить приближения к производным, используя разделенные различия. Заметим, что сплайн должен быть C2, т. Е. Вторая производная должна быть непрерывной и кусочно-линейной. – Arunas

+0

Я считаю, что используются неисключенные конечные условия, то есть одна потенциальная разница: https://www.gnu.org/software/octave/doc/v4.0.3/One_002ddimensional-Interpolation.html#XREFspline – stephematician

+0

Это не так. естественно! Естественный сплайн имеет, как показывает ваша реализация, 0-й производной на концах. Естественный сплайн минимизирует (линеаризованную) энергию изгиба на протяжении интервала, а интерполирует, и он уникален - все остальное может свести к минимуму другой энергетический функционал или просто кусочно-кусочную кривую. – Arunas

ответ

1

Различные конечные условия объясняют разницу между вашей реализацией и Octave's. Octave использует не-а-узел состояние (в зависимости от входа)

См help spline

Чтобы объяснить свои наблюдения: третья производная непрерывна на 2-й и (п-1) -й перерыв в связи с а не потому, что вторая производная Octave выглядит так, будто у нее меньше «разрывов», потому что это непрерывная прямая линия над двумя и двумя последними сегментами. Если вы посмотрите на третьей производной, вы можете увидеть эффект более четко - 3-я производная разрывная только на 3-й перерыв (середина)

x = 1:5; 
y = rand(1,5); 
xx = linspace(1,5); 
pp = interp1(x, y, 'spline', 'pp'); 
yy = ppval(pp, xx); 
dyy = ppval(ppder(pp, 3), xx); 
plot(xx, yy, xx, dyy); 

Также структура pp данных выглядит следующим образом

pp = 

    scalar structure containing the fields: 

    form = pp 
    breaks = 

     1 2 3 4 5 

    coefs = 

     0.427823 -1.767499 1.994444 0.240388 
     0.427823 -0.484030 -0.257085 0.895156 
     -0.442232 0.799439 0.058324 0.581864 
     -0.442232 -0.527258 0.330506 0.997395 

    pieces = 4 
    order = 4 
    dim = 1 
    orient = first 
Смежные вопросы