Я хотел экстраполировать некоторые данные, которые у меня были, как показано на рисунке ниже. Синяя линия - это исходные данные, а красная линия - экстраполяция, которую я хотел.Почему я получаю непересекающиеся данные, когда я пытаюсь экстраполировать после использования полиномиальной регрессии
Для использования регрессионного анализа, я использовал функцию polyfit
:
sizespecial = size(i_C);
endgoal = sizespecial(2);
plothelp = 1:endgoal;
reg1 = polyfit(plothelp,i_C,2);
reg2 = polyfit(plothelp,i_D,2);
Где i_C
и i_D
являются векторы, которые представляют собой исходные данные. Я расширил данные, используя этот код:
plothelp=1:endgoal+11;
for in = endgoal+1:endgoal+11
i_C(in) = (reg1(1)*(in^2))+(reg1(2)*in)+reg1(3);
i_D(in) = (reg2(1)*(in^2))+(reg2(2)*in)+reg2(3);
end
Однако выходной график я сейчас:
Я не понимаю, почему дополнительный надрез вводится (обведено красным). Не стесняйтесь просить меня прояснить любую деталь по этим вопросам и поблагодарить вас за все ваши ответы.
Трудно сказать без ввода ввода для 'i_C' и' i_D'. Также обратите внимание, что вы можете использовать 'polyval' вместо цикла' for'. –
Я предлагаю построить подходящий полином над реальными значениями, чтобы увидеть, подходит ли то, что вы ожидаете от него. Похоже, что он соответствует полиноминалу второй степени (третий аргумент 'polyfit'). Если вы посмотрите на данные, добавленные значения, похоже, имеют смысл для полинома второй степени. Как уже сказал @ItamarKatz, лучше использовать ['polyval'] (http://www.mathworks.com/help/matlab/ref/polyval.html) для оценки. – Matt
Ваши данные, вероятно, не очень хорошо подходят для квадратиков (вы увидите, что это вы принимаете предложение Мэтта и замышляете полный регрессированный полином над вашими исходными данными).Таким образом, вы можете либо увеличить порядок полинома, либо рассмотреть альтернативу, например, кубическую сплайн-интерполяцию с экстраполяцией (http://www.mathworks.com/help/matlab/ref/interp1.html). В противном случае это зависит от вашего проблемного домена), но может иметь смысл скорее провести линейную регрессию по последним точкам данных 'x' в вашей серии. Вы можете настроить 'x' в качестве параметра. – Dan