无标题
数据集
参考资料
- 题目自带的参考资料也是一个重要提示, 提示我们该怎么去了解问题背景
- 最好把这些资料快速看一遍, 帮助我们快速了解这个问题
问题1
简述:
已知定日镜尺寸 (6m×6m) 和高度 (4m) 以及位置分布数据,直接计算该定日镜场的
年平均光学效率、年平均输出热功率,以及单位镜面面积年平均输出热功率。
计算太阳位置参数
计算法向直接辐射辐照度
计算定日镜的光学效率
是根据这个公式计算的.
(1)余弦效率
定日镜的余弦损失指由于太阳光入射方向与镜面采光口法线方向不平行引起的接收能量损失,
数值上就是这个es入射光线和nh的点积.
这两个都是已知的, 因为题目中一个重要信息是: 太阳的位置实时控制定日镜的法向,使得太阳中心点发出的光线经定日镜中心反射后指向集热器中心
(2)阴影和遮挡效率 离散化
邻近定日镜若有阴影,则在相邻镜面上的投影为四边形,因此只需求被遮挡部分四个顶点的投影位置就可以确定阴影的位置,形状和面积等信息, 但我们最终没有考虑集热器的阴影
具体过程:
- 类似计算机显示图像的光栅化, 每个离散点代表以该元为中心的一块微元面;
- 将可能遮挡的定日镜顶点投影到A上, 中间涉及到两步线性变换, 第一步得到顶点在地面坐标系的坐标, 第二步
- 通过统计镜面中被阴影和遮挡的点的数量来实现阴影和遮挡效率的计算
- 搜索镜 A 临近定日镜,分别计算阴影和遮挡
数值计算
- 代码实现较为繁琐, 不过思路很清晰
- 尽量分步实现, 模块化, 注意细节, 像我们这里总共有109行, 从170到279,分成5个函数, 我们两个编程手可以进行分工
方法思路来源
- 一篇相关论文
- 计算机光栅化显示方法的启示
(3)大气透射率
(4)集热器截断效率
•集热器是一个有大小限制的圆柱体
•镜面反射出去的光线不一定打在集热器上
•太阳是点光源, 光线并不是同一个方向, 落点最终在集热器上有扩散(这个在一篇参考论文中有提示)
核心思想: 光线追踪
•均匀模拟光锥中的光线
•列出一个约束的方程求解光线落点
•计算反射光线 r 真正打在集热器上的占比
数值计算
- 复杂度较高, 模拟光线的数量乘上镜面离散点的数量再乘镜子数量
- 但是数据规模1700, 不算大, 最终我们开3台电脑4小时左右算出了第一问结果
(5)综合结果
实际上需要我们建模计算的只有余弦效率、阴影遮挡效率和截断效率, 其他的都以公式给出了.
赛前
如何组队
先审视自身情况, 找找自己擅长什么,如果还有一个队友的话, 讨论下你们两个哪些方面可以互补, 还缺少哪些
可以在各种群或校园墙里发布信息,写清楚自己队获自己目前的情况(优势),缺少什么样的队友(劣势). 当然人无完人, 适合自己的队友是最好的队友, 不过能不能遇到最合适的队友也有点运气🍀成分, 但不可否认的是你写的信息越清楚, 找到合适队友的可能性越大.
在赛前可以多交流一下, 互相进一步了解, 因为大部分情况下你们队3人并不是一开始很熟悉, 最适合的就是,有机会拿出往年的一些题讨论一下, 如果有时间的话, 也可以参加一次校赛之类的模拟一下完整的过程.
数学建模培训营, 介绍你觉得比较重要的材料或课程
- 我们参加了暑假20天训练营
- 首先训练营最开始肯定讲数学建模比赛相关信息, 如论文格式
- 训练营最主要的是教给我们一些建模问题的套路方法,比如优化问题, 是数学优化还是组合优化, 一些常用方法;再比如数据分析问题,
- 还有通过训练营学习一些建模工具, 包括matlab 、python库和其他一些工具软件.这些工具不一定都要实践掌握(当然都掌握最好🥺), 我认为重要的是知道有什么工具可用, 真正用到了直接去查资料套用.
- 当然也可以学习相关数学知识。由于课程量大,并且时间紧迫,大家很有可能无法学透每一个知识点。但不用担心,在建模比赛中,你只需找出解题所需的数学知识即可,若某些知识点有遗忘,甚至是知识盲区,都可以通过查找相关资料进行现学现用。
赛中
队伍的特别之处
- 两个负责编程手(计算机专业), 一个负责论文和资料检索
- 建模思路大家共同讨论, 集思广益, 建模是各复杂且具体的问题, 每个人都可以有自己的想法, 有人提出一个小idea,其他人可能提出对这种方法优化的建议.好的模型往往凝聚了每个人思维的精华,一队3个人持有不同的观点反而是好事,这体现了思维的碰撞。
- 两个编程手可以进行再分工, 负责某一个函数的编写, 用于某一步的计算,比如…
查资料
对于我们A题而言,查资料在整个工作过程中可以占三分之一的重要性.
A题都是一个现实的工程问题, 大家看到的第一眼都很陌生, 查资料的过程就是相信互联网、相信前人的智慧、相信自己的学习能力.
查资料的过程同时也是形成建模思路的过程, 看看一些相关的论文或博客已经提出过什么方法.
当然, 赛题肯定是一个具体新颖的问题,几乎不可能有完全契合的文章资料(要不也不用我们写了😆),但是一些资料的方法可以直接启发我们的建模思路, 而且A题是偏向数值计算, 建模问题只是其中一部分, 算出结果也十分重要,所以要尽快确定计算方法, 尝试用代码去实现(因为代码可能有bug还要调试😭)
困难
- 问题一代码bug调试很痛苦, 正常的代码调试是知道运行结果错误, 把它调成输出正确即可. 但数学建模这种问题一个很难受的点是不知道正确答案,只能猜测答案合理的区间.
- 最痛苦的就是之前看着结果很合理但突然在后面的步骤比如问题2复用问题1的代码时发现有不合理的输出了🤔. 就需要逐步检查每一部分.
4.解决途径
- 其实代码只是个工具, 目的是将模型和公式表示成可数值计算的形式, 批量得代入数据.因此,首先检查模型和公式如这个题中的变换矩阵.我们当时解决的第一个错误点就是其中一个变换矩阵角度值搞混了
- 论文最好在决定出最终方法后就先写着, 也算做个记录
总结与教训
- 选题时不要被题吓到, 仔细把3个题都读一下, 讨论一下,可以试着先查下资料(看着比较复杂的题往往资料越多), 对于A题大部分时候是偏物理的, 需要有些物理背景,但这次的A题我感觉, 基础知识上高中物理加上线性代数的知识完全能应付.
- A题的优势在于选的人少不这么卷, 至少我们周围很明显, 更多的同学愿意选B、C题.
- 而且A题普遍比较多变,没有什么固定的套路, 具体问题具体分析, 比较适合临场发挥, 但可能更考察我们基础知识的深度运用, 还有数值计算对代码模拟能力也有一定要求.
- 写代码时最好不要操之过急, 先把模型公式梳理明白, 代码无非就是对模型和公式的翻译罢了.
- 当然如果你们代码调试能力很强的话也可以先搭框架,再根据模型和公式补全 ,把各函数模块化做好调试很方便, 也方便有新idea了进行优化(不过我感觉时间不太允许,至少对于我们来说😭)