matlab polyfit() 函数多项式系数问题

x=[1999,2000,2001,2002,2003,2004,2005,2006,2007,2008]';
y=[5093.32,5331.58,5768.83,6282.88,7178.26,8112.24,9184.55,10771.79,12718.36,14159.46]';
p=polyfit(x,y,2)
y1=polyval(p,x)
plot(x,y,'*',x,y1,'r')
title('二次多项式拟合');
legend('原始数据','拟合曲线') p = 1.0e+008 * 0.0000 -0.0042 4.1627 模拟通过,图象拟和,但是p 返回的系数 所构成方程不符合原x,y。求解 问题所在。最好能帮我写出 多项式方程。

clc; close all; clear all;
warning off all;
x = [1999,2000,2001,2002,2003,2004,2005,2006,2007,2008]';
y = [5093.32,5331.58,5768.83,6282.88,7178.26,8112.24,9184.55,10771.79,12718.36,14159.46]';
p = polyfit(x, y, 2);
y1 = polyval(p, x);
plot(x, y, '*', x, y1, 'r');
title('二次多项式拟合');
legend('原始数据', '拟合曲线');
fprintf('\n拟合多项式为:%.3fx^2+%.3fx+%.3f=0\n', p(1), p(2), p(3));

拟合多项式为:104.211x^2+-416554.739x+416271610.754=0
>>
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-16
这个返回系数并不是显示的二次项系数为0,而是由于后面两个数太大,再加上默认的数据输入类型为4位小数,导致输出时,大数吃掉了小数,这个可以修改输出数据类型来实现:比如可以用format long试一下;再者你要是想看到每个数的大小,可以用p(1),p(2),p(3)进行逐个调用,这个可实现的!你尝试一下吧!当然如果你想写出多项式方程,可以用p(1)*x^2+p(2)*x^+p(3),来实现! 希望可以帮助你!