algorithm - Wolfram Alpha 或 Mathematica 等系统如何求解方程?

标签 algorithm wolfram-mathematica artificial-intelligence algebra

我正在构建一种基于网络的编程语言,部分灵感来自 Prolog 和 Haskell(别笑)。

它已经具有相当多的功能,您可以在 http://www.lastcalc.com/ 查看原型(prototype).可以看源here并阅读架构 here .请记住这是一个原型(prototype)。

目前 LastCalc 无法简化表达式或求解方程。我不想在 Java 中对此进行硬编码,而是想增强基本语言,以便可以扩展它以仅使用语言本身(与 Prolog 一样)来完成这些事情。与Prolog不同,LastCalc有更强大的搜索算法,Prolog是“带回溯的深度优先搜索”,LastCalc目前使用的是启发式最佳优先搜索。

在深入研究之前,我想更多地了解其他系统如何解决这个问题,尤其是 Mathematica/Wolfram Alpha。

我假设这个想法,至少在一般情况下,是你给系统一堆规则来处理方​​程(比如 a*(b+c) = a*b + a+c) 指定目标(例如隔离变量 x),然后放开它。

所以,我的问题是:

  • 我的假设是否正确?
  • 应用规则的搜索策略是什么?例如。深度优先,广度优先,深度优先迭代加深,某种最佳优先?
  • 如果是“最佳优先”,使用什么试探法来确定特定规则应用是否可能使我们更接近我们的目标?

我也很感激任何其他建议(“放弃”除外 - 我经常忽略这条建议,这样做对我很有帮助;)。

最佳答案

我前段时间自己处理过这样的问题。然后我找到了this document关于表达式的简化。它的标题是基于规则的表达式简化,显示了有关 Mupad 中简化的一些细节,后来成为 Matlab 的一部分。

根据这份文件,您的假设是正确的。有一套用于操作表达式的规则。启发式质量指标用作简化的目标函数。

关于algorithm - Wolfram Alpha 或 Mathematica 等系统如何求解方程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18727737/

相关文章:

wolfram-mathematica - 为什么这个表达式替换不起作用?

algorithm - 基于运动的人体检测

c# - 从大小为 n 的 r 个元素生成幂多重集

wolfram-mathematica - 在Mathematica中,一个choropleth贴图的最小示例是什么样的?

algorithm - 计算列表中的对

excel - 分析循环测试数据的最佳程序

c# - 用人工智能识别条形码

algorithm - 为自动索具找到重量绘画公式的因素

c++ - 动态(即可变大小)分域树?

算法动态规划