Matlab Экстраполяция Знак Флип - PullRequest
0 голосов
/ 01 января 2019

Мне нужно экстраполировать значения

values = [4.7725677013567795e-25,5.259671597595681e-25,5.271571307092517e-25,5.804522928756955e-25,5.817596178596506e-25,6.400225475961127e-25,6.414575757297374e-25,7.05099062804588e-25,7.066729446412066e-25];

, когда я запускаю

x = [1:9];
valuesextra = interp1(x,values,[10:3120],'spline','extrap');

Во-первых, экстраполированные значения становятся меньше, тогда как они должны увеличиваться, а во-вторых, знакполученные значения переворачиваются после первого значения, и я получаю

4.34358964678642e-25    -3.23663133644058e-25   -1.77921360688784e-24   -4.14411271161367e-24 ...

Я сделал аналогичные экстраполяции с подобными наборами данных, где я получил правильную экстраполяцию.Что здесь не так?Кстати: набор данных на самом деле длиной 450, а не 9, я только что опубликовал этот минимальный пример, который производит такое изменение знака.

1 Ответ

0 голосов
/ 01 января 2019

Ваши данные выглядят как "шаги" enter image description here

, поэтому лучше использовать функцию fit вместо interp1

Код может выглядеть следующим образом:

values = [4.7725677013567795e-25,5.259671597595681e-25,5.271571307092517e-25,5.804522928756955e-25,5.817596178596506e-25,6.400225475961127e-25,6.414575757297374e-25,7.05099062804588e-25,7.066729446412066e-25]';
x = (1:9)';
figure();
subplot(2,1,1)
plot(x,values,'.b',x,values,'-g')
hold all;

f = fit(x, values, 'poly1');
plot(f)

xx = (10:3120);
yy = f.p1*xx + f.p2;
subplot(2,1,2)
plot(x,values,'.b',x,values,'-g');
hold all;
plot(xx,yy,'.k',xx,yy,'--r')

Вы можете выбрать другую функцию подгонки, см. Справку для fit , чтобы правильно настроить функцию yy

'cubicinterp' - кусочно-кубическая интерполяция

'smoothingspline' - сглаживающий сплайн (кривая)

...