Полифит и Поливал в Матлаб - PullRequest
0 голосов
/ 22 июня 2019

Я хочу понять функции polyval и polyfit .Сначала я программирую в Matlab следующие строки:

x               = (0:.01:95)/180*pi;
y               = polyval(cooefs_w_0(end:-1:1), x);
[p,~,mu]        = polyfit(y, x, 5);

Мой первый вопрос: результат от polyfit не тот, если я пишу эту строку:

p               = polyfit(y, x, 5);

Почему?Переменная p должна быть такой же.

1 Ответ

2 голосов
/ 22 июня 2019

Выходной аргумент 3rd изменяет независимую переменную с

y

на

normalized_y = (y-means(y))/std(y)

Это называется нормализация , новый normalized_yбудет 0 как означает и 1 как стандартное отклонение

Почему нормализация?

  • Если независимая переменная y может быть установлена ​​для Гауссова распределения , это приведет к лучшей оценке коэффициента полинома, чем ненормализованный метод
  • Если это возможноне подходит для гауссова распределения нет необходимости нормализовать y, так как нормализованный метод дает аналогичные результаты по сравнению с ненормализованным методом

Подтверждение [p, ~mu] = polyfit(...) использует нормализованный ввод

% I increase the step to make the plot clear
x               = (0:5:95)/180*pi;

cooefs_w_0 = [1,4, 5, 9];
y               = polyval(cooefs_w_0(end:-1:1), x);
% y normalization
normalized_y = (y-mean(y))/std(y);

[p,~,mu]        = polyfit(y, x, 5);
% polyfit with one output argument but input changed to the normalized y
p_normalized        = polyfit(normalized_y, x, 5);

% Check if the coefficients are the same 
isequal(p, p_normalized);
% ans =

  logical

   1

Оценка зависимой переменной x с использованием polyval()

  • Без нормализации , просто используйте коэффициенты, полученные изаппроксимация
p_original          =   polyfit(y, x, 5);
original_prediction =   polyval(p_original, y);
  • При нормализации используйте коэффициенты, полученные из фитинга, а также реальное среднее и стандартное отклонение независимой переменнойy определяется как mu
[p,~,mu]               =   polyfit(y, x, 5);
normalized_prediction  =   polyval(p, y, [], mu);

Поскольку y не очень хорошо соответствует гауссову распределению, две оценки похожи, но не совсем одинаковы

График enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...