У меня есть два вектора, х и у, которые определены (случайным образом) следующим образом: x1=[1000 3000 5000 6000 4000 2000 500 0 -1000 -3000 -5000 -6000 -4000 -2000 -500 1 999 2999 4999]; y1=[5000 4999 4990 3500 2500 2499 2498 2497 2496 2495 2494 1000 -1000 -999 -998 -997 -996 -995 -994];
Кубический сплайновая реализация в Matlab
Ниже сюжет я получил, просто введя в сюжет (x1, y1):
есть ли способ, чтобы получить гладкую кривую из приведенных выше данных, используя команду interp1? Мне сказали, что я должен использовать кубические сплайны для достижения желаемого сюжета, однако, поскольку я новичок в Matlab, я не знаю, как реализовать такое решение. Заранее спасибо!
Редактировать: Я попытался реализовать его следующим образом, но я получаю отвратительный перспективный сюжет! x1_temp=-6000:100:6000; pc=pchip(x1,y1,x1_temp); plot(x1,y1,'o',x1_temp,pc,'-');
Как я могу изменить этот код для получения правильного участка?
ли вы читали документацию для [ 'interp1'] (http://www.mathworks.com/help/matlab/ref/interp1.html)? В разделе [метод] (http://www.mathworks.com/help/matlab/ref/interp1.html#inputarg_method) отображаются различные варианты сплайнов. Лично я рекомендую вам начинать с 'pchip' вместо кубических сплайнов, если нет веских оснований для использования чистых кубических сплайнов. Прочтите документы, попробуйте сами и попросите снова (С КОДОМ !!!), если вы застряли. – Dan
У вас есть монотонный вектор x, но монотонный вектор y. Поэтому вы не должны интерполировать с помощью 'interp1 (x1, y1, MyNewsPointsOnX, 'pchip')', но вместо этого используйте 'interp1 (y1, x1, MyNewsPointsOnY, 'pchip')'. С 'MyNewsPointsOnY = linspace (min (y1), max (y1), 1000);' – obchardon
@ Dan Я отредактировал свое оригинальное сообщение, чтобы включить мою попытку решить эту проблему. –