假设某城市群由城市A、城市B和城市C三座城市构成,并且三座城市总人口不变。假设在起始年份城市A人口占该城市群总人口的30%,城市B占50%,城市C占20%,同时城市A和城市C每年分别有p%和10%的人口流向城市B,城市B每年又分别有8%和5%的人口回流到城市A和城市C
请分别画出城市A、城市B和城市C随着时间和迁徙率p%变化的三维图像及俯视图像.
假设某城市群由城市A、城市B和城市C三座城市构成,并且三座城市总人口不变。假设在起始年份城市A人口占该城市群总人口的30%,城市B占50%,城市C占20%,同时城市A和城市C每年分别有p%和10%的人口流向城市B,城市B每年又分别有8%和5%的人口回流到城市A和城市C
请分别画出城市A、城市B和城市C随着时间和迁徙率p%变化的三维图像及俯视图像.
参考GPT和自己的思路:
首先,需要用 Matlab 编写代码模拟城市人口迁徙的过程。可以采用差分方程的方法模拟该过程。代码如下所示:
n_years = 50; % 模拟的年份数
pop = [3000000*0.3, 3000000*0.5, 3000000*0.2]; % 初始人口
% 各城市之间的迁徙率
p = 0.3; % A->B
q = 0.1; % C->B
r = 0.08; % B->A
s = 0.05; % B->C
a = zeros(1, n_years); % A城市人口
b = zeros(1, n_years); % B城市人口
c = zeros(1, n_years); % C城市人口
a(1) = pop(1);
b(1) = pop(2);
c(1) = pop(3);
for i = 2:n_years
% 每年的净迁入人口
na = -p*a(i-1) + r*b(i-1);
nb = p*a(i-1) + (1-q)*b(i-1) - r*b(i-1) - s*b(i-1);
nc = q*c(i-1) + s*b(i-1);
% 计算新的人口数
a(i) = a(i-1) + na;
b(i) = b(i-1) + nb;
c(i) = c(i-1) + nc;
end
接下来,需要绘制三维图像和俯视图像。代码如下所示:
[x, y] = meshgrid(1:n_years, 1:3);
z = zeros(3, n_years);
z(1,:) = a;
z(2,:) = b;
z(3,:) = c;
% 三维图像
figure;
surf(x, y, z);
xlabel('年份');
set(gca,'yticklabel',{'A','B','C'});
ylabel('城市');
zlabel('人口数');
title(sprintf('城市人口模拟\n迁徙率p=%.2f,q=%.2f,r=%.2f,s=%.2f', p, q, r, s));
% 俯视图像
figure;
bar3(z, 0.5);
xlabel('年份');
set(gca,'yticklabel',{'A','B','C'});
ylabel('城市');
zlabel('人口数');
title(sprintf('城市人口模拟\n迁徙率p=%.2f,q=%.2f,r=%.2f,s=%.2f', p, q, r, s));
运行该代码,即可得到城市人口随着时间和迁徙率的变化的三维图像和俯视图像。