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

铛铛!小秘籍来咯!

小秘籍希望大家都能轻松建模呀,数维杯也会持续给大家放送思路滴~

抓紧小秘籍,我们出发吧~

来看看 数维杯国际大学生数学建模挑战赛的B题!
在这里插入图片描述
完整版内容在文末领取噢~

问题重述

问题一:针对催化剂(脱硫灰)在棉秆(cotton stalk)和模型化合物(CE和LG)的催化热解实验,通过数学建模分析,探讨催化剂在不同混合比例下对产物(焦油、水、焦渣、合成气)产量的影响,并判断脱硫灰是否在催化棉秆、纤维素和木质素的热解过程中发挥显著作用。

问题二:基于实验数据,对三种热解组合(脱硫灰-棉秆、脱硫灰-CE、脱硫灰-LG)进行深入分析,关注混合比例对热解气体产物(H2、CO、CO2、CH4等)产量的影响,通过图形化呈现和解释结果。

问题三:在相同脱硫灰催化比例下,探讨纤维素(CE)和木质素(LG)的热解产物产量以及热解气体组分的差异,并提供解释。

问题四:建立脱硫灰对模型化合物(CE和LG)的催化反应机理模型,进行反应动力学分析,通过最小二乘法和统计检验验证模型的可靠性。

问题五:使用机器学习方法(如支持向量回归),基于给定数据,建立模型预测催化剂在不同条件下对产物产量的影响,实现对热解产物的定量预测。

问题一

问题一要求对每个热解组合分析与其对应的热解产物(焦油、水、焦渣、合成气)的产量之间的关系,以及判断脱硫灰作为催化剂是否在促进棉秆、纤维素和木质素的热解过程中发挥了显著的作用。以下是问题一的建模思路:

  1. 数据理解与预处理:

    • 理解并检查附带的热解组合产物数据表格。
    • 处理任何缺失值或异常值。
    • 确保数据集分为训练集和测试集。
  2. 选择适当的模型:

    • 由于问题涉及多个因素对多个产物的影响,可以考虑使用多元回归模型。
    • 对于多元回归,可以分别建立焦油、水、焦渣和合成气的产量模型。
  3. 特征选择与工程:

    • 选择作为输入特征的热解组合的相关参数,如脱硫灰的混合比例。
    • 可以进行特征工程,如变量的归一化或标准化。
  4. 建立多元回归模型:

    • 对于每个产物(焦油、水、焦渣、合成气),建立相应的多元回归模型。
    • 在Python中,可以使用Scikit-Learn等库的线性回归模型。
    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. 模型应用与验证:

    • 将建立的模型应用于新的热解组合数据,验证模型的泛化能力。
    • 确保模型在未见过的数据上表现良好。
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进行多项式回归。
    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)等。
    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. 结果可视化:

    • 制作图表,将混合比例与模型预测的产物产量进行可视化比较。
    • 可以创建多个子图,每个子图代表一个产物。
    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. 统计检验(可选):

    • 对模型的系数进行统计检验,验证混合比例及其高次项对产物产量的显著性。
    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
    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)等。
    # 预测测试集
    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 值来判断。
    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)的热解产物产量及热解气体组分的影响。
    • 模型可以用于预测新的催化比例下的产物产量及热解气体组分。
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. 模型改进:

    • 根据验证和敏感性分析的结果,对模型进行改进。可能需要调整催化反应机理的复杂度,引入更多的影响因素或修正模型方程。
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 模型进行新的预测,例如在不同的催化条件下预测产物产量。
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('预测值')

完整内容点击下方名片详细了解噢~
一起来关注数学建模小秘籍冲刺数位杯最强王者!

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数学建模小secret

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值