迭代(iteration)是大家再熟悉不过的事物了。
最近一段时间的学习遇到了一类问题,可能是被归入“科学计算”的:希望先设定一个(或多个)变量,并在未赋值的情况下进行运算,同时需要获得赋值前进行运算前的最终符号表达(代数公式、甚至有可能的话也包括图示)。
举个中学数学的例子:设某值为a,然后a+1, a+12, 再减掉1,得到a2+2a,这个时候再把a的值(比如5.6)带进去求得结果。
1 通过定义函数实现晚赋值是一个简单的方法,比如
static double calc(double x){
return 2*x;
}
我如果想迭代多次,要么通过for,要么嵌套函数,比如calc(calc(calc(2)))
。
这类方程有一个特点:返回值(不为空)与自身参数的类型是可以转换成一致的,比如输入int返回double,它一般没有外部效应「只修改输入值代表的变量,不修改其他信息」。
2 化简单数学表达式
一些以科学计算为特色的编程语言及平台已有初步的这类功能,比如Maple,Mathematica。
但这个问题实际上很复杂,请看这个提问https://stackoverflow.com/questions/7027211/can-program-be-used-to-simplify-algebraic-expressions
第二个回答指出这个问题既有数学的部分又有计算机软件的部分,他推荐的这个书「名字就叫“A=B”」也非常有趣http://www.e-booksdirectory.com/details.php?ebook=72
计算机的基础是逻辑门,通过“与非并”来计算数字,进行符号计算要把符号转换成数值信息再处理,这里涉及对代数结构本身的认识、代数结构与(简单逻辑)数值的双向转换。我一度有一个认识误区,就是计算机实现了代数结构与数值的无缝衔接,比如我设计一个class Student,然后Student zhangsan = new Student(23, "CS", 4, false)「这里23代表年龄,CS专业,4代表年级,false代表休学状态」就实现了抽象信息的完美表达和支配,实际上非也。
现在最火的神经网络走的是数值计算而非符号计算的路,但其基础仍然有问题。一开始我意识到计算效率和准确性的基础问题,如王垠所说的拓扑识别问题「2」,后来了解到把识别效果等同于损失函数(loss function)的值然后再把问题焦点转换成如何调节损失函数「1」是偏颇的,因为模式识别中函数本身的构造至关重要,这在传统信号处理中没有明显体现因为信号被当作同质化的东西「说白了没到“信息处理”这一层」,你用基于富利叶变换的美艳软件修图也是看着图修而且重点区域要放大对吧?
回到表达式化简问题上,如果是基本的加减乘除那么以现在计算机的运算能力和模块化/面向对象设计的一些技巧,对某个变量的运算简化对节省运算时间的意义不是很大,但涉及更复杂的数学结构「数列、积分和微分等」则不一样了。
通过「4」这个表格我们看到数学表达分很多中,解析解、数值解不是全部。最近发现一本跟“拓扑识别”有关系的书「5」,这个书的描述是这样的
Until recently, almost all of the interactions between objects in virtual 3D worlds have been based on calculations performed using linear algebra. Linear algebra relies heavily on coordinates, however, which can make many geometric programming tasks very specific and complex-often a lot of effort is required to bring about even modest performance enhancements. Although linear algebra is an efficient way to specify low-level computations, it is not a suitable high-level language for geometric programming.
在计算机图形学领域,已有明确的对突破矩阵等基本简单结构来实现对象化探索的关注。图形不只是用像素表达的简单结构,图像也不是。丘成桐的学生顾险峰研究“共形几何”「6」是非常深奥的一个学问,但归根结底是对图像信息进行先验模型探索的方法,如何选择符号、定义符号对后续计算有决定性作用。
3 对进一步学习的启发
·方程理论尤其是代数几何(algebraic geometry)
·编程语言理论(保持关注)
·信号处理和数学建模中的各种代数、几何模型
参考
「1」丘成桐:工程上取得很大发展 但理论基础仍非常薄弱 http://tech.sina.com.cn/d/i/2017-10-28/doc-ifynhhay6969118.shtml
「2」机器与人类视觉能力的差距 http://www.yinwang.org/blog-cn/2019/09/14/machine-vs-human
http://tech.sina.com.cn/d/i/2017-10-28/doc-ifynhhay6969118.shtml
「3」https://en.wikipedia.org/wiki/Polynomial#Generalizations_of_polynomials
「4」https://en.wikipedia.org/wiki/Closed-form_expression#Analytic_expression
「5」Geometric algebra for computer science : an object-oriented approach to geometry https://www.amazon.com/gp/reader/0123694655#reader_0123694655
「6」顾险峰:机器学习解决不了的医学图像问题,如何用几何方法来攻克?https://cloud.tencent.com/developer/article/1060864