求用编程化简一个数学表达式
求用编程化简一个数学表达式,尽量用自己的算法而不是借用各种科学计算的库。
表达式为 1+3*4/(x+1)^2/2-3
公式扫描后得到的符号数组为:[1,’+’,3,’*’,4,’/’,'(‘,’x’,’+’,1,’)’,’^’,2,’/’,2,’-‘,3]
要求化简结果为-2+6/(x+1)^2,-2 在分式前或后都没关系
各位大佬有什么好的现成的算法吗?我感觉这里最重要的是要建立合适的模型,但是不知道自己做得靠不靠谱。
求用编程化简一个数学表达式,尽量用自己的算法而不是借用各种科学计算的库。
表达式为 1+3*4/(x+1)^2/2-3
公式扫描后得到的符号数组为:[1,’+’,3,’*’,4,’/’,'(‘,’x’,’+’,1,’)’,’^’,2,’/’,2,’-‘,3]
要求化简结果为-2+6/(x+1)^2,-2 在分式前或后都没关系
各位大佬有什么好的现成的算法吗?我感觉这里最重要的是要建立合适的模型,但是不知道自己做得靠不靠谱。
那么可以构建一个函数 (e1,e2)-> f(e1)==f(e2)。即输入两个表达式,输出这两个表达式是否外延全等。这个函数是不存在的,所以函数 f 也是不存在的。
这个问题太大了,我可以给一个关键字 HoTT
https://github.com/HoTT/HoTT
我现在就是在不看 SymPy 的情况下尝试做这个事。
我今天想的办法是,对于主符号数组,先扫描^号,把所有幂运算的部分替换成 PowerModel 实例,然后按顺序扫描*号和 /号,把所有乘法除法运算的部分替换成 DivideModel 实例(它包含分子数组和分母数组),然后扫描+号和-号,跳过所有对于 PowerModel 或 DivideModel 或者含 x 的元素的计算,化简主符号数组。最后把在主符号数组里的各个 PowerModel 实例和 DivideModel 实例展开出来。
示意图 
目前我的脚本对括号内的表达式的化简程度还很低……遇到很多没想到的问题