% 定义时间(年份)和人口数据
t = [1790 1800 1810 1820 1830 1840 1850 1860 1870 1880 1890 1900 1910 1920 1930 1940 1950 1960 1970 1980 1990 2000 2010 2020];
p = [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 251.4 281.4 309.3 329.4];
% 将年份转换为连续变量,从1790年开始
t = t - 1790;
% 定义Logistic模型
logisticModel = @(b, x) b(1) ./ (1 + ((b(1)/b(2) - 1) * exp(-b(3) * x)));
% 初始参数估计
initialParams = [max(p), p(1), 0.02]; % K, P0, r
% 使用非线性最小二乘法拟合参数
options = optimset('Display', 'off');
beta = lsqcurvefit(logisticModel, initialParams, t, p, [], [], options);
K = beta(1); % 承载力
P0 = beta(2); % 初始人口
r = beta(3); % 增长率
p_pred = logisticModel(beta, t);
figure;
plot(t + 1790, p, 'bo', t + 1790, p_pred, 'r-');
xlabel('Year');
ylabel('Population (millions)');
legend('Actual Data', 'Logistic Model');
title('Logistic Growth Model for US Population');
t_2030 = 2030 - 1790;
p_2030 = logisticModel(beta, t_2030);
fprintf('Logistic Model预测2030年人口: %.2f million\n', p_2030);