2022 年数学建模竞赛题目C 题 古代玻璃制品的成分分析与鉴别

丝绸之路是古代中西方文化交流的通道,其中玻璃是早期贸易往来的宝贵物证。早期的玻

璃在西亚和埃及地区常被制作成珠形饰品传入我国,我国古代玻璃吸收其技术后在本土就地取

材制作,因此与外来的玻璃制品外观相似,但化学成分却不相同。

玻璃的主要原料是石英砂,主要化学成分是二氧化硅(SiO2)。由于纯石英砂的熔点较高,

为了降低熔化温度,在炼制时需要添加助熔剂。古代常用的助熔剂有草木灰、天然泡碱、硝石

和铅矿石等,并添加石灰石作为稳定剂,石灰石煅烧以后转化为氧化钙(CaO)。添加的助熔

剂不同,其主要化学成分也不同。例如,铅钡玻璃在烧制过程中加入铅矿石作为助熔剂,其氧

化铅(PbO)、氧化钡(BaO)的含量较高,通常被认为是我国自己发明的玻璃品种,楚文化

的玻璃就是以铅钡玻璃为主。钾玻璃是以含钾量高的物质如草木灰作为助熔剂烧制而成的,主

要流行于我国岭南以及东南亚和印度等区域。

古代玻璃极易受埋藏环境的影响而风化。在风化过程中,内部元素与环境元素进行大量交

换,导致其成分比例发生变化,从而影响对其类别的正确判断。如图 1 的文物标记为表面无风

化,表面能明显看出文物的颜色、纹饰,但不排除局部有较浅的风化;图 2 的文物标记为表面

风化,表面大面积灰黄色区域为风化层,是明显风化区域,紫色部分是一般风化表面。在部分

风化的文物中,其表面也有未风化的区域

现有一批我国古代玻璃制品的相关数据,考古工作者依据这些文物样品的化学成分和其他

检测手段已将其分为高钾玻璃和铅钡玻璃两种类型。附件表单 1 给出了这些文物的分类信息,

附件表单 2 给出了相应的主要成分所占比例(空白处表示未检测到该成分)。这些数据的特点

是成分性,即各成分比例的累加和应为 100%,但因检测手段等原因可能导致其成分比例的累

加和非 100%的情况。本题中将成分比例累加和介于 85%~105%之间的数据视为有效数据。

请你们团队依据附件中的相关数据进行分析建模,解决以下问题:

问题 1 对这些玻璃文物的表面风化与其玻璃类型、纹饰和颜色的关系进行分析;结合玻 

璃的类型,分析文物样品表面有无风化化学成分含量的统计规律,并根据风化点检测数据,预

测其风化前的化学成分含量。

问题 2 依据附件数据分析高钾玻璃、铅钡玻璃的分类规律;对于每个类别选择合适的化

学成分对其进行亚类划分,给出具体的划分方法及划分结果,并对分类结果的合理性和敏感性

进行分析。

问题 3 对附件表单 3 中未知类别玻璃文物的化学成分进行分析,鉴别其所属类型,并对分类结果的敏感性进行分析。

问题 4 针对不同类别的玻璃文物样品,分析其化学成分之间的关联关系,并比较不同类

别之间的化学成分关联关系的差异性。

附件

表单 1 玻璃文物的基本信息

表单 2 已分类玻璃文物的化学成分比例,其中

(1) 文物采样点为该编号文物表面某部位的随机采样,其风化属性与附件表单 1 中相应文

物一致。

(2) 部位 1 和部位 2 是文物造型上不同的两个部位,其成分与含量可能存在差异。

(3) 未风化点是风化文物表面未风化区域内的点。

(4) 严重风化点取自风化层。

表单 3 未分类玻璃文物的化学成分比例

文物编号 纹饰 类型 颜色 表面风化
01 C 高钾 蓝绿 无风化
02 A 铅钡 浅蓝 风化
03 A 高钾 蓝绿 无风化
04 A 高钾 蓝绿 无风化
05 A 高钾 蓝绿 无风化
06 A 高钾 蓝绿 无风化
07 B 高钾 蓝绿 风化
08 C 铅钡 风化
09 B 高钾 蓝绿 风化
10 B 高钾 蓝绿 风化
11 C 铅钡 浅蓝 风化
12 B 高钾 蓝绿 风化
13 C 高钾 浅蓝 无风化
14 C 高钾 深绿 无风化
15 C 高钾 浅蓝 无风化
16 C 高钾 浅蓝 无风化
17 C 高钾 浅蓝 无风化
18 A 高钾 深蓝 无风化
19 A 铅钡 风化
20 A 铅钡 浅蓝 无风化
21 A 高钾 蓝绿 无风化
22 B 高钾 蓝绿 风化
23 A 铅钡 蓝绿 风化
24 C 铅钡 无风化
25 C 铅钡 浅蓝 风化
26 C 铅钡 风化
27 B 高钾 蓝绿 风化
28 A 铅钡 浅蓝 风化
29 A 铅钡 浅蓝 风化
30 A 铅钡 深蓝 无风化
31 C 铅钡 无风化
32 C 铅钡 浅绿 无风化
33 C 铅钡 深绿 无风化
34 C 铅钡 深绿 风化
35 C 铅钡 浅绿 无风化
36 C 铅钡 深绿 风化
37 C 铅钡 深绿 无风化
38 C 铅钡 深绿 风化
39 C 铅钡 深绿 风化
40 C 铅钡 风化
41 C 铅钡 浅绿 风化
42 A 铅钡 浅蓝 风化
43 C 铅钡 浅蓝 风化
44 A 铅钡 浅蓝 风化
45 A 铅钡 浅蓝 无风化
46 A 铅钡 浅蓝 无风化
47 A 铅钡 浅蓝 无风化
48 A 铅钡 风化
49 A 铅钡 风化
50 A 铅钡 风化
51 C 铅钡 浅蓝 风化
52 C 铅钡 浅蓝 风化
53 A 铅钡 浅蓝 风化
54 C 铅钡 浅蓝 风化
55 C 铅钡 绿 无风化
56 C 铅钡 蓝绿 风化
57 C 铅钡 蓝绿 风化
58 C 铅钡 风化

问题一:

题目需要解决的是,通过考古工作者提供的化学成分数据和文物的分类信息,来分析和预测古代玻璃制品表面风化的情况以及风化前的化学成分含量。这里包含两个主要的问题:一是对风化与玻璃类型、纹饰和颜色的关系进行分析;二是通过风化点检测数据,预测其风化前的化学成分含量。

首先,由于这是一个统计分析问题,因此,可以通过数据可视化和统计学方法进行分析。具体步骤如下:

  1. 数据预处理:首先,需要处理数据,将成分比例累加和介于 85%~105%之间的数据视为有效数据。

  2. 可视化分析:根据分类信息和主要成分比例,绘制柱状图、散点图或者箱线图,查看各个变量之间的关系。并检验玻璃类型、纹饰和颜色与风化的相关性。

  3. 建立模型:如果发现某些变量与风化有显著关系,那么可以使用这些变量作为特征,建立预测模型。模型可以使用回归模型,如线性回归、多元回归,也可以使用机器学习模型,如决策树、随机森林等。

  4. 模型评估和预测:使用交叉验证的方式,评估模型的预测效果。然后,使用模型预测未风化前的化学成分含量。

因为没有具体的数据,这里只能给出一种可能的实现方法,以Matlab为例,进行数据预处理和可视化分析的代码大概如下:

% 加载数据
data1 = readtable('附件表单1.csv');
data2 = readtable('附件表单2.csv');

% 数据预处理
% 选择成分比例累加和介于 85%~105%之间的数据
data2_sum = sum(data2, 2);
valid_indices = (data2_sum >= 85) & (data2_sum <= 105);
valid_data1 = data1(valid_indices, :);
valid_data2 = data2(valid_indices, :);

% 可视化分析
% 以玻璃类型为例,查看玻璃类型与某一种化学成分(例如铅)的关系
figure;
boxplot(valid_data2.铅, valid_data1.玻璃类型);
title('玻璃类型与铅含量的关系');
xlabel('玻璃类型');
ylabel('铅含量');

建模、评估和预测的具体代码取决于所选用的模型和算法。具体的代码需要根据实际的问题和数据进行编写。

问题二:

该问题分为两个部分,一是分析高钾玻璃、铅钡玻璃的分类规律;二是对于每个类别选择合适的化学成分对其进行亚类划分。

这种问题可以通过机器学习的监督学习和无监督学习的方法解决。其中,分析高钾玻璃、铅钡玻璃的分类规律是一个监督学习问题,我们可以使用决策树、随机森林、支持向量机等分类算法来解决;而对于每个类别选择合适的化学成分对其进行亚类划分是一个无监督学习问题,我们可以使用聚类算法来解决,如 K-means、层次聚类等。

以下是对应的分析和代码:

  1. 1.高钾玻璃、铅钡玻璃的分类规律:

    首先,我们可以使用决策树分类器来尝试分析分类规律。决策树可以帮助我们确定哪些化学成分在分类中起主导作用。

    % 数据预处理
    % 从 valid_data1 和 valid_data2 中提取需要的列作为特征和标签
    features = valid_data2; % valid_data2 包含了化学成分信息
    labels = valid_data1.玻璃类型; % valid_data1 包含了玻璃类型信息
    
    % 使用决策树进行分类
    tree = fitctree(features, labels);
    
    % 可视化决策树
    view(tree,'Mode','graph')
    

    通过观察生成的决策树,我们可以看到在分类中起决定性作用的化学成分。

  2. 2.对每个类别进行亚类划分:

    这是一个聚类问题。假设我们已经知道要根据哪些化学成分进行划分,那么我们可以使用 K-means 算法进行聚类。

    % 提取需要的化学成分
    sub_features = valid_data2(:, {'化学成分1', '化学成分2'}); % 假设我们选择了 '化学成分1' 和 '化学成分2' 进行划分
    
    % K-means 聚类
    k = 3; % 假设我们希望划分为 3 个亚类
    [idx, C] = kmeans(sub_features, k);
    
    % 可视化结果
    gscatter(sub_features.化学成分1, sub_features.化学成分2, idx);
    hold on;
    plot(C(:,1),C(:,2),'kx','MarkerSize',15,'LineWidth',3) 
    hold off;
    

  3. 通过这种方式,我们可以对每个玻璃类型进行亚类划分,并可视化聚类结果。

以上代码仅为示例,具体实现需要根据你的具体需求和数据进行调整。并且,不同的选择可能会导致不同的结果,因此需要对结果进行合理性和敏感性分析,例如,尝试改变聚类的数量,看看结果是否稳定,是否符合你的期望等。

问题四:

在这个问题中,我们可以使用相关性分析来研究化学成分之间的关联关系。具体来说,我们可以计算每对化学成分的 Pearson 相关系数,这将告诉我们两种化学成分之间的线性相关性。然后,我们可以根据玻璃类型,分别对各类型玻璃的化学成分进行相关性分析,并比较不同类型之间的差异。

以下是一种可能的实现方式:

% 首先,我们需要根据玻璃类型对数据进行分组
types = unique(valid_data1.玻璃类型);
num_types = numel(types);
correlations = cell(num_types, 1);

% 然后,对于每一种玻璃类型,我们计算其化学成分的相关性
for i = 1:num_types
    type = types(i);
    indices = valid_data1.玻璃类型 == type;
    type_data = valid_data2(indices, :);
    
    % 计算相关性
    correlation = corr(type_data, 'Type', 'Pearson');
    correlations{i} = correlation;
    
    % 可视化结果
    figure;
    heatmap(correlation);
    title(['Correlation of Chemical Components for ', char(type)]);
end

上述代码首先按照玻璃类型对数据进行了分组。然后,对于每种类型的玻璃,它计算了化学成分之间的 Pearson 相关性,并将结果可视化。我们可以通过比较不同类型玻璃的相关性热图,来观察各类别之间化学成分关联关系的差异性。

需要注意的是,Pearson 相关性只能衡量线性关系。如果化学成分之间的关系是非线性的,我们可能需要使用其他方法,如 Spearman's rank correlation 或者 mutual information。此外,相关性只是衡量两种化学成分之间关系的一种方法,实际中可能还需要考虑更复杂的关系,例如通过因子分析、主成分分析等方法,考察多个化学成分之间的共同变动关系。

最后,这些代码只是一个起点,具体的实现可能需要根据实际的问题和数据进行调整。

猜你喜欢

转载自blog.csdn.net/m0_68036862/article/details/131649903