昨天表达完线性代数和数学分析的意义的观点之后,突然想到也许“矩阵代数”比“线性代数”更合适,理由是矩阵是一个数据结构(mathematical object)也可以是非线性的,但非线性矩阵/向量的复杂度以及与日常经验的距离都远远大于目前我们勉强学才初步掌握的“线性(矩阵)代数”。
非线性空间在日常生活中有很多体现,一些简单的例子就是指数和几何增长:90%、99%问题:一个项目花一定的时间解决90%的问题,然后要花同样的时间才能再解决9%的问题达到99%;登山,越往后体力消耗越快。
指数增长和集合增长还是基于欧几里德/线性空间的,如果离开欧几里德空间进入其他空间比如双曲空间(黎曼几何),算法和数据结构会发生什么样的变化呢?
原来,双曲空间已经用于数学建模、机器学习了,参考[1]-[3],暂时还无力细看,但有一点非常清晰就是双曲空间的应用在“度量”方面有很大不同也有独特意义。量子力学里的能量跃迁可以类比成“等量度”但(线性)数量不同的距离——0到90%和90%-99%等量度但数量不同。
庞加来圆盘就是这个特征的体现
这个图里所有的圆都是(在双曲空间里)“一样大的”,更好看也更有名的“鱼图”见此链接:
https://archive.bridgesmathart.org/2019/bridges2019-211.pdf
由此我设想了一个看似简单的编程练习:用简单函数的迭代(1×0.9或者1×(1/exp(kx)-1)之类的,总之数值依次有序下降,但保持自定义的“比值”)作为圆的直径,输入n作为绘图空间(也是圆)任意直径经过所能穿过圆的最大数量:比如n=10则一开始绘图空间中心有一个圆(也是最大的圆)然后围着这个圆有一圈小圆,围着第一组(1个)和第二组(m个)再堆砌一圈更小的圆,直到整个空间填满。
给自己出完题之后的思路是:重点在于如何一层层累加,实现难点是判断哪里能加、是否相交。。。二十分钟之后发现问题比想的复杂很多,原来这是装箱问题——最优化问题/近似算法的一种。[6][7]
抛开圆直径要有序下降不谈,光同样的圆在特定空间内怎么堆积最多就有不同解法,一个类似问题是:如何生成多个互不重叠的不同半径圆?[4] 这背后是有复杂算法的,比如[5]。
爱因斯坦说道:我们不能用创造问题的思维方式去思考解决方法。「We can't solve problems by using the same kind of thinking we used when we created them」
希望这个自出题能早日得到解决,学习来日方长。
ps: 几何学与计算机的关系比我之前想的密切,不只是图形相关,几何模型直接影响到代数计算的方式——比如传统神经网络在欧式空间,后来人们探索其他空间的构造法。然而基础教育阶段几何学 初中集中在平面几何的综合法(synthetic method,定理+辅助线),高中解析法多了一些(analytic method,通过坐标系计算某个点的位置),介于二者之间的向量法反而在物理学中横空出世而且这三种方法没有充分衔接和补充。
计算机所需要的数学方法可以从几何学角度说是三种方法都非常需要,由此可见要补的不只是特定知识和与之结合的代码实现方法,正如@Colin_Downey 所说“或许一开始就写出好的实现代码得有数学物理研究者和优秀的程序员合作才”https://0xffff.one/d/531/3。
参考
[1] 双曲空间中的神经网络图表示学习 http://kns.cnki.net/kcms/detail/detail.aspx?filename=1019847518.nh&dbcode=CMFD&dbname=CMFDTEMP&v=
[2] 学术前沿——双曲空间中的网络、单词及其知识图谱 https://swarma.org/?p=11059
[3] Hyperbolic Neural Networks https://arxiv.org/abs/1805.09112
[4] 如何生成多个互不重叠的不同半径圆?https://www.zhihu.com/question/53012468
[5] A circle packing algorithm https://www.sciencedirect.com/science/article/pii/S0925772102000998
[6] https://en.wikipedia.org/wiki/Packing_problems
[7] https://en.wikipedia.org/wiki/Circle_packing