前段时间,有点小忙。结果忙完了数模培训就开始了,然后……摆了,可怜了我一学弟。CUMCM-2021A是永远的痛,当时按照前五年的A题准备的微分方程,然后开题以后直接扑空了。当时甚至没怎么读懂题,也没抓住方向,遂寄。
由于今年的数模培训,我再直面一波自己的翻车历史。但是不管怎么复盘,也不能完全达到初见的状态。这不得不让我有一种“欲买桂花同载酒,终不似,少年游。”的感觉。所以最后我就摆了,然后就一组没交第一次培训,你猜是哪组?
这里引用题目中给的三张插图,其实就可以很简要的概括题目的意图和要求。最开始,从一个球面和抛物面切入,最右边的剖面图给出了一些固定的参数$R=300,F=0.466R,D=500$,即FAST本身是个球面,给出一个坐标,球面的一部分会变成抛物面,这一区域的直径是$300$。之后,这个理论的球面和抛物面肯定不是真实存在的,是若干反射面板拼接近似的。如中图所示。每三个点会确定一个反射面板,结点被称为主索结点。通过调节反射面板的位置,也就是三个主索结点的位置来将球面转成抛物面。但是,如左图所示,有这么几个部件要注意:促动器,下拉索,主索。题目进一步要求,促动器的上下调整幅度为$-0.6$到$0.6$,且下拉索长度不变。主索长度变化不超过$0.07{\%}$。
实际上,如果当时阅读理解够真切,其实就不难,我记得我当时相当错误的理解了$0.07\%$这个条件,我内心加戏加太多了:我以为是每一次迭代(iter)变动不能超过$0.07\%$,稍加思考就会发现这逻辑根本不通。我当时也感觉隐隐不对,结果把自己绕糊涂了。
现在看来,$0.07\%$这个条件其实很直接,他其他的都没说,就是一个简简单单的约束条件罢了。只要和最初的长度比,在这个范围内即可。容易想到这个条件来源于简化后的机械结构,应该是某种应力要求主索不能移动太多。
这个问题还有两个坑点,其中一个是下拉索和促动器并不共线,评阅标准也称之为“不正确的假设”。但现在以上帝视角看,这两个计算结果相差无几。第二个是几乎没被人作出的,即第三问算接收比时要按照曲面三角形处理。
第一问和第二问的前半部分只是简单的代数计算,还不涉及将具体调节纳入考虑中:
注意到附件里其实给了很多坐标,所以直接移用题目所建的坐标系,往往不会出错。注意到第一问是一个完全竖直的抛物面,那么其实可以被归为抛物线来处理。但第二问需要一个旋转后的抛物面。所以我们最好先建立一个抛物面的模型来备用,注意到促动器是可以上下运动的,那么从基准球面到抛物面,就是一部分向下运动,一部分向上运动。所以,跟在二维平面的抛物线类似。我们可以由定义来给出抛物面通式,设抛物面的准平面到基准平面距离为$h$,焦点由图可知,为:$p=\left[ \left( F-R \right) \cos \beta \cos \alpha ,\left( F-R \right) \cos \beta \sin \alpha ,\left( F-R \right) \sin \beta \right] $。
Question-1
如图所示,准平面与轴线的交点$q=\left[ -\left( F+R+h \right) \cos \beta \cos \alpha ,-\left( F+R+h \right) \cos \beta \sin \alpha ,-\left( F+R+h \right) \sin \beta \right] $
一般地,应该采用旋转矩阵的办法,来得到一般的角度时的抛物面,但这里直接暴力美学了。由抛物面上的点到准平面距离相等:
这波,联立解得(手动肯定解不了,直接上mathematica):【实际上这样做,后续编程反而更复杂了,但就当练习了。】
当$\alpha =0°,\beta =90°$时,方程简化为:
(这里的$R$实际上是300.4,应以附件中的坐标为准。这可能是由于反射面板等结构有一定厚度。)
喜提一个单目标优化问题,初见时非常朴素的认为,只需建立一个基于均方误差的优化函数即可,就是想让基准球面尽可能少的移动就能达到抛物面。但现在结合评阅要点来看,还是要检索中文水刊水报的一些信息,实际上有其他的优化函数,这里我们也就还拿基于均方误差的优化函数举例了,因为现在再把多种优化目标下的都作了没有意义,下次也用不到。同时,我们并不需要用曲面来拟合,因为此时是旋转对称的,直接用二维的计算即可。要注意的是,我们要处理的是径向距离:
此时最好的$h=0.3609$,带进去,第一问就是:
至于第二问的理想抛物面,将$\alpha =36.795°,\beta =78.169°,h=0.3609$带进去,就得到了一个复杂的曲面表达式,此时抛物面的顶点坐标容易写出:
Question-2
接下来就是一些dirty work,因为我们截止到现在,都是一个理想的抛物面,现在要把主索结点和反射面板等实际因素考虑进来。观察附件1,2,3:附件1是主索结点的编号和坐标,附件2是促动器上下端点坐标以及相应编号,附件3是所有反射面板的主索结点编号。分析第二问和第三问,在第二问里,我们需要调整促动器上端点,有±0.6的约束;同时需要计算相邻节点调整后的距离是否在0.07%之内,这要求我们要给出结点之间相连的信息,一般地,一个结点会连6个结点,那么需要一个$k \times 6$的类似邻接矩阵一样的表。以及在这一问里并不是所有的结点都要考虑,我们需要从附件中筛选出在此时$\alpha,\beta$下,调整区域内的结点。第三问,计算反射时,一定是按照反射面板为单元考虑的,此时的情况又略有不同,所以我们需要一个DataProcess.m的程序预处理一下:
1 | clear |
然后你看,这样就有了Q2要的数据了。接着我们先进行一波分析,首先我们要探明,促动器下端和上端还有主索结点是不是共线的,如果是,三点间的两两斜率几乎就是一样的。同样,我们还要验证这方向是否是径向的,即分别求取单位向量:
我们验证后发现,三者基本共线且指向球心,误差非常的小。所以现在需得到与理想抛物面的距离,在这里,我们是写出了一个一般形式的曲面,由于下拉索长度不变,我们只需让主索结点上下沿径向移动,求取其到抛物面的交点,可以用参数方程来解:
1 | clear |
然后一波计算,发现:
在我们这一版本下,只有少数主索结点的限制超过了0.6。最大约为-0.7。我们以一种折半的方式来迭代,具体来说:我们遍历每一个结点,如果它的调整范围大于0.6,那么我们先将它约束在0.6(正负),然后直接按此时的0.6调整。调整后检查是否符合0.07%的约束,如果符合就更新此时的距离和结点位置,然后继续遍历。直到收敛。这个的实现并不复杂:
1 | clear |
Question-3
然后我们把迭代后的节点存起来做第三问,因为第三问是摆弄主索结点,所以促动器上下端就已经用不到了。特别地,如果把反射面板当成平面,所求的接收比会很低(基准时0.7%~0.8%,调节后1.1%)……总之,要用曲面三角形来做,也就是我们要考虑三点所成的球面的反射。实际上,它比平面处理时仅多了几步工序,其余别无二致:
左侧是平面时的情况,馈源舱所在的平面会把反射的三棱柱截成一个三角形,曲面三角形时其实是一样的,这里为了方便画了二维的情形。由于反射和圆的性质,$\theta$越大,$F$点越远离圆心,且张角$2\theta$也越大,所以还是会被一个馈源舱所在平面截成平面。所以思路是直接的,遍历每个反射面板,计算每个反射面板所在球面的球心,球心到端点的向量即为端点的法向量,之后计算沿法向量的反射光线,再计算其与馈源舱所在平面的交点,得到投影三角形。我们先解决反射的问题:
借助简单的向量知识,我们即可找出A向量关于B向量的对称向量C向量。
现在我们考虑寻找法向量,我们需确定此时曲面三角形的球心,很容易我们会这么想:给定空间三点,求三点所确定的球心极半径,于是有三点共面,且三点到空间球心距离相等(此时你可能没有考虑半径$R$到底是个什么情况……)然后你列写:
写的一气呵成,然后你会发现$R$取什么好像无所谓,带入数据会发现,计算出的球心坐标跟三个顶点很接近,然后算一下半径发现只有7左右。总觉得哪里不太对。实际上是因为,反射面板充当的是整个大球面($R=300.4$)的一个部分,而这三个点并不完全的在球面上,上述的唯一解并不能指向我们想要的结果。换句话说,对于给定的半径,并非任意三点之间都能满足在球表面上这一条件。但实际上,作为近似,我们可以把$R=300.4$直接带进去,解数值解(vpasolve, solve等),我们会发现对应的球面基本和原点很接近。
然后我们得到了反射光线,有了法向量,由直线的参数方程即可得到被馈源舱所在平面所截的三个坐标点,然后判断其中有多少可以被馈源舱接收。这个判断非常复杂,计算这个比较随机的三角形和圆形的重叠面积有很多种情况,所以:蒙特卡洛!从馈源舱中采点(这样会易于实现且可以复用,如果是在三角形上找点,每次计算出一个新的三角形就要重新生成一次。),然后看看这些点哪些在三角形内,在的数量记为$n_1$,则单个反射面板的接收比为:
然后把每个面板的算出来,加权求和即可。这里有些琐碎的问题,即给定三个点的坐标求三角形面积,以及如何判断点在三角形内。这两个问题简直是给大一的同学应用高数下里的叉乘最好的例子了:
对于三角形面积,我们关注叉乘后的模,即:
这样就能用计算好的馈源舱所在平面上的坐标直接得到三角形面积了,最后至于判断一个点是否在三角形内,方便起见点记作$P$,三角形记作$ABC$,在平面里,在内部就是说,$P,C$在$A,B$同侧,$P,B$在$A,C$同侧,$P,A$在$B,C$同侧,那么我们注意到向量$AP,BP,CP$,以$BP$为例,由右手螺旋定则,当$BA$叉乘$BP$与$BP$叉乘$BC$同向时(同向即叉乘后的三维向量的第三维的符号),说明$P$在角ABC(小于180°)内,如果此时再满足$\overrightarrow{BA}\times \overrightarrow{PA}$与$\overrightarrow{PA}\times \overrightarrow{CA}$同号,说明$P$在角BAC内。由于ABC围成了一个三角形,所以此时$P$一定在三角形内。
1 | clear |
最后我们把上面说的几个环节小心翼翼地拼接起来,就能得到最终结果了。我运行一次模拟得到的结果是:
(更新于第二天:当我hexo d以后,我发现最后的结果多少有点奇怪,之前的工作态接收比只有30%多。于是我发现了一个错误,它甚至不能被称为一个bug,因为只是一个笔误,这个笔误导致了次优的结果。严谨起见这里面的有些插图需要换一下,但是我就懒得换了,毕竟只是自己的一个树洞,不足为外人道也。如果真的有人看到了这个页面:如果你没有复现这个题的需求,那么不影响看热闹;如果你有,你也很容易能看到问题在哪。)
基准球面 | 抛物面工作态 | |
---|---|---|
接收比 | 5.54% | 64.95% |
与评阅要点中的符合的较好。国赛并不对可视化那么看重,所以我就没整什么花活。最后高低意思意思吧作点基本的可视化:
看,我们动态可视化了第二问调整主索结点的过程,可以用来催眠。
我们抽取了相同的入射光线,将光路可视化,发现抛物面状态下效果确实更优。
馈源舱所在平面可视化,直观的体现了汇聚作用。
End
就像西安交大今年本科招生宣传片《怎样才能达到完美毕业生》,有时候我也在脑补要是能魂穿回大一刚入学或者三河二中,就像《开端》以及其他影视作品里的那样,一定有一个听起来很嗨的最优路径。但是后来越想越觉得,就算是真的,其实不会实现。当我说出那些美好的幻想的时候,实际上是对当前遇到的事情或困难的投影,但等我真的一顿时间穿越修正了它的时候,有些我认识里的好或坏的事情会不发生,然后遇到另一个时间线的福祸,然后继续盼望着另一个最优路径,所以,都一样的。
但毕竟开学就大三了,以前的焦虑现在也没得可焦虑了,因为,寄了啊,当时焦虑那是因为感觉得好好把握机会,现在已经积重难返/大局已定。所以突出一个自己的局限性。接受并和解就好。
至少,感谢现代科技和过去以及将来,我现在晚上能沉迷计算机图形学的伟大作品无法自拔,现代快餐的制成品足以让被接受过精神阉割的我乐一天,我列表里还有同学可以骚扰。所以,让脑筋多转转往好处看看~