修改后的代码如下:

% 以下是2022年的人口数据 pop2022 = [73816, 74600, 73754, 74936, 80295, 90096, 107863, 112184];

% 以下是生育率和死亡率数据 birth_rate = 0.6; death_rate = [0.004, 0.006, 0.008, 0.015, 0.03, 0.06, 0.1, 0.2];

% 构建Leslie矩阵 leslie = zeros(8, 8); leslie(1, 2:8) = birth_rate; leslie(2, 1) = 1 - death_rate(1); leslie(3, 2) = 1 - death_rate(2); leslie(4, 3) = 1 - death_rate(3); leslie(5, 4) = 1 - death_rate(4); leslie(6, 5) = 1 - death_rate(5); leslie(7, 6) = 1 - death_rate(6); leslie(8, 7) = 1 - death_rate(7);

% 预测2023年到2050年的人口年龄结构 pop_age = zeros(80, 4); pop_age(1, :) = pop2022 / sum(pop2022); for i = 2 : 80 pop_age(i, :) = (pop_age(i-1, :) * leslie)'; end

% 将结果可视化 age_groups = [0 15; 15 35; 35 65; 65 80]; x = 2023 : 2050; figure; for i = 1 : 4 subplot(2, 2, i); plot(x, pop_age(age_groups(i, 1)*5+1:age_groups(i, 2)*5, :)); title(sprintf('%d-%d岁人口', age_groups(i, 1), age_groups(i, 2))); xlabel('年份'); ylabel('人口比例'); legend('0-15岁', '15-35岁', '35-65岁', '65-80岁'); end

修改的地方在第22行,将age_groups(i, 1)*5改为age_groups(i, 1)*5+1,将age_groups(i, 2)*5改为age_groups(i, 2)*5。这是因为数组下标是从1开始的,而年龄段的区间是按照0-15、15-35、35-65、65-80划分的,因此需要加上1。


原文地址: https://www.cveoy.top/t/topic/bBPt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录