2015-12-09 2 views
0

Здравствуйте, я попробовал сплайн-интерполяцию в Matlab. У меня есть следующие данные:Создать конверт со сплайновой интерполяцией в R

N = 36 

У меня также есть данные "Макс"

> max 
    1 
    5 
    7 
    10 
    12 
    14 
    16 
    20 
    24 
    27 
    31 
    33 
    35 

И "Hmax"

> hmax 
    157 
    124 
    207 
    208 
    170 
    178 
    163 
    160 
    146 
    151 
    160 
    173 
    172 

Тогда я хочу, чтобы создать конверт с сплайн-интерполяции с Matlab, следующий код:

maxenv = spline(max,hmax,1:N); 

Этот код покажет результата

> maxenv 
    157 
    86.564389 
    67.53534827 
    84.9886334 
    124 
    169.6452037 
    207 
    224.3964594 
    223.1919113 
    208 
    185.4207867 
    170 
    172.1744995 
    178 
    172.7562154 
    163 
    158.1641553 
    157.9081319 
    159.4480425 
    160 
    157.5512022 
    153.1731874 
    148.7085789 
    146 
    146.3035305 
    148.5290764 
    151 
    152.5114649 
    153.7458399 
    155.857295 
    160 
    166.578645 
    173 
    175.921355 
    172 
    157.893225 

Теперь я хочу создать конверт с сплайн интерполяции в R с тем же кодом:

maxenv <- spline(max,hmax,n=36) 

Но я получаю различный результат с моим кодом в Matlab. Как я могу получить тот же результат в R? Или «сплайн» на Matlab и R - другая функция?

Спасибо вам большое

+0

Вы пытались изменить метод с помощью R: 'maxenv <- spline (x, y, n, method =" fmm ")'? Возможные значения: «fmm», «естественный» и «периодический». Я не уверен, но я думаю, что естественный метод соответствует кубическому методу в Matlab. – obchardon

+0

Здравствуйте, @obchardon, спасибо за ваш ответ. Я попытался изменить метод, но результат все еще отличается от matlab. – Dikabari

ответ

1

В функции spline, n определяет количество «равноотстоящих точек, охватывающих интервал [XMIN, Xmax]». Тем не менее, ваши точки Matlab включают x=36, который равен 1 за наибольшей входной точкой данных в x=35, поэтому результаты R и Matlab не совпадают с значениями x. Для сравнения вы можете использовать xout = последовательность 1:36, чтобы получить самое прямое сравнение. С этой коррекцией и использованием стандартного сплайн-метода R (Forsythe, Malcolm и Moler) наибольшее несоответствие заключается в начальных значениях, которые, вероятно, связаны с R и Matlab, используя несколько разные методы для начала сплайн-интерполяции.

EDITED

xx <- 1:36 
maxenvR <- data.frame(spline(max, hmax, xout=xx, method="fmm")) 
maxenvRnat <- data.frame(spline(max, hmax, xout=xx, method="natural")) 
plot(xx, maxenv[1:length(xx)], type="l", col="black", ylab = "hmax") 
lines(maxenvR, col="blue") 
lines(maxenvRnat, col="green") 
points(max, hmax, col="red", pch=16) 
legend("bottomright", legend=c("Matlab spline", "R fmm spline", "R natural spline", "Data Points"), 
     text.col=c("black","blue","green", "red"), col=c("black","blue","green","red"), lty="solid") 

Интерполяция сплайнами алгоритмы могут отличаться от их обработки граничных условий на концах данных. Для общей сплайн-интерполяции R spline позволяет использовать либо кубические сплайны natural, которые задают вторую производную интерполирующую кубическую сплайны на ноль на каждом конце данных, либо метод fmm, который соответствует кубическим многочленам в первые четыре точки на каждом конце данных, а затем соединяет их с сплайн-уравнениями. Как видно из графика, это может дать очень разные результаты для первых нескольких точек, но затем они стремятся сходиться для внутренних точек. Документация Matlab о его сплайновой функционале, похоже, не описывает, как она относится к граничным условиям, и у меня нет доступа к ссылке, которую она дает, но из графика, она, по-видимому, очень близка к методу fmm R. интерполированные внутренние точки согласны, по крайней мере, с тремя значимыми цифрами. Однако на основе этого примера оказалось бы, что функции spline от Matlab и R с fmm не идентичны.
enter image description here

+0

Спасибо вам большое. Его средний сплайн с использованием Matlab и R никогда не получает тот же результат? @WaltS – Dikabari

+0

См. Отредактированную версию выше. – WaltS

Смежные вопросы