Как правильно подобрать кривую, используя полифайл Матлаба? - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь подогнать простую полиномиальную кривую в Matlab.У меня есть данные измерений (можно загрузить здесь ), которые выглядят в виде графика:

Plot of measurements

Теперь я хочу подогнать полиномвторой степени к этой кривой.Итак, в Matlab я сделал следующее:

load vel.csv
load dp.csv
[p, ~, ~] = polyfit(vel, dp, 2);

figure()
scatter(vel, dp);
hold on;
plot(vel,polyval(p,vel));
hold off;

Однако результат не похож на то, что Matlab вообще подогнал полином:

Badly fitted curve

Как получить приличную кривую, используя функцию Matlab polyfit?

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Хотя вы не используете их, когда вы указываете дополнительные выходные данные, polyfit центрирует и масштабирует данные x перед выполнением полиномиального подбора, что приводит к различным полиномиальным коэффициентам:

>> [p, ~, ~] = polyfit(vel, dp, 2)
p =

    1.4683   35.7426   68.6857

>> p = polyfit(vel, dp, 2)
p =

   0.022630   3.578740  -7.354133

Это соответствующий отрывок из polyfit документации :

enter image description here

Если вы выберете эту опцию, вам нужно использоватьтретий вывод при вызове polyval для центрирования и масштабирования ваших данных перед применением полиномиальных коэффициентов.Мое предложение было бы придерживаться второго вызова polyfit, который дает правильный многочлен и производит правильный график, если вам действительно не нужно центрировать и масштабировать данные:

enter image description here

0 голосов
/ 27 ноября 2018

Использование polyfit является правильным, но вы забыли включить S и mu при построении многочлена.

Существует два варианта исправления вашего кода:

Опция 1

изменить

[p, ~, ~] = polyfit(vel, dp, 2);
plot(vel,polyval(p,vel));

на

[p, S, mu] = polyfit(vel, dp, 2);
plot(vel,polyval(p,vel,S,mu));

Option2

Не указывайте S и mu.Измените

[p, ~, ~] = polyfit(vel, dp, 2);

на

p = polyfit(vel, dp, 2);

Выход

enter image description here

...