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=x\y%a(1)=a0,a(2)=a1.
X=1960:2222;
Y=a(1) a(2)*X;
subplot(222)
plot(X,Y);
03開始 人口成長一倍 43年 2077 年超過一百億
02年的世界人口數 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中文網其他相關文章!