clear;clc
%这是一个一元线性回归问题,用matlab编写如下程序:
x=[1960,1961,1962,1963,1964,1965,1966,1967,1968]';
y=[29.72,30.61,31.51,32.13,32.34,32.85,33.56,34.20,34.83]';
subplot(221)
plot(x,y) ;
%假设模型 y=a0+a1*x+e;
x=[ones(9,1),x];
a=xy%a(1)=a0,a(2)=a1.
X=1960:2222;
Y=a(1)+a(2)*X;
subplot(222)
plot(X,Y);
%2003开始 人口增长一倍 43年 2077 年超过一百亿
%2002年的世界人口数 55.2357亿
%把y=x^a两边取对数,就有log(y)=a*log(x),如果将log(y)看成是log(x)的函数,那么它们是线性的.这时是方程的个数是10000个,而未知数是1个(a),这可以用matlab的矩阵除法解矛盾方程(用的是最小二乘法)
%下面是一个例子,我以a=1.45产生一套10000个的(x,y)序列,当然我加上了一些随机扰动.(你可以试一下,不加的话,肯定得到的是1.45)
>> a=1.45;
>> x=linspace(1,10,10000)'; %注意这里你要转成列向量解
>> y=x.^a+0.5*rand(10000,1);
>> aa=log(x)log(y)
X和Y的长度不等啊,X是16个数,Y是8个数。且X的前8个都是1。如果用X的后8个数与Y回归,则:
clear;clc
X=[1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0; 1.5 2.0 3.0 4.5 7.5 9.1 10.5 12.0]'
Y=[5.6 6.6 7.2 7.8 10.1 10.8 13.5 16.5]'
p=polyfit(X(:,2),Y,1)
xx=linspace(1.5,12,30);
yy=polyval(p,xx);
plot(X(:,2),Y,'o',xx,yy)
y=poly2sym(p,'x')
运行结果:
p =
0.8950 4.1575
y = 0.8950*x+4.1575
以上是使用Matlab进行人口数据的拟合的详细内容。更多信息请关注PHP中文网其他相关文章!