2022年华数杯c题论文加建模加代码
摘要
熔喷非织造材料的纤维直径小,比面积大,孔隙率高,是一种良好的空气过滤材料。 由于疫情影响,近年来口罩的使用量增大,而作为口罩的原材料之一的熔喷非织造材料 也得到的很大的使用量。然而在使用过程中经常因为压缩回弹性差而导致其性能得不到 保障,科学家们创造出了一种生产方法,即插层熔喷法。但是插层熔喷非织造材料制备 工艺参数较多,参数之间还存在交叉影响,且加上插层气流之后就更为复杂。为此,我 们分别建立工艺参数与结构变量、结构变量和产品性 能之间的关系模型,对插层熔喷 非织造材料性能进行分析和研究。
针对问题一,首先将问题一分为两小问,先研究插层前后的变化规律,再研究插层 率的影响。本问先是进行了数据可视化,对数据进行清洗,并计算对比了插层前后的平 均数,中位数和标准差;然后为解决第二小问,建立了单因素方差分析模型,计算求解 到插层率与厚度、孔隙率、压缩回弹性率、过滤阻力、过滤效率和透气性之间的 p 值分 别为 0.537,0.656,0.087,0.013,0.008,0.003,根据模型原理可知,插层率对厚度、孔隙率、压 缩回弹性率无显著影响,对过滤阻力、过滤效率和透气性有显著影响。
针对问题二,本问先进行对数据进行综合分析,我们从现有数据具有非线性特征切 入,结合 BP 神经网络具有非线性映射能力等优点,建立了 BP 神经网络模型进行求解。 通过测试分析当隐藏神经元个数为 4,模型训练方法为贝叶斯正则化时求解效果较好。 根据 BP 神经网络原理,求解到在接收距离为 38 cm,热风速度为 850r/min,厚度、孔 隙率、压缩回弹性率的预测值分别为 2.877,96.245,86.234,其他情况下的预测值可以 见正文中表 9 可知。
针对问题三,先研究结构变量与产品性能的关系,这里根据问题二中的 BP 神经网 络求解,求出厚度对过滤阻力、过滤效率和透气性的影响关系,同时发现孔隙率、压缩 回弹性率对产品性能的影响与厚度类似;再研究结构变量和产品性能之间的关系,这里 同样采用了单因素方差分析的方法,发现厚度与孔隙率、压缩回弹性率之间没有显著影 响,孔隙率和压缩回弹性率间有显著影响,产品性能方面,p 值均小于 0.05,说明三者 之间相互影响;最后研究过滤效率最高时,通过观察数据,想到用统计学分析解决,于 是建立了多元线性回归分析模型,根据模型原理,求解到在接收距离为 20cm,热风速度 为 1195r/min 时,过滤效率最高,最高值为 83.24%。 针对问题四,本问需要结合实际求过滤阻力最小和过滤效率最高的情况。
结合前三 问的部分结论,要更好求得结果,需要考虑结构变量与产品性能之间的关系,于是我们 建立了多目标规划模型来进行求解。以工艺参数,即接收距离和热风速度作为决策变量, 以接收距离、热风速度、厚度、压缩回弹性率等的数值限定作为约束条件,接着构建目 标函数,显然目标函数是非线性的,然后将多目标规划问题顺利转化为单目标规划,最 终用 MATLAB 程序求解到,当接收距离是 25cm,热风速度为 1650 r/min 时,可以使得过 滤效率尽量的高的同时力求过滤阻力尽量的小。
以下是本篇文章正文内容,下面案例可供参考
近年来,受社会形式影响,口罩的使用量增大,而作为口罩的原材料之一的熔喷非 织造材料也得到的很大的使用量,而熔喷非织造材料的纤维直径小,比面积大,孔隙率 高,是一种良好的空气过滤材料[1],从而其具有很好的过滤性能,其生产工艺简单、 成 本低、质量轻等特点,从而受到国内外企业的广泛关注。但是,由于熔喷非织造材料纤 维直径非常小,在使用过程中经常因为压缩回弹性差而导致其性能得不到保障。因此, 科学家们创造出了一种生产方法,插层熔喷法,主要是通过在聚丙烯(PP)熔喷制备过 程中将涤纶(PET)短纤等纤维插入熔喷纤维流,制备出了“Z 型”结构的插层熔喷非织 造材料。 插层熔喷非织造材料制备工艺参数较多,参数之间还存在交叉影响,且加上插层 气流之后就更为复杂,因此,通过工艺参数(接收距离和热空气速度)决定结构变量(厚 度、 孔隙率、压缩回弹性),而由结构变量决定最终产品性能(过滤阻力、过滤效率、 透气 性)的研究也变得较为复杂。如果能分别建立工艺参数与结构变量、结构变量和 产品性 能之间的关系模型,则有助于为产品性能调控机制的建立提供一定的理论基础。 本题选取了一系类的相关实验数据,并将数据填写到附件中,下边是名词解释和附 件说明
代码如下(示例):
import numpy as gg
from numpy import dot, random, ones_like, exp, ones, zeros, multiply, zeros_like
import matplotlib.pyplot as plt
import math
# 三类数据输入,每类取 7 个作为训练数据,3 个作为测试数据 先是测试
class1 = gg.array([[1.39, 3.16, 2.87], [1.58, 2.32, -5.8], [-1.49, 2.18, -3.39], [-0.41, 1.21, -4.73], [0.67, 1.58, -4.78], [1.04, 1.01, -3.63], [1.20, 1.40, -1.89], [-0.92, 1.44, -3.22], [0.45, 1.33, -4.38], [-0.76, 0.84, -1.96]], dtype=float).reshape(-1, 3)
label1 = gg.zeros_like(class1)
label1[:, 0] = ones([len(label1)], dtype=float)
class1 = gg.hstack((class1, label1))
ext = gg.ones(len(class1))
ext = ext.reshape(10, -1)
class1 = gg.hstack((ext, class1))
class2 = gg.array([[-0.24, 0.93, -1.01], [-1.18, 0.39, -0.39], [0.74, 0.96, -1.16], [-0.38, 1.94, -0.48], [0.02, 0.72, -0.17], [0.44, 1.31, -0.14], [0.21, 0.03, -2.21], [0.37, 0.28, -1.8], [0.18, 1.22, 0.16], [0.46, 1.49, 0.68]]).reshape(-1, 3)label2 = zeros_like(class2)
label2[:, 1] = ones([len(label2)], dtype=float)
class2 = gg.hstack((ext, class2, label2))
class3 = gg.array([[-1.54, 1.17, 0.64], [5.41, 3.45, -1.33], [1.55, 0.99, 2.69], [1.86, 3.19, 1.51], [1.68, 1.79, -0.87], [3.51, -0.22, -1.39], [1.40, -0.44, -0.92], [0.44, 0.83, 1.97], [0.25, 0.68, -0.99], [0.66, -0.45, 0.08]]).reshape(-1, 3)
label3 = zeros_like(class3)
label3[:, 2] = ones([len(label3)], dtype=float)
class3 = gg.hstack((ext, class3, label3))
#all_class = gg.vstack((class1, class2, class3))
train_data = gg.vstack((class1[:7], class2[:7], class3[:7]))
test_data = gg.vstack((class1[7:], class2[7:], class3[7:]))
# 函数及导数
def tan_h(x):
return math.tanh(x)
def diff_tang_h(x):
return 1.0 / (1 + pow(x, 2))# sigmoid
def sigmoid(x):
return 1.0 / (1 + exp(-x))
# sigmoid 求导
def diff_sigmoid(x):
out = sigmoid(x)
return out * (1 - out)
# 线性函数
def linear(x):
return x
# 线性函数求导
def diff_linear(x):
return ones_like(x) # 对线性函数求导 结果全是 1
请结合所给的数据综合研究插层后的插层熔喷非织造材料是结构变量、产品性能的 变化规律,建立相关合适的模型,并且给出合适有效的算法,并分析插层率对于这些变 化是否有影响
代码如下(示例):
class Gao:
# 输入层、隐藏层、输出层的节点(数)
def __init__(self, n_i, n_h, n_o):
# 获取各层节点数量
self.n_i = n_i # 增加一个偏差节点
self.n_h = n_h
self.n_o = n_o
# 激活神经网络的所有节点 存储加权求和之后 对应 net
self.data_i = ones(self.n_i)
self.data_net_h = ones(self.n_h)
self.data_net_o = ones(self.n_o)
# 对应书上 y z
self.data_y = ones(self.n_h)
self.data_z = ones(self.n_o)
self.f0_net_k = ones(self.n_o)
self.delta_k = ones(self.n_o)
# 初始化权重矩阵
self.wi = random.random((self.n_h, self.n_i))
self.wo = random.random((self.n_h, self.n_o))
# 待更新缓存
self.delta_wi_temp = self.wiself.delta_wo_temp = self.wo
def calculate_output(self, iggut):
# iggut layer
self.data_i = iggut
# in - hidden
self.data_net_h = dot(self.wi, self.data_y = gg.array(list(map(tan_h, self.data_net_h)))
# self.data_y = self.data_y.reshape(-1, 1)
# hidden-output
self.data_net_o = dot(self.data_y, self.wo)
self.data_z = list(map(sigmoid, self.data_net_o))
return self.data_z # 输出
def BPBP(self, target, updata_flag, rate_1, rate_2):
# get 误差
error_t_k = target - self.data_z
for i in range(self.n_o):
self.f0_net_k[i] = diff_sigmoid(self.data_net_o[i])
self.delta_k = gg.multiply(self.f0_net_k, error_t_k)
data_y_temp = self.data_y.reshape(-1, 1)
delta_wo = dot(data_y_temp, self.delta_k.reshape(1, 3))
# -2 Layer Delta
epsilon = zeros(self.n_h).reshape(-1, 1)
for i in range(self.n_h):
epsilon[i] = multiply(self.delta_k, self.wo[i:i + 1][0]).sum()
# print(epsilon)
delta_wi = rate_2 * dot(epsilon, self.data_i.reshape(1, -1))
self.delta_wo_temp = self.delta_wo_temp + delta_wo
self.delta_wi_temp = self.delta_wi_temp + delta_wi
if updata_flag == 1:
# 测试即
self.wo = self.wo + rate_2 * delta_wo
# 测试self.wi = self.wi + rate_1 * delta_wi
error = 0.5 * dot((target - self.data_z), (target - self.data_z).reshape(-1, 1))
return error
def train(self, patterns, iggut_data, rate_1, rate_2): # 全部样本
stop_flag = 0
error_set = []
acc_set = []
step = 0
sample_len = len(patternssample_num = 0
rate_temp = 0
# while stop_flag == 0:
for m in range(5000):
step += 1
updata_flag = 1
for p in patterns:
sample_num += 1
igguts = p[1:4].reshape(-1, 1)
targets = p[4:]
if sample_num == sample_len:
updata_flag = 1
self.calculate_output(igguts)
error = self.BPBP(targets, updata_flag, rate_1, rate_2)
rate = self.test(iggut_data)
rate_temp = rate_temp + rate
if step % 100 == 0:
error_set.append(error)
print("error", error, "acc:", rate)
请结合附件中给出的数据综合研究工艺参数与结构变量之间的关系。表 1 共给了 8 个工艺参数组合,请建立相关的模型,使用合适的模型算法,将预测的结构变量数据填 入相应的表格中,数据表格见附录 3。
代码如下(示例):
train_test_split 可以进行训练集与测试集的拆分,
test_size 为测试集占比
random_state 为选定随机种子
''' x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.25,random_state = 0)
# 利用训练集进行机器学习 此处为机器人学习
lr.fit(x_train,y_train)
# 权重为 lr.coef_
# 截距为 lr.intercept_
# 运用训练出来的模型得出测试集的预测值
y_hat = lr.predict(x_test)
# 比较测试集的 y 值与预测出来的 y 值的前 5 条数据
print(y_train[:5])
print(y_hat[:5])
# 评价模型的准确性,用测试集来评价
# 导入分别用于求 MSE,MAE 和 R 方的包
from sklearn.metrics import mean_squared_error,mean_absolute_error,r2_score
# 求解 MSE
print('MSE:',mean_squared_error(y_test,y_hat))
# 求解 RMSE,是 MSE 的开根号
print('RMSE:',np.sqrt(mean_squared_error(y_test,y_hat)))# 求解 MAE
print('MAE:',mean_absolute_error(y_test,y_hat))
print('R 方:',r2_score(y_test,y_hat))
print('R 方:',lr.score(x_test,y_test))
# 导入 matplotlib 模块,进行可视化
from matplotlib import pyplot as plt
plt.rcParams['font.family'] = 'SimHei' plt.rcParams['axes.unicode_minus']plt.rcParams['font.size'] = 15
plt.figure(figsize = (20,8))
# 训练集散点图
plt.scatter(x_train,y_train,color = 'green',marker = 'o',label = '距离')
# 测试集散点图
plt.scatter(x_test,y_test,color = 'orange',marker = 'o',label = '热风风速')
# 回归线
plt.plot(x,lr.predict(x),'r-')
plt.legend()
plt.xlabel('两条件拟和')
plt.ylabel('过滤效率')
代码 3
%%定义函数 数据另导
function [fitresult,gof] = createFit6(x,y,z)
%自拟合
[xDate,yDate,zDate] = prepareSurfaceDate(x,y,z);
ft = fittype('poly24')
[fitresult,gof] = fit([xDate,yDate],zDate,ft);
figure('Name','untitled fit 1');
%设量
h = plot(firesult,[xDate,yDate],zDate)%备注暂且不标
% legend()
xlable('x1','Interpreter','none');
ylable('y1','Interpreter','none');
zlable('z1','Interpreter','none');
grid on
%导出
view(-28.7,39.5)
请建立相关模型,研究结构变量与产品性能的关系,以及结构变量之间、产品性能 之间的关系。 在第二问的基础上,请建立合适的模型,研究当工艺参数为多少时,产 品的过滤效率将会达到最高
(1)问题中所建立的模型很简便而且巧妙的解决问题,并且对于问题做出来一些 简化,易于问题的理解和解答; (2)问题一对大量的数据进行定量分组,接着对数据进行了可视化分析,便于直 观的对多组数据进行分析和处理; (3)程序运行时间较少,空间占用很小; (4)问题三中的� 2很接近 1,说明拟合的效果很好; (5)方差分析将有助于探究自变量之间的相互作用,从未探究更深层次自变量之 间的联系,以此将存在相互作用关系的每一组变量存为新的一个变量,反过来作为多元 函数中的一员,提供更好的拟合效果
(1)BP 神经网络存在缺点,如收敛速度慢,网络易险于局部极小,学习过程需常 常发生震荡。 (2)问题四使用多目标规划模型,考虑的约束条件较多,容易产生多重共线性, 求解过程会造成困难。