Math 如何从字符串方程解析多项式

Math 如何从字符串方程解析多项式,math,string,Math,String,我想知道,给定字符串n*3/7+9-5,我可以从中得到多项式,作为数组或字符串,例如[4,3/7]。我该怎么做呢 此外,还有一个库允许我将其转换为如下字符串:减(加(除)(乘(n,3),7),9),5),如果有帮助的话 此外,我正在使用Javascript和Objective-C(服务器和客户端),如果这有帮助的话 我曾尝试将每个操作表示为一个对象,并将它们存储在一个数组中,然后按操作顺序对数组进行排序,并对每个操作进行评估,然后使用它,但我真的迷失了方向,无法找到如何使其工作 如果您需要更多信

我想知道,给定字符串
n*3/7+9-5
,我可以从中得到多项式,作为数组或字符串,例如
[4,3/7]
。我该怎么做呢

此外,还有一个库允许我将其转换为如下字符串:
减(加(除)(乘(n,3),7),9),5)
,如果有帮助的话

此外,我正在使用Javascript和Objective-C(服务器和客户端),如果这有帮助的话

我曾尝试将每个操作表示为一个对象,并将它们存储在一个数组中,然后按操作顺序对数组进行排序,并对每个操作进行评估,然后使用它,但我真的迷失了方向,无法找到如何使其工作

如果您需要更多信息,请告诉我

我的问题是,将
n*3/7+9-5
转换为多项式(
[4,3/7]
)的好算法是什么

谢谢,
Ari有两个步骤:解析和区分/简化

有多种方法可以进行解析。您可以使用现有的东西,或者我所做的是一个简单的递归下降解析器。 无论哪种方式,结果都是一个解析树数据结构

为了区分/简化,可以编写相当简单的递归函数

(如果你需要的只是答案,我是你的超级粉丝。)

否则,你可以写这些东西:

Simplifier:它将一个解析树作为输入,并通过应用如下规则生成一个新的解析树:
-任何乘以0的值都是零
-任何东西乘以1就是那东西
-任何加0的东西都是那东西
-任何数值加上/减去任何其他数值都只是一个新的数值
-任何数值乘以/除以任何其他数值都只是一个新的数值

替换:这需要一个解析树a,一个像“n”这样的标记名,和另一个树B,遍历树a,无论“n”出现在哪里,都用B的副本替换它。 结果是a的所有“n”的副本被B的副本替换

例如,要得到表达式的常量部分,可以将“n”替换为零并简化结果。 所有包含“n”的术语都将退出,留下常量

要通过“n”进行区分,可以使用基本规则:
-d(n)=1
-d(不含n的任何东西)=0
-d(a+/-b)=d(a)+/-d(b)
-d(a*b)=bd(a)+ad(b)
-d(a/b)=(bd(a)-ad(b))/(b^2)

因此,总的策略,比如n^2以下的条款,可以是:
-用x代替n^2,用x微分,所得常数q是n^2的因子。
-对于原始表达式,减去qn^2,并对其进行简化。这是新表达式减去n^2项。
-现在用n来区分,得到的常数p是它的因子。
-减去pn并简化,得出最终的相加常数r

您可以通过编写一个简单的计算器来解释解析树,看看它是否正确。 只需在原始公式中插入一个奇怪的n值,看看你得到了什么。 如果你解释(qn^2+pn+r),你应该得到同样的结果

害怕?这比看起来容易,而且是一项很好的技能

编辑:这里是Maxima:

历史:Maxima是Macsyma(MAC符号操作)的后代,始于70年代初的麻省理工学院人工智能实验室,以MacLisp为基础,从Joel Moses的符号整合计划开始。
它能做代数、微分和积分、矩阵和张量数学、微分方程等等。

@World Engineer,我刚刚补充了这个问题。这更清楚吗?不,你以前贴过这个。它被关闭并删除。到目前为止你尝试了什么?@WorldEngineer,好的,添加了这个。请查看此处的标记器:。使用令牌流帮助您进行解析。@AriPorad wait。你在用JavaScript和Objective-C编写101程序?这是什么学校?!一定是史蒂夫·乔布斯的学校之一……谢谢,如果有人用谷歌搜索递归函数和maxima,你能多说一点吗?谢谢,你所说的d()到底是什么意思?@AriPorad:我想你对这两个函数都比较熟悉。例如,要找到n的因子,只需通过n进行区分。