Как извлечь формулу для интерполяции октавы/матлаба?

Итак, у меня есть некоторые моменты:

## Some points
x = [1  2  3  4  5  6 ];
y = [10 15 30 45 50 55];

и я могу подогнать к ним кривую:

x1 = linspace(1,6);

# piecewise cubic hermite interpolating polynomial, respects monotonicity.
pchipy1 = interp1(x,y,x1,"pchip");  

и построить кривую:

plot(x1,pchipy1);

И теперь люди говорят мне: Ой, это красивая кривая, какова ее формула?

И у меня нет ответа.

Но я думаю, что это просто сплайновая кривая, состоящая из кубических частей, так что, по крайней мере, должна быть возможность получить формулы для частей?

Кто-нибудь знает, как?


person John Lawrence Aspden    schedule 14.11.2020    source источник
comment
mathworks.com/help/matlab/ref/pchip.html   -  person Cris Luengo    schedule 14.11.2020
comment
Спасибо @Cris, на самом деле это полный ответ на мой вопрос. Я думаю, что напишу подробности, чтобы ответить на вопрос, основанный на этом. Если вы не хотите?   -  person John Lawrence Aspden    schedule 15.11.2020


Ответы (1)


Формула написана в документах MATLAB:

f(x) = a*(x−x1)^3 + b*(x−x1)^2 + c*(x−x1) + d

Только interp1 не вернет подобранные коэффициенты. Как упомянул @Cris Luengo, под капотом вызывается функция pchip. Поэтому, если вы хотите получить коэффициенты, вам нужно вызвать pchip и ppval для создания собственной 1D-интерполяции.

% vq = interp1(x,y,x1,"pchip") =>
pp = pchip(x,y);
pchipy1  = ppval(pp,x1);

документация по октаве не такая сложная.

person max    schedule 15.11.2020
comment
Спасибо, вы с Крисом решили мою проблему! Это кажется достаточно полезным вопросом, поэтому я думаю, что напишу подробности, чтобы дать полный ответ с примером. Разве что вы или Крис хотели бы это сделать? В этом случае я приму это как ответ. - person John Lawrence Aspden; 15.11.2020
comment
@JohnLawrenceAspden только что проверил документы Octave. Они не говорят много о лежащей в основе теории. Я рекомендую обращаться к документам MATLAB для таких вещей. Им в значительной степени платят за документы (потому что инженерам неудобно читать сообщения в блогах;)) - person max; 15.11.2020
comment
«потому что инженерам неудобно читать сообщения в блогах» Или, скорее, потому, что они понимают, что программное обеспечение полезно (и, следовательно, ценно) ровно настолько, насколько его документация. - person Cris Luengo; 15.11.2020
comment
@CrisLuengo полностью согласен, что это не очень хорошая «защита» октавы в этом вопросе, но я обнаружил, что, как правило, в книге содержится множество информации (например, уравнения, выводы и академические ссылки). «исходный» код большинства функций этого типа. Это справедливо и для pchip. - person Tasos Papastylianou; 18.11.2020
comment
@Tasos: мне следует больше смотреть на источники. Octave делают очень знающие люди, я уверен, что мы все можем многому у них научиться. Но документация — это всего лишь одна из тех вещей, в которых программисты не очень хороши, вам действительно нужно платить людям, чтобы они писали документы! :) (И я могу сказать это, потому что я тоже не умею писать документы.) - person Cris Luengo; 18.11.2020