【本博文为查阅网络资料之后根据自己所想略作改动后所做笔记,全题答案参见链接:https://wenku.baidu.com/view/8172a6b265ce050876321315.html】
原题回顾:
A题 城市表层土壤重金属污染分析
随着城市经济的快速发展和城市人口的不断增加,人类活动对城市环境质量的影响日显突出。对城市土壤地质环境异常的查证,以及如何应用查证获得的海量数据资料开展城市环境质量评价,研究人类活动影响下城市地质环境的演变模式,日益成为人们关注的焦点。
按照功能划分,城区一般可分为生活区、工业区、山区、主干道路区及公园绿地区等,分别记为1类区、2类区、……、5类区,不同的区域环境受人类活动影响的程度不同。
现对某城市城区土壤地质环境进行调查。为此,将所考察的城区划分为间距1公里左右的网格子区域,按照每平方公里1个采样点对表层土(0~10 厘米深度)进行取样、编号,并用GPS记录采样点的位置。应用专门仪器测试分析,获得了每个样本所含的多种化学元素的浓度数据。另一方面,按照2公里的间距在那些远离人群及工业活动的自然区取样,将其作为该城区表层土壤中元素的背景值。
附件1列出了采样点的位置、海拔高度及其所属功能区等信息,附件2列出了8种主要重金属元素在采样点处的浓度,附件3列出了8种主要重金属元素的背景值。
现要求你们通过数学建模来完成以下任务:
(1) 给出8种主要重金属元素在该城区的空间分布,并分析该城区内不同区域重金属的污染程度。
(2) 通过数据分析,说明重金属污染的主要原因。
(3) 分析重金属污染物的传播特征,由此建立模型,确定污染源的位置。
(4) 分析你所建立模型的优缺点,为更好地研究城市地质环境的演变模式,还应收集什么信息?有了这些信息,如何建立模型解决问题?
其中我将附件中的数据集中处理得到这样的excel表格:
(为方便后面的分区处理,我事先按照城区分类排序了)
首先我想先画出地形图:
地形图:
matlab代码如下:(参见了参考答案中的代码)
clear;
clc;
M = xlsread('E:\\1.xlsx');
x = M(:,2);
y = M(:,3);
z = M(:,4);
c = M(:,5);
xi = linspace(min(x),max(x));
yi = linspace(min(y),max(y));
Zi = griddata(x,y,z,xi,yi','v4');
h = surf(xi,yi,Zi);
set(h,'EdgeAlpha',0.3);
colormap;
axis tight;
xlabel('X');
ylabel('Y');
zlabel('海拔高度');
title('地形图')
colorbar;
set(gcf,'Color',[1 1 1]);
得到:
等高线及城区功能分布图
clear;
clc;
M = xlsread('E:\\1.xlsx');
x = M(:,2);
y = M(:,3);
z = M(:,4);
c = M(:,5);
xi = linspace(min(x),max(x));
yi = linspace(min(y),max(y));
Zi = griddata(x,y,z,xi,yi','v4');
marker = {'d','o','^','s','p'};
color = {'m','k','c','b','g'};
str = {'等高线','生活区','工业区','山林区','交通区','绿地区'};
str1 = {'等值线','生活区','工业区','山林区','交通区','绿地区'};
figure;
contour(xi,yi,Zi,-150:20:300,'LineWidth',1);
xlabel('X');
ylabel('Y');
title('地形等高线及城区功能分布图');
axis tight;
axis image;
colorbar;
grid on;
hold on;
for i = 1:5
loc = c == i;
plot(x(loc),y(loc),marker{i},'markerfacecolor',color{i},'MarkerEdgeColor',color{i});
end
set(gcf,'Color',[1 1 1]);
legend(str,'location','SouthEast')
元素分布等值线图:
元素丰度 = 所测浓度/浓度背景值(平均值)
clear;
clc;
mat ={ 'As', 'Cd', 'Cr', 'Cu', 'Hg', 'Ni','Pb','Zn'};
M = xlsread('E:\\1.xlsx');
x = M(:,2);
y = M(:,3);
z = M(:,4);
c = M(:,5);
xi = linspace(min(x),max(x));
yi = linspace(min(y),max(y));
Zi = griddata(x,y,z,xi,yi','v4');
marker = {'d','o','^','s','p'};
color = {'m','k','c','b','g'};
str1 = {'生活区','工业区','山林区','交通区','绿地区','等值线'};
M2 = xlsread('E://1.xlsx','sheet2','N2:U320');
for j= 1:8
figure;
hold on;
for i = 1:5
loc = c == i;
plot(x(loc),y(loc),marker{i},'markerfacecolor',color{i},'MarkerEdgeColor',color{i});
end
Zj = griddata(x,y,M2(:,j),xi,yi','v4');
contour(xi,yi,Zj,'LineWidth',1);
xlabel('X');
ylabel('Y');
title([mat{j},'元素丰度等值线']);
axis tight;
axis image;
colormap('jet');
colorbar;
grid on;
legend(str1,'location','SouthEast');
set(gcf,'Color',[1 1 1]);
hold off;
end
clear;
clc;
mat ={ 'As', 'Cd', 'Cr', 'Cu', 'Hg', 'Ni','Pb','Zn'};
str = {'(μg/g)','(ng/g)','(μg/g)','(μg/g)','(ng/g)','(μg/g)','(μg/g)','(μg/g)'}
M = xlsread('E:\\1.xlsx');
x = M(:,2);
y = M(:,3);
z = M(:,4);
c = M(:,5);
xi = linspace(min(x),max(x));
yi = linspace(min(y),max(y));
for i = 6:13
zz = M(:,i);
Zi = griddata(x,y,zz,xi,yi','v4');
%Zi = griddata(x,y,z,xi,yi','v4');
%
figure;
h = surf(xi,yi,Zi);
% h = image(xi,yi,Zi);
colormap('jet');
axis tight;
set(h,'EdgeAlpha',0.3);
xlabel('X');
ylabel('Y');
%zlabel('As元素含量(μg/g)');
title([mat{i-5} '元素分布图' str{i-5}])
colorbar;
set(gcf,'Color',[1 1 1]);
end
灰度图
clear;
clc;
mat ={ 'As', 'Cd', 'Cr', 'Cu', 'Hg', 'Ni','Pb','Zn'};
str = {'(μg/g)','(ng/g)','(μg/g)','(μg/g)','(ng/g)','(μg/g)','(μg/g)','(μg/g)'}
M = xlsread('E:\\1.xlsx');
x = M(:,2);
y = M(:,3);
z = M(:,4);
c = M(:,5);
xi = linspace(min(x),max(x));
yi = linspace(min(y),max(y));
for i = 6:13
zz = M(:,i);
Zi = griddata(x,y,zz,xi,yi','v4');
%Zi = griddata(x,y,z,xi,yi','v4');
figure;
% h = surf(xi,yi,Zi);
h = imagesc(xi,yi,Zi);
colormap('jet');
axis tight;
xlabel('X');
ylabel('Y');
%zlabel('As元素含量(μg/g)');
title([mat{i-5} '元素分布图' str{i-5}])
colorbar;
set(gcf,'Color',[1 1 1]);
end