matlab的最小二乘拟合问题 急急急!!!
实验目的:熟悉用Matlab软件实现数据的多项式拟合和最小二乘曲线拟合并用于解决某些实际问题。
实验内容:
人类进入20世纪后,各国在科学技术和生产力飞速发展的同时,人口的增长也相当迅猛,尤其是亚非拉国家人口增长速度更是惊人。其中又以中国和印度的人口增长最明显。人口的增长给了地球生态环境很大的压力,因此控制人口增长及准确的预报人口的增长变得越来越重要了。要遏止如此迅猛的增长态势,我们必须通过研究人口变化规律,寻找控制人口过快增长的办法。
利用下表中给出的我国1971年到1990年人口数的统计数据,,拟合阻滞增长模型:???中的参数(r固有增长率)和(xm人口容量),给出我国人口数量增长的近似曲线,并用它来预测2000,2010,2020年的人口数。
表 我国1971年到1990年人口数的统计数据(单位:亿)
年份 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980
人口 8.523 8.718 8.921 9.086 9.242 9.372 9.497 9.626 9.754 9.871
年份 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990
人口 10.007 10.165 10.301 10.436 10.585 10.751 10.93 11.103 11.27 11.433
当中有方程粘不上来 我手打了
x*=rx(1-x/xm) x(t0)=x0
多谢了!!
大大们 我现在用的是Matlab中的M文件内做的 到外面运行的 请大大务必写程序阿 谢谢 展开
程序代码
clc
x=1:20
y=[8.523 8.718 8.921 9.086 9.242 9.372 9.497 9.626 9.754 9.871 10.007 10.165 10.301 10.436 10.585 10.751 10.93 11.103 11.27 11.433];
p=polyfit(x,y,1)
y21to50=polyval(p,[21:50])
plot(x,y,'o',[x 21:50],polyval(p,[1:50]))
运行结果:
p =
0.1460 8.4463
y21to50 =
11.5128 11.6588 11.8048 11.9508 12.0969 12.2429 12.3889 12.5349 12.6810 12.8270 12.9730 13.1190 13.2650 13.4111 13.5571 13.7031 13.8491 13.9951 14.1412 14.2872 14.4332 14.5792 14.7253 14.8713 15.0173 15.1633 15.3093 15.4554 15.6014 15.7474
可以看出,2000,2010,2020年的人口数分别为12.8270 14.2872 15.7474
[m,n]=size(a);
[m,l]=size(c);
if nargin==3,
i=min([n,m,maxrank]);
else i=min([n,m]);
end
% x=a;
% y=c;
for h=1:i,
xy=x'*y;
[pt,s,qt]=svd(xy'*xy,0);
q(h,:)=qt(:,1)';
w(:,h)=(xy*qt(:,1))/sqrt(s(1,1));
t(:,h)=x*w(:,h);
tsqr=t(:,h)'*t(:,h);
u(:,h)=y*qt(:,1);
p(h,:)=t(:,h)'*x/tsqr;
b(1,h)=(u(:,h)'*t(:,h))/tsqr:
x=x-(t(:,h)*p(h,:));
y=y-b(h)*t(:,h)*q(h,:);
end