我趣旅行网的办公地址:求教关于matlab

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 12:21:42
我的程序是这样:
x=1790:10:1980;
y=[3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76.0,92.0,106.5,123.2,131.7,150.7,179.3,204.0,226.5];
a=polyfit(x,y,2)
x=1790:10:1980;
polyval(a,x)
第一行是给出x的取值;第二行是对应的y的值;第三行进行二次的数据拟合。这三行的程序运行结果如下:
a =

1.0e+004 *

0.0000 -0.0023 2.1021
意思应该是:y=-23x+21021,但这个结果算出的y值为负。
第四第五行表示,当X取1790到1980时,这个模型的Y值,运行结果如下:
ans =

Columns 1 through 9

5.4634 5.2453 6.3293 8.7154 12.4036 17.3938 23.6861 31.2805 40.1770

Columns 10 through 18

50.3755 61.8761 74.6788 88.7835 104.1903 120.8992 138.9102 158.2232 178.8384

Columns 19 through 20

200.7555 223.9748
这与y=-23x+21021不符。
问题出在哪呢?

问题出在你对输出结果的认识上:
a =
1.0e+004 *
0.0000 -0.0023 2.1021
这里的a代表2次多项式,表面上看,它的二次项为0,实际不为零,将输出结果改为long g类型,得到的结果为:
a =
0.00651036682615596 -23.394022784232
21020.8978127124
所以,这里的拟合多项式应该为:
y=0.006510367x^2-23.394x+21020.898
由于这里的x取值比较大(平方后更大),你把系数较小的二次项丢掉了,当然损失比较大。

你可以在
File->Preferences->Command Window->Nemeric format
菜单下修改输出显示的格式。