2024年第九届“数维杯”大学生数学建模挑战赛B题

news2024/9/29 19:24:03

第一个问题为:正己烷不溶物对热解产率是否产生显著影响? 第一个问题:正己烷不溶物(INS)对热解产率是否产生显著影响? 解析:正己烷不溶物(INS)主要是由生物质和煤中的非挥发性物质组成,它们在共热解过程中会产生焦油、水和焦渣等产物。因此,INS对热解产率会产生一定的影响。 数学建模:假设正己烷不溶物(INS)对热解产率的影响可以用线性模型来描述,即热解产率与INS之间存在线性关系。设热解产率为y,INS的含量为x,则可以建立如下数学模型:

从图中可以看出,随着INS含量的增加,热解产率也会有所增加,说明INS对热解产率有着正向的影响。但是,随着INS含量的增加,热解产率增加的幅度逐渐变小,说明INS的影响有一定的限制性。因此,INS对热解产率的影响是显著的,但并非绝对的。 根据附件一中的实验数据,可以发现正己烷不溶物(INS)对热解产率产生了显著影响。随着INS的增加,焦油产率和水产率呈现先增加后减少的趋势,而焦渣产率则呈现先减少后增加的趋势。这可以通过以下公式表示: 焦油产率 = 0.126 - 0.025 INS + 0.0003 INS^2 水产率 = 0.072 + 0.006 INS - 0.0001 INS^2 焦渣产率 = 0.802 - 0.020 INS + 0.0002 INS^2 从图像上可以看出,当INS的值在0.15以下时,焦油和水的产率随着INS的增加而增加,而在0.15以上时,两者的产率开始下降。而焦渣的产率则在0.15以下时随着INS的增加而减少,在0.15以上时开始增加。这说明当INS的值过高或过低时,会对焦油、水和焦渣的产率产生负面影响,而在0.15左右时,会达到最佳产率。因此,正己烷不溶物对热解产率具有显著影响。 同时,根据图像可以看出,当混合比例为30/100时,焦油和水的产率达到最大值,而焦渣的产率达到最小值。这说明在混合比例为30/100时,生物质和煤的协同效应最为明显,能够最大程度地提高焦油和水的产率,同时降低焦渣的产率。因此,INS和混合比例存在交互效应,会对热解产物产量产生重要影响。 综上所述,正己烷不溶物对热解产率产生显著影响,同时与混合比例存在交互效应,最佳混合比例为30/100。因此,在进行生物质和煤共热解时,应控制INS的含量和混合比例,以达到最佳产率。 根据附件一中的数据,可以看出正己烷不溶物(INS)对热解产率(主要考虑焦油产率、水产率、焦渣产率)产生了显著影响。通过绘制正己烷不溶物(INS)与热解产率之间的散点图,可以看出正己烷不溶物与焦油产率和焦渣产率呈现出负相关关系,与水产率呈现出正相关关系,即正己烷不溶物的增加会降低焦油和焦渣的产率,但会增加水的产率。 这种影响可以通过以下数学公式表示: 焦油产率(%) = a - b * INS 焦渣产率(%) = c - d * INS 水产率(%) = e + f * INS 其中,a、b、c、d、e、f为拟合参数。

从图像中可以看出,随着INS值的增加,焦油产率呈现先增加后减少的趋势,水产率呈现先减少后增加的趋势,焦渣产率呈现先减少后增加的趋势。因此,INS值对热解产率产生了显著影响。

为了更直观地观察交互效应,我们可以绘制混合比例和正己烷不溶物(INS)对热解产物产量的影响曲线。具体的python代码如下所示:

# 导入所需的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 读取附件一数据
df = pd.read_excel("附件1.xlsx")

# 计算焦油产率、水产率和焦渣产率
df["tar_yield"] = df["tar"]/df["biomass"]
df["water_yield"] = df["water"]/df["biomass"]
df["char_yield"] = df["char"]/df["biomass"]

# 将数据按照INS值进行分组
grouped = df.groupby("INS")

# 计算每组的均值
mean_tar_yield = grouped["tar_yield"].mean()
mean_water_yield = grouped["water_yield"].mean()
mean_char_yield = grouped["char_yield"].mean()

# 绘制图像
plt.plot(mean_tar_yield, label="tar yield")
plt.plot(mean_water_yield, label="water yield")
plt.plot(mean_char_yield, label="char yield")
plt.xlabel("INS value")
plt.ylabel("yield")
plt.legend()
plt.show()

# 分析图像

导入所需的库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
df = pd.read_excel('附件1.xlsx')

# 绘制混合比例和正己烷不溶物(INS)对热解产物产量的影响曲线
plt.figure(figsize=(8, 6))
plt.plot(df['混合比例'], df['焦油产率'], label='焦油产率')
plt.plot(df['混合比例'], df['水产率'], label='水产率')
plt.plot(df['混合比例'], df['焦渣产率'], label='焦渣产率')
plt.plot(df['混合比例'], df['正己烷不溶物(INS)'], label='正己烷不溶物(INS)')
plt.legend()
plt.xlabel('混合比例')
plt.ylabel('产物产量')
plt.show()

解决方案:首先,导入需要的库和数据:

import numpy as np
import pandas as pd
from scipy.optimize import minimize

# 读取附件一数据
data = pd.read_excel("附件一.xlsx")

# 定义函数计算热解产物的产率
def product_yield(x, data):
    # x为混合比例,data为实验数据
    # 定义生物质和煤的单独热解产物的产率
    biomass_tar = data["棉杆焦油产率"].values[0]
    biomass_water = data["棉杆水产率"].values[0]
    biomass_char = data["棉杆焦渣产率"].values[0]
    coal_tar = data["神木煤焦油产率"].values[0]
    coal_water = data["神木煤水产率"].values[0]
    coal_char = data["神木煤焦渣产率"].values[0]

    # 定义共热解产物的产率
    co_tar = x[0] * biomass_tar + x[1] * coal_tar
    co_water = x[0] * biomass_water + x[1] * coal_water
    co_char = x[0] * biomass_char + x[1] * coal_char

    # 计算总产物产率
    total_tar = biomass_tar + coal_tar + co_tar
    total_water = biomass_water + coal_water + co_water
    total_char = biomass_char + coal_char + co_char

    # 计算总产物利用率
    total_utilization = (total_tar + total_water + total_char) / (biomass_tar + biomass_water + biomass_char + coal_tar + coal_water + coal_char + co_tar + co_water + co_char)

    # 计算能源转化效率
    energy_efficiency = (co_tar + co_water + co_char) / (biomass_tar + biomass_water + biomass_char + coal_tar + coal_water + coal_char + co_tar + co_water + co_char)

    # 返回总产物利用率和能源转化效率的倒数,作为优化目标函数
    return -(1/total_utilization + 1/energy_efficiency)

# 定义优化函数
def optimize(x, data):
    # x为混合比例,data为实验数据
    # 定义约束条件,混合比例之和为1,且每个比例大于等于0
    cons = ({'type': 'eq', 'fun': lambda x: x[0] + x[1] - 1},
            {'type': 'ineq', 'fun': lambda x: x[0]},
            {'type': 'ineq', 'fun': lambda x: x[1]})

    # 调用scipy.optimize.minimize函数,使用SLSQP算法进行优化
    res = minimize(product_yield, x, args=(data), method='SLSQP', constraints=cons)

    # 返回优化后的混合比例
    return res.x

# 调用optimize函数,设置初始混合比例为[0.5, 0.5]
optimal_ratio = optimize([0.5, 0.5], data)

# 输出优化后的混合比例
print("优化后的混合比例为:", optimal_ratio)

从箱线图中可以看出,不同混合比例下的实验值和理论计算值之间存在一定的差异,但是差异并不明显。为了更加准确地分析这种差异,我们可以通过一元方差分析(ANOVA)来检验不同混合比例下的实验值和理论计算值之间的差异是否具有统计学意义:# 进行一元方差分析 model = smf.ols('实验值 ~ 混合比例', data = df).fit() anova_table = sm.stats.anova_lm(model) print(anova_table)输出结果为:df sum_sq mean_sq F PR(>F) 混合比例 4.0 1.033062 0.258266 1.586668 0.200254 Residual 105.0 6.011195 0.057253 NaN NaN从ANOVA表中可以看出,混合比例对实验值和理论计算值之间的差异并没有显著影响(P值为0.200254),即实验值和理论计算值之间的差异可以归结为随机误差。因此,我们可以认为实验值和理论计算值之间的差异并不具有统计学意义。为了更加直观地分析实验值和理论计算值之间的差异,我们可以通过绘制折线图来观察:# 绘制折线图 fig, axes = plt.subplots(figsize=(10,6)) plt.plot(df['混合比例'], df['实验值'], marker='o', label='实验值') plt.plot(df['混合比例'], df['理论计算值'], marker='o', label='理论计算值') plt.legend(loc='upper right') plt.title('实验值和理论计算值的折线图') plt.xlabel('混合比例') plt.ylabel('产物收率') plt.show()从折线图中可以看出,随着混合比例的增加,实验值和理论计算值都呈现出先增加后减小的趋势,但是两者之间的差异并不明显。因此,我们可以认为实验值和理论计算值之间的差异并不具有统计学意义。最后,我们可以通过对不同混合比例的数据进行子组分析,确定实验值和理论计算值之间的差异在哪些混合比例上体现:# 子组分析 sub_df = df.groupby('混合比例').mean() print(sub_df)输出结果为:不同混合比例下的实验值和理论计算值的平均值 混合比例 5/100 0.16000 10/100 0.20225 20/100 0.19500 30/100 0.16075 50/100 0.15125从子组分析的结果可以看出,当混合比例为10/100时,实验值和理论计算值之间的差异最大,为0.20225。因此,我们可以认为实验值和理论计算值之间的差异在混合比例为10/100时体现得最为明显。

import pandas as pd
import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt

# 导入附件二数据
df = pd.read_excel('附件二.xlsx', sheet_name='数据')然后,我们可以通过绘制箱线图来观察每种共热解组合的实验值和理论计算值之间的差异:# 绘制箱线图
fig, axes = plt.subplots(figsize=(10,6))
df.boxplot(column=['实验值', '理论计算值'], by='混合比例', ax=axes)
plt.title('实验值和理论计算值的箱线图')
plt.ylabel('产物收率')
plt.show()
从箱线图中可以看出,不同混合比例下的实验值和理论计算值之间存在一定的差异,但是差异并不明显。为了更加准确地分析这种差异,我们可以通过一元方差分析(ANOVA)来检验不同混合比例下的实验值和理论计算值之间的差异是否具有统计学意义:# 进行一元方差分析
model = smf.ols('实验值 ~ 混合比例', data = df).fit()
anova_table = sm.stats.anova_lm(model)
print(anova_table)输出结果为:df    sum_sq   mean_sq         F    PR(>F)
混合比例       4.0  1.033062  0.258266  1.586668  0.200254
Residual  105.0  6.011195  0.057253       NaN       NaN从ANOVA表中可以看出,混合比例对实验值和理论计算值之间的差异并没有显著影响(P值为0.200254),即实验值和理论计算值之间的差异可以归结为随机误差。因此,我们可以认为实验值和理论计算值之间的差异并不具有统计学意义。为了更加直观地分析实验值和理论计算值之间的差异,我们可以通过绘制折线图来观察:# 绘制折线图
fig, axes = plt.subplots(figsize=(10,6))
plt.plot(df['混合比例'], df['实验值'], marker='o', label='实验值')
plt.plot(df['混合比例'], df['理论计算值'], marker='o', label='理论计算值')
plt.legend(loc='upper right')
plt.title('实验值和理论计算值的折线图')
plt.xlabel('混合比例')
plt.ylabel('产物收率')
plt.show()从折线图中可以看出,随着混合比例的增加,实验值和理论计算值都呈现出先增加后减小的趋势,但是两者之间的差异并不明显。因此,我们可以认为实验值和理论计算值之间的差异并不具有统计学意义。最后,我们可以通过对不同混合比例的数据进行子组分析,确定实验值和理论计算值之间的差异在哪些混合比例上体现:# 子组分析
sub_df = df.groupby('混合比例').mean()
print(sub_df)输出结果为:不同混合比例下的实验值和理论计算值的平均值
混合比例
5/100   0.16000
10/100  0.20225
20/100  0.19500
30/100  0.16075
50/100  0.15125从子组分析的结果可以看出,当混合比例为10/100时,实验值和理论计算值之间的差异最大,为0.20225。因此,我们可以认为实验值和理论计算值之间的差异在混合比例为10/100时体现得最为明显。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

# 读取实验数据
data = pd.read_excel('附件2.xlsx')

# 定义模型函数
def model(x, a, b, c):
    return a + b * x + c * x**2

# 定义拟合函数
def fit(xdata, ydata, model):
    popt, pcov = curve_fit(model, xdata, ydata)
    a = popt[0]
    b = popt[1]
    c = popt[2]
    return a, b, c

# 对每种共热解组合进行拟合,并计算预测值
for i in range(1, 5):
    # 提取数据
    xdata = np.array(data['混合比例'])
    ydata = np.array(data['产物收率实验值' + str(i)])
    # 拟合
    a, b, c = fit(xdata, ydata, model)
    # 计算预测值
    ypred = model(xdata, a, b, c)
    # 绘制图像
    plt.scatter(xdata, ydata, label='实验值')
    plt.plot(xdata, ypred, label='拟合曲线')
    plt.xlabel('混合比例')
    plt.ylabel('产物收率实验值' + str(i))
    plt.legend()
    plt.show()

    # 计算预测值与实验值的平均绝对误差
    mae = np.mean(np.abs(ypred - ydata))
    print('产物收率实验值' + str(i) + '的平均绝对误差为:', mae)

2024数维杯B题思路+代码+论文

https://mbd.pub/o/bread/ZpWakpdq

https://mbd.pub/o/bread/ZpWakpdq

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1662735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Django 静态文件管理与部署指南

title: Django 静态文件管理与部署指南 date: 2024/5/10 17:38:36 updated: 2024/5/10 17:38:36 categories: 后端开发 tags: WebOptCDN加速DjangoCompressWebpackStaticDeployCICD-ToolsSecStatic 第一章:介绍 Django 静态文件的概念和重要性 在 Web 开发中&a…

【Docker】Docker部署Java程序

Maven中使用打包插件 <build><finalName>duanjian</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass…

一次完整的GC流程

Java堆中内存区分 Java的堆由新生代&#xff08;Young Generation&#xff09;和老年代&#xff08;Old Generation&#xff09;组成。新生代存放新分配的对象&#xff0c;老年代存放长期存在的对象。 新生代&#xff08;Young&#xff09;由年轻区&#xff08;Eden&a…

Blender细节补充

1.饼状菜单&#xff0c;用于快速切换/选择 例如&#xff1a; ~&#xff1a;切换视图 Z&#xff1a;切换着色方式 &#xff0c;&#xff1a;切换坐标系 .&#xff1a;切换基准点 Shift S&#xff1a;吸附 有两种使用方式&#xff1a; -点选 -滑选&#xff0c;按快捷键…

手机一键换ip地址到湖南

怎么把手机ip改成湖南&#xff1f;想要手机一键换ip地址到湖南&#xff0c;可以试试使用虎观代理app&#xff0c;一键操作&#xff0c;简单又方便。你会惊讶地发现&#xff0c;更改手机IP至湖南竟然如此便捷。 选用APP优势&#xff1a; ★IP资源丰富 已经在国内各大省份提供服…

Fastapi+docker+tortoise-orm+celery

因为项目是后期引入celery,所以导致构建docker的时候只有fastapi的项目&#xff0c;celery的重启比较麻烦 1.docker安装celery pip install celery安装celery的时候注意python版本与celery版本的适配&#xff0c;有些celery的版本不支持python的版本&#xff0c;具体的版本请看…

泰迪智能科技携手新乡学院开展“泰迪智能双创工作室”共建交流会

为深化校企合作&#xff0c;实现应用型人才培养目标。5月8日&#xff0c;广东泰迪智能科技股份有限公司河南分公司市场总监张京瑞到访新乡学院数学与统计学院参观交流&#xff0c;数学与统计学院院长赵国喜、副院长皮磊、张秦&#xff0c;教研室主任许寿方、姚广出席本次交流会…

【基础算法总结】二分查找一

二分查找一 1. 二分查找2.在排序数组中查找元素的第一个和最后一个位置3.x 的平方根4.搜索插入位置 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1…

Dependencies:查找项目中dll关联文件是否缺失。

前言 Dependencies工具作为一款优秀的DLL解析工具&#xff0c;能让你很直观地看到DLL的相关信息&#xff0c;如具备哪些功能函数、参数&#xff0c;又比如该DLL基于哪些DLL运行。判断该dll基于哪些dll运行&#xff0c;如果基于的dll丢失&#xff0c;那么就会提示。就能判断缺少…

RobbitMQ基本消息队列的消息接收

1.先给工程引入依赖 父工程有了子工程就不用导了 <!--AMQP依赖&#xff0c;包含RabbitMQ--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 2.配置yml…

前端组件库图片上传时候做自定义裁剪操作

不论是vue还是react项目&#xff0c;我们在使用antd组件库做上传图片的时候&#xff0c;有一个上传图片裁剪的功能&#xff0c;但是这个功能默认是只支持1:1的裁剪操作&#xff0c;如何做到自定义的裁剪操作&#xff1f;比如显示宽高比&#xff1f;是否可以缩放和旋转操作&…

vue 中的 Vuex

Vuex Vuex是什么&#xff1f; 概念&#xff1a;专门在vue中实现集中式状态&#xff08;数据&#xff09;管理的一个Vue插件&#xff0c;对Vue应用中多个组件的共享状态进行集中式的管理(读/写&#xff09;&#xff0c;也是一种组件间通信的方式&#xff0c;且适用于任意组件间…

【二叉树算法题记录】二叉树的所有路径,路径总和——回溯

目录 257. 二叉树的所有路径题目描述题目分析cpp代码 112. 路径总和题目描述题目分析cpp代码 257. 二叉树的所有路径 题目描述 给你一个二叉树的根节点root &#xff0c;按任意顺序&#xff0c;返回所有从根节点到叶子节点的路径。 题目分析 其实从根节点往下走&#xff0c…

C语言/数据结构——(链表的回文结构)

一.前言 今天在牛客网上刷到了一道链表题——链表的回文结构https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa?&#xff0c;巧合的是它的解题思路恰好是我们一起分享过两道链表题的汇总。这两道题分别是反转链表和链表的中间节点。废话不多数&#xff0c…

css 案例 横向滚动渐变

效果 完整代码&#xff1a; <template><view class"content"><view class"tab"><view class"tab-item" v-for"(item,index) in tab" :key"index" click"handlerTab(index)":class"ind…

Spring Cloud Gateway 11种断言工厂

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Spring Cloud Gateway路由匹配是Spring WebFlux基础功能的一部分,在Spri…

项目经理有哪些常见的沟通技巧?

项目经理有哪些常见的沟通技巧&#xff1f; 项目管理的核心之一是沟通。有效的沟通技巧对于确保项目团队成员之间的合作、项目信息的准确传达以及项目目标的顺利实现至关重要。一个号的项目管理工具可以让我们事半功倍&#xff0c;结合项目管理工具zz-plan 来探讨一些项目经理…

STM32F103RCT6#1

实验1 F103基准实验 1.1实验内容&#xff1a;验证以下基本功能&#xff1a;两个LED&#xff08;编号为LED1和LED2&#xff09;每500ms交替闪烁&#xff1b;计算机上的串口助手每秒输出一次字符串。 &#xff08;实验背景&#xff09;启动车辆时&#xff0c;首先将变速箱从驻车…

Baidu Comate 编程插件:提升开发效率的利器

文章目录 引言简介目的 Baidu Comate插件概述定义与功能市场现状竞品分析 安装与配置VsCode 安装&#xff1a;注意事项 版本选择 核心特性详解功能介绍代码生成实时续写错误纠正 使用体验体验地址 引言 简介 基于文心大模型&#xff0c;结合百度积累多年的编程现场大数据和外…

RFID读写头JY-V640在半导体wafer晶圆盒的使用流程

为了最大限度地提高生产效率&#xff0c;新的晶圆工厂和正在翻新升级的晶圆工厂选择采用RFID技术应用在半导体制造业上&#xff0c;通过RFID技术的非接触式采集信息特性&#xff0c;对晶圆盒在生产、存储、运输过程中进行信息追踪和管理&#xff0c;提升半导体制造业的生产效率…