Я подозреваю, что, урезав коэффициенты, вы слишком сильно изменили многочлен.
Вы можете увидеть эффект самостоятельно, изучив следующий код (когда у вас уже есть x
и y
в вашем рабочем пространстве).
P = polyfit(x,y,8); % fitted polynomial
P2 = [-0.05446 1.088 -8.762 36.2 -80.85 94.32 -52.21 12.21 -0.0814]; % your coefficients
toString = @(x,pat)(sprintf(pat,x));
fix = @(x,pat)(str2double(toString(x,pat)));
P3 = arrayfun(@(x)(fix(x,'%3.4f')), P); % artificially truncate the coefficients
X = linspace(min(x),max(x),100);
Y = polyval(P ,X);
Y2 = polyval(P2,X);
Y3 = polyval(P3,X);
figure;
[x,i] = sort(x);
y = y(i);
plot(x,y ,'or'); hold on;
plot(X,Y ,'-b');
plot(X,Y2,'--g');
plot(X,Y3,'-c');
hold off;
То, что я сделал, соответствовало полиному восьмого порядка к вашим данным, я также искусственно урезал коэффициенты (я не знаю точную стратегию округления cftool
, она кажется немного более сложной, чем я) .
На рисунке ниже вы можете увидеть результат. Красные точки - данные, синяя линия - точный многочлен, обозначенный polyfit
(и, вероятно, cftool
). Пунктирная зеленая линия изображает ваш полином с усеченными коэффициентами), а голубая линия показывает мой усеченный полином. Итак, вы видите, что путем усечения вы слишком сильно меняете полином, чтобы его можно было использовать.
![Comparison of data and polynomials](https://i.stack.imgur.com/bMUbU.png)