Tag Archives: 拟合

其实,Logistic模型是在是个非常老的问题了,第一次参加院赛,给的数据是美国的人口数据,可以非常好的与Logistic模型拟合,于是我用的就是Logistic模型,只不过当时对Matlab还比较生,程序写的是在不再不怎么样,现实建立一个M文件作为函数模型,又调用nlinfit()函数才完成,书中是自己运用Logistic的推导过程,先转成线性模型然后再回归分析,未尝不是个好方法。

M源文件(与书中源码相比,略有改动):

clear
clc
% 读入人口数据(1971-2000)
Y = [33815  33981   34004   34165   34212   34327   34344   34458   34498   34476   34483   34488   34513   34497   34511   34520   34507   34509  34521   34513    34515   34517   34519   34519   34521   34521  34523   34525   34525   34527]
% 读入时间变量数据(t=年份-1970)
T = 1:1:30
% 保存原始数据
Yo = Y;
To = T;
% 线性化处理
for t = 1:30,
    x(t) = exp(-t);
    y(t) = 1/Y(t);
end
% 计算,并输出回归系数 B
c = zeros(30,1)+1;
X = [c,x'];
B = inv(X'*X)*X'*y'
for i = 1:30,
    % 计算回归拟合值
    z(i) = B(1,1)+B(2,1)*x(i);
    % 计算离差
    s(i) = y(i) - sum(y)/30;
    % 计算误差
    w(i) = z(i) - y(i);
end
% 计算离差平方和S
S = s * s';
% 计算误差平方和Q
Q = w * w';
% 计算回归平方和U
U = S - Q;
% 计算,并输出F检验值
F = 28 * U / Q
% 计算非线性回归模型的拟合值
for j = 1:30,
    Y(j) = 1 / (B(1, 1) + B(2, 1) * exp(-j));
end
% 输出非线性回归模型的拟合曲线(Logistic 曲线)
plot(T, Y, To, Yo, 'r*')
grid on;

Read More →

过程很简单,按着书走就行,我之前往往使用nlinfit()来进行拟合,需要一个函数模型m文件,比较繁琐,这里用的是fittype()和fit()函数,比nlinfit()简单很多。

M源文件:

syms t
x = [0;0.4;1.2;2;2.8;3.6;4.4;5.2;6;7.2;8;9.2;10.4;11.6;12.4;13.6;14.4;15];
y = [1;0.85;0.29;-0.27;-0.53;-0.4;-0.12;0.17;0.28;0.15;-0.03;-0.15;-0.071;0.059;0.08;0.032;-0.015;-0.02];
f = fittype('a * cos(k * t) * exp(w * t)', 'independent', 't', 'coefficients', {'a', 'k', 'w'});
cfun = fit(x, y, f)     %显示拟合函数
xi = 0:.1:20;
yi = cfun(xi);
plot(x, y, 'r*', xi, yi, 'b-');

clip_image001 Read More →

很简单,就像书中所描述的那样,例如:

&nb Read More →