2023 年 数维杯(B题)国际大学生数学建模挑战赛 建模秘籍&文章代码思路大全
数字商品 教育 / 知识

2023 年 数维杯(B题)国际大学生数学建模挑战赛 建模秘籍&文章代码思路大全

数学建模小秘籍 · 2 · 0

商品介绍
铛铛!小秘籍来咯!
小秘籍希望大家都能轻松建模呀,数维杯也会持续给大家放送思路滴~
抓紧小秘籍,我们出发吧~
来看看 数维杯国际大学生数学建模挑战赛的B题!

 
## 问题一
 
问题一要求对每个热解组合分析与其对应的热解产物(焦油、水、焦渣、合成气)的产量之间的关系,以及判断脱硫灰作为催化剂是否在促进棉秆、纤维素和木质素的热解过程中发挥了显著的作用。以下是问题一的建模思路:
 
1. **数据理解与预处理:**
  - 理解并检查附带的热解组合产物数据表格。
  - 处理任何缺失值或异常值。
  - 确保数据集分为训练集和测试集。
 
2. **选择适当的模型:**
  - 由于问题涉及多个因素对多个产物的影响,可以考虑使用多元回归模型。
  - 对于多元回归,可以分别建立焦油、水、焦渣和合成气的产量模型。
 
3. **特征选择与工程:**
  - 选择作为输入特征的热解组合的相关参数,如脱硫灰的混合比例。
  - 可以进行特征工程,如变量的归一化或标准化。
 
4. **建立多元回归模型:**
  - 对于每个产物(焦油、水、焦渣、合成气),建立相应的多元回归模型。
  - 在Python中,可以使用Scikit-Learn等库的线性回归模型。
 
  ```python
  from sklearn.linear_model import LinearRegression
 
  # 假设 X 是热解组合的相关参数,y 是对应产物的产量
  model_tar = LinearRegression()
  model_water = LinearRegression()
  model_coke = LinearRegression()
  model_syngas = LinearRegression()
 
  # 训练模型
  model_tar.fit(X, y_tar)
  model_water.fit(X, y_water)
  model_coke.fit(X, y_coke)
  model_syngas.fit(X, y_syngas)
  ```
 
5. **模型评估:**
  - 使用测试集数据对每个模型进行评估,检查模型的预测性能。
  - 可以使用各种回归指标,如均方误差(MSE)等。
 
6. **统计检验:**
  - 对每个模型进行统计检验,验证模型参数的显著性。
  - 这可以通过 t 检验等方法来实现。
 
7. **结果解释:**
  - 解释每个模型的系数,了解各个热解组合参数对产物产量的影响程度。
  - 比较脱硫灰的混合比例在促进热解产物生成方面的作用。
 
8. **可视化:**
  - 制作图表,将模型预测值与实际观测值进行比较,以直观展示模型性能。
 
9. **模型应用与验证:**
  - 将建立的模型应用于新的热解组合数据,验证模型的泛化能力。
  - 确保模型在未见过的数据上表现良好。
 
```python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import statsmodels.api as sm
 
# 读取数据
data = pd.read_excel('热解组合产物数据.xlsx')
 
# 数据预处理
X = data[['脱硫灰混合比例', '其他相关参数']] # 输入特征
y_tar = data['焦油产量'] # 目标变量:焦油产量
y_water = data['水产量'] # 目标变量:水产量
y_coke = data['焦渣产量'] # 目标变量:焦渣产量
y_syngas = data['合成气产量'] # 目标变量:合成气产量
 
# 分割数据集为训练集和测试集
X_train, X_test, y_tar_train, y_tar_test, y_water_train, y_water_test, y_coke_train, y_coke_test, y_syngas_train, y_syngas_test = train_test_split(
   X, y_tar, y_water, y_coke, y_syngas, test_size=0.2, random_state=42)
 
# 创建并训练多元回归模型
model_tar = LinearRegression()
model_tar.fit(X_train, y_tar_train)
 
model_water = LinearRegression()
model_water.fit(X_train, y_water_train)
 
model_coke = LinearRegression()
model_coke.fit(X_train, y_coke_train)
 
model_syngas = LinearRegression()
model_syngas.fit(X_train, y_syngas_train)
 
# 预测测试集
y_tar_pred = model_tar.predict(X_test)
y_water_pred = model_water.predict(X_test)
y_coke_pred = model_coke.predict(X_test)
y_syngas_pred = model_syngas.predict(X_test)
 
# 评估模型性能
mse_tar = mean_squared_error(y_tar_test, y_tar_pred)
mse_water = mean_squared_error(y_water_test, y_water_pred)
mse_coke = mean_squared_error(y_coke_test, y_coke_pred)
mse_syngas = mean_squared_error(y_syngas_test, y_syngas_pred)
 
print(f'Mean Squared Error (Tar): {mse_tar}')
print(f'Mean Squared Error (Water): {mse_water}')
print(f'Mean Squared Error (Coke): {mse_coke}')
print(f'Mean Squared Error (Syngas): {mse_syngas}')
 
# 统计检验
X_train = sm.add_constant(X_train) # 添加截距项
model_tar_stats = sm.OLS(y_tar_train, X_train).fit()
model_water_stats = sm.OLS(y_water_train, X_train).fit()
model_coke_stats = sm.OLS(y_coke_train, X_train).fit()
model_syngas_stats = sm.OLS(y_syngas_train, X_train).fit()
 
# 打印模型统计信息
print(model_tar_stats.summary())
#见完整代码
 ```
## 问题二
 
1. **数据理解与预处理:**
  - 读取并理解附带的热解组合产物数据表格。
  - 处理任何缺失值或异常值。
  - 将数据集分为训练集和测试集。
 
2. **选择适当的模型:**
  - 由于问题涉及混合比例对产物产量的影响,选择多项式回归模型。
  - 多项式回归可以通过添加混合比例的高次项来捕捉非线性关系。
 
3. **特征选择与工程:**
  - 选择混合比例作为输入特征。
  - 考虑添加混合比例的高次项,以捕捉可能存在的非线性关系。
  - 对特征进行必要的预处理,如归一化或标准化。
 
4. **建立多项式回归模型:**
  - 对于每个产物(焦油、水、焦渣、合成气),建立相应的多项式回归模型。
  - 在Python中,可以使用Scikit-Learn等库的`PolynomialFeatures`进行特征的多项式转换,并使用`LinearRegression`进行多项式回归。
 
  ```python
  from sklearn.preprocessing import PolynomialFeatures
  from sklearn.linear_model import LinearRegression
 
  # 假设 X 是混合比例,y 是对应产物的产量
  degree = 2 # 多项式次数
 
  poly = PolynomialFeatures(degree)
  X_poly = poly.fit_transform(X_train)
 
  model_tar = LinearRegression()
  model_water = LinearRegression()
  model_coke = LinearRegression()
  model_syngas = LinearRegression()
 
  # 训练模型
  model_tar.fit(X_poly, y_tar_train)
  model_water.fit(X_poly, y_water_train)
  model_coke.fit(X_poly, y_coke_train)
  model_syngas.fit(X_poly, y_syngas_train)
  ```
 
5. **模型评估:**
  - 使用测试集数据对每个模型进行评估,检查模型的预测性能。
  - 可以使用各种回归指标,如均方误差(MSE)等。
 
  ```python
  from sklearn.metrics import mean_squared_error
 
  X_poly_test = poly.transform(X_test)
 
  y_tar_pred = model_tar.predict(X_poly_test)
  y_water_pred = model_water.predict(X_poly_test)
  y_coke_pred = model_coke.predict(X_poly_test)
  y_syngas_pred = model_syngas.predict(X_poly_test)
 
  mse_tar = mean_squared_error(y_tar_test, y_tar_pred)
  mse_water = mean_squared_error(y_water_test, y_water_pred)
  mse_coke = mean_squared_error(y_coke_test, y_coke_pred)
  mse_syngas = mean_squared_error(y_syngas_test, y_syngas_pred)
 
  print(f'Mean Squared Error (Tar): {mse_tar}')
  print(f'Mean Squared Error (Water): {mse_water}')
  print(f'Mean Squared Error (Coke): {mse_coke}')
  print(f'Mean Squared Error (Syngas): {mse_syngas}')
  ```
 
6. **结果可视化:**
  - 制作图表,将混合比例与模型预测的产物产量进行可视化比较。
  - 可以创建多个子图,每个子图代表一个产物。
 
  ```python
  import matplotlib.pyplot as plt
 
  plt.scatter(X_test, y_tar_test, color='black', label='Actual')
  plt.scatter(X_test, y_tar_pred, color='red', label='Predicted')
  plt.title('Tar Production Prediction')
  plt.xlabel('Mixture Ratio')
  plt.ylabel('Tar Production')
  plt.legend()
  plt.show()
  ```
 
7. **统计检验(可选):**
  - 对模型的系数进行统计检验,验证混合比例及其高次项对产物产量的显著性。
 
  ```python
  import statsmodels.api as sm
 
  X_poly_stats = sm.add_constant(X_poly) # 添加截距项
  model_tar_stats = sm.OLS(y_tar_train, X_poly_stats).fit()
  # 进行其他产物的统计检验...
  print(model_tar_stats.summary())
  ```
 
8. **模型解释与应用:**
  - 解释每个模型的系数,了解混合比例及其高次项对于产物产量的影响。
  - 可以使用模型进行预测,并根据需要应用到新的混合比例数据。
 
## 问题三
 
对于问题三,我们可以采用多元回归分析来建模,以研究脱硫灰催化下纤维素(CE)和木质素(LG)的热解产物产量及热解气体组分之间的关系。以下是更详细的建模思路:
 
1. **数据理解与预处理:**
  - 理解附带的热解组合产物数据表格,特别关注纤维素(CE)和木质素(LG)的相关列。
  - 处理缺失值或异常值。
  - 将数据集分为训练集和测试集。
 
2. **选择适当的模型:**
  - 由于我们关心多个因变量(产物产量和热解气体组分),可以使用多元线性回归模型。这样的模型可以同时考虑多个因变量之间的关系。
 
3. **特征选择与工程:**
  - 选择脱硫灰的催化比例作为输入特征,以及纤维素(CE)和木质素(LG)的产物产量及热解气体组分作为目标变量。
  - 进行必要的特征工程,如数据标准化。
 
4. **建立多元回归模型:**
  - 对于每个目标变量(例如焦油、水、焦渣、合成气及其组分),建立相应的多元回归模型。
  - 在Python中,可以使用Scikit-Learn库的`LinearRegression`。
 
  ```python
  from sklearn.linear_model import LinearRegression
  from sklearn.model_selection import train_test_split
  from sklearn.metrics import mean_squared_error
 
  # 选择特征和目标变量
  X = data[['催化比例']]
  y_tar = data[['CE_tar_production', 'LG_tar_production']]
  y_gas = data[['CE_H2', 'CE_CO', 'LG_H2', 'LG_CO']] # 以此类推...
 
  # 分割数据集
  X_train, X_test, y_tar_train, y_tar_test, y_gas_train, y_gas_test = train_test_split(
      X, y_tar, y_gas, test_size=0.2, random_state=42
  )
 
  # 创建并训练多元回归模型
  model_tar = LinearRegression()
  model_tar.fit(X_train, y_tar_train)
 
  model_gas = LinearRegression()
  model_gas.fit(X_train, y_gas_train)
  ```
 
5. **模型评估:**
  - 使用测试集数据对每个模型进行评估,检查模型的预测性能。
  - 评估可以使用各种回归指标,如均方误差(MSE)等。
 
  ```python
  # 预测测试集
  y_tar_pred = model_tar.predict(X_test)
  y_gas_pred = model_gas.predict(X_test)
 
  # 评估模型性能
  mse_tar = mean_squared_error(y_tar_test, y_tar_pred)
  mse_gas = mean_squared_error(y_gas_test, y_gas_pred)
 
  print(f'Mean Squared Error (Tar): {mse_tar}')
  print(f'Mean Squared Error (Gas): {mse_gas}')
  ```
 
6. **解释结果:**
  - 解释每个模型的系数,了解催化比例对于纤维素(CE)和木质素(LG)热解产物产量及热解气体组分的影响。
  - 检查模型系数的显著性,可以通过 t 检验或 p 值来判断。
 
  ```python
  import statsmodels.api as sm
 
  X_train_stats = sm.add_constant(X_train) # 添加截距项
  model_tar_stats = sm.OLS(y_tar_train, X_train_stats).fit()
  model_gas_stats = sm.OLS(y_gas_train, X_train_stats).fit()
 
  print(model_tar_stats.summary())
  print(model_gas_stats.summary())
  ```
 
7. **统计检验:**
  - 对模型的系数进行统计检验,验证催化比例的显著性。
 
8. **模型解释与应用:**
  - 根据模型结果解释催化比例对于纤维素(CE)和木质素(LG)的热解产物产量及热解气体组分的影响。
  - 模型可以用于预测新的催化比例下的产物产量及热解气体组分。
 
```python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import statsmodels.api as sm
 
# 读取数据
data = pd.read_excel('热解组合产物数据.xlsx')
 
# 数据预处理
# 选择特征和目标变量
X = data[['催化比例']]
y_tar = data[['CE_tar_production', 'LG_tar_production']]
y_gas = data[['CE_H2', 'CE_CO', 'LG_H2', 'LG_CO']] # 以此类推...
 
# 分割数据集
X_train, X_test, y_tar_train, y_tar_test, y_gas_train, y_gas_test = train_test_split(
   X, y_tar, y_gas, test_size=0.2, random_state=42
)
 
# 创建并训练多元回归模型 - 产物产量
model_tar = LinearRegression()
model_tar.fit(X_train, y_tar_train)
 
# 创建并训练多元回归模型 - 热解气体组分
model_gas = LinearRegression()
model_gas.fit(X_train, y_gas_train)
 
# 预测测试集
y_tar_pred = model_tar.predict(X_test)
y_gas_pred = model_gas.predict(X_test)
 
# 评估模型性能
mse_tar = mean_squared_error(y_tar_test, y_tar_pred)
mse_gas = mean_squared_error(y_gas_test, y_gas_pred)
 
print(f'Mean Squared Error (Tar): {mse_tar}')
print(f'Mean Squared Error (Gas): {mse_gas}')
 
# 模型统计检验
X_train_stats = sm.add_constant(X_train) # 添加截距项
model_tar_stats = sm.OLS(y_tar_train, X_train_stats).fit()
```
 
## 问题四
 
问题四需要建立脱硫灰对模型化合物(如纤维素和木质素)的催化反应机理模型,并对反应动力学进行分析。以下是一个建模思路:
 
1. **机理模型的构建:**
  - 首先,我们需要了解脱硫灰对纤维素(CE)和木质素(LG)的催化机理。这可能涉及到催化剂与生物质组分之间的反应路径、中间产物等。
  - 基于已有的化学知识,建立脱硫灰催化纤维素和木质素热解的反应机理模型。这可以是一组差分方程或基于反应速率的模型。
 
2. **动力学参数的估计:**
  - 使用实验数据,通过拟合模型参数,估计脱硫灰对纤维素和木质素催化反应的动力学参数。
  - 选择适当的参数拟合方法,如最小二乘法,以获得最佳拟合。
 
3. **模型验证:**
  - 使用估计的动力学参数对模型进行验证,比较模型预测与实验数据的吻合程度。
  - 可以使用各种统计指标来评估模型的准确性,如均方根误差(RMSE)等。
 
4. **模型应用与解释:**
  - 基于建立的催化反应机理模型,可以进行不同条件下的模拟,预测纤维素和木质素的催化热解行为。
  - 解释模型参数的物理意义,了解脱硫灰对生物质组分热解的影响。
 
5. **敏感性分析:**
  - 进行敏感性分析,评估模型对于参数变化的敏感性。这有助于确定哪些参数对模型的输出影响最大,以及在什么条件下模型可能失效。
 
6. **模型改进:**
  - 根据验证和敏感性分析的结果,对模型进行改进。可能需要调整催化反应机理的复杂度,引入更多的影响因素或修正模型方程。
 
```python
import numpy as np
from scipy.integrate import odeint
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
 
# 定义一阶反应模型
def first_order_reaction(C, t, k):
   return -k * C
 
# 生成模拟数据
t_data = np.linspace(0, 10, 50)
k_true = 0.2 # 真实的反应速率常数
C_true = odeint(first_order_reaction, 1.0, t_data, args=(k_true,)).flatten()
 
# 添加噪声模拟实验数据
np.random.seed(42)
C_noisy = C_true + 0.05 * np.random.normal(size=len(t_data))
 
# 定义拟合函数
def fit_function(t, k):
   return odeint(first_order_reaction, 1.0, t, args=(k,)).flatten()
```
 
## 问题五
使用支持向量回归(Support Vector Regression,SVR方法。SVR 是一种回归分析的机器学习算法,适用于非线性关系的建模。
 
1. **数据预处理:**
  - 处理缺失值,处理异常值,将数据集分为训练集和测试集。
 
2. **选择特征和目标变量:**
  - 选择适当的特征作为输入,包括催化比例和其他可能影响反应的因素。
  - 选择产物产量或其他相关的输出作为目标变量。
 
3. **支持向量回归模型:**
  - 使用支持向量回归模型进行建模。SVR 是一种非常适用于复杂非线性关系的算法。
 
4. **模型训练:**
  - 将数据输入到 SVR 模型中,进行模型的训练。
 
5. **模型评估:**
  - 使用测试集数据对模型进行评估,考察模型的泛化性能。可以使用均方误差(MSE)等指标进行评估。
 
6. **调整模型参数:**
  - 根据评估结果调整 SVR 模型的参数,以优化模型性能。SVR 有一些关键的参数,如 kernel 类型、惩罚系数(C)等。
 
7. **特征重要性分析(可选):**
  - 虽然 SVR 不像随机森林那样直接提供特征的重要性分数,但可以通过观察模型的权重来了解输入特征对于模型的相对重要性。
 
8. **模型解释:**
  - 解释 SVR 模型对于催化反应产物产量的预测结果,了解模型认为哪些因素对于影响产物产量较大。
 
9. **模型应用:**
  - 使用训练好的 SVR 模型进行新的预测,例如在不同的催化条件下预测产物产量。
 
```python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
 
# 读取数据
data = pd.read_excel('你的数据文件.xlsx')
 
# 数据预处理
# 选择特征和目标变量
X = data[['催化比例', '其他特征1', '其他特征2', ...]] # 添加其他可能的影响因素
y = data['产物产量']
 
# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
 
# 支持向量回归模型
# 这里可以根据需要调整SVR的参数,如kernel类型、C值等
model = SVR(kernel='rbf', C=1.0, gamma='scale')
model.fit(X_train, y_train)
 
# 模型预测
y_pred = model.predict(X_test)
 
# 模型评估
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse}')
 
# 绘制真实值与预测值的对比图
plt.scatter(y_test, y_pred)
plt.xlabel('真实值')
plt.ylabel('预测值')
```

同店推荐

包含文件 · 7 · 254.4 KB

  • 01_B题完整代码详细思路.docx 23.6 KB
  • 02_问题4.py 1.1 KB
  • 03_问题3.py 1.5 KB
  • 04_2.py 1.3 KB
  • 05_问题5.py 1.0 KB
  • 06_B题完整代码详细思路.pdf 223.5 KB
  • 07_问题一.py 2.3 KB
支付金额 ¥17.20