计算机数学公式的立体结构运算算法
2018-03-22周超
周超
摘 要 在数学的学习研究,以及一切用到数学的地方,数学公式是无法离开的东西,数学公式使抽象的数学具体化成为了一种人类可以理解并交流的语言。然而在数学发展的几千年中,参与者只有人类自己,自然而然的数学公式的发展也是向着符合人类思考方式的方向发展。本文结合计算机技术对数学公式的立体结构进行了研究。
【关键词】数学公式 计算机 立体结构
1 结构概述
在数学的学习研究,以及一切用到数学的地方,数学公式是无法离开的东西,数学公式使抽象的数学具体化成为了一种人类可以理解并交流的语言。
然而在数学发展的几千年中,参与者只有人类自己,自然而然的数学公式的发展也是向着符合人类思考方式的方向发展。
现在随着计算机的发展,数学的研究已经不止人类一个参与者,从几十年前数学就已经离不开“计算机”这个强有力的参与者,然而这几十年中计算机的参与过程一直强行使用人类的数学语言,导致处理过程较为复杂。
现在使用的主要数学公式由阿拉伯数字,英文字母,希腊字母,以及一些专用符号组成,其结构为线性的字符组合。
我所构建的结构其组成元素与传统数学公式没有太大不同,其区别主要在于结构上是立体的树形图,而不是线性结构(数组)。这样做的优点是式使公式更加接近数学本身,举例来说:
如图1所示,(a+b)*(a-b)在传统的表现形式中是这个样子,其数学含义是两个部分相乘,但是从公式来看他是一串没有本质差别的信息,人类可以方便的通过*将其分割成两部分并且明白两部分间的关系,然而计算机处理就需要强行模仿人类的这一过程,找到“*”并且将其分割为两部分。如果再加上“+”,“-”括弧等处理起来将会十分麻烦,而在我的结构中这个公式是一棵树,首先是分为(a+b)与(a-b)这两部分,(a+b)又分为a,b两部分(a-b)同理。
通过这种结构能够节省计算机资源,开发人员在开发相关程序时也能更加轻松,简单。当然,因为进行各种工作的过程中离不开人的参与,所以必然会牵扯到传统类型公式的处理,采用我的结构后这种处理只需要进行一次,既将字符串转化为立体公式的过程,这一过程可以采用统一的封装起来的方法,开发人员需要操作的只有适合计算机处理的立体结构了。
2 立体结构公式详解
首先,我们需要了解运算符,我将运算符分为两种,第一种:表示数据关系的关系类型,即四则运算与括弧。第二种:对单个数据进行处理的操作类型,如乘方运算,三角函数运算等。对于第二種又分为两类,有操作数的:如乘方运算,无操作数的:如三角函数运算。
构建立体结构公式的第一步是根据关系类型运算符建立主要框架:
关系类型运算符所代表的关系并不是数据之间的关系而是与整个公式的关系,如“a+b”中的“+”并不是说“a”与“b”之间的关系是加,是指“b”与公式的关系是公式整体加上了“b”,“a”前其实隐含一个加号也就是“+a+b”,“a*b”也是如此。
乘除运算的优先级高于加减运算,也就是说乘除符号代表的是更加细致的数学结构,如“a+b*a”这个公式中‘*表示的是“a”与“b*a”这部分的关系,而‘+表示的是“b*a”与整个公式的关系。建立框架的第一步自然是要首先分析更宏观的部分即加减运算,首先分析加减号(同级括弧外),在这个例子中存在两个加号,第一级也就是由两个加号分割而来的两部分这样也就形成了+a这个叶子与+(b*a)这棵子树,图2‘*又将(b*a)分割为*b与*a两个叶子图3。那么整体的结构也就构建完成图4。
考虑括号后构建会稍微复杂一些,括号会独立成为一棵子树并使其中的节点深度加一,因此在构建框架时要注意区分分隔符是否在同级括号内,如a+b+c图5a+b+(c)图6a+(b+c)图7。
每一个叶子都含有两部分信息,即运算符与基本元素,而子树节点上的内容只有运算符本身,其他信息包含在其孩子内。
构建立体结构公式的第二步是根据操作类型运算符完善结构:
操作类型运算符所操作内容必定是一个叶子或一棵子树,因为一棵子树中可以只包含一个叶子,所以为了方便默认操作类型运算符所操作内容是一棵子树。如“a+sin23”图8“a+sin(20+a)”图8。
对于有操作数的操作类型运算符,操作数与操作内容类似为一棵子树,然而操作数只是运算符的一个属性所以不能算作主要树的一部分,因此结构需上升到的三维结构如“a+b^(b+20)”其中包含两棵树图10、图11,相互关系为包含关系,但并不是树与子树的关系,而是通过一个运算符建立的间接的包含关系图12。
自此已经可以完整的构建比较复杂的数学公式如“a+b+(sin(x^2)-(z/b)+ab)”图13。
注:“节点”“树”等相关名词为“数据结构”相关内容
作者单位
青岛理工大学(临沂) 山东省临沂市 273400