如何操纵数学符号 (manipulation in mathematics)

这更像是一个“教育”问题。:)

这更像是一个“教育”问题。:)

虽然,我可能想做这样的事情最终。

假设我有一个方程,可以是任何类型的方程,只要它不荒谬,而且一个擅长数学的人也能解决它。

假设...0 = (x-1) (x + 2)

或...y = (x ^ 2),y = 1 / x

或者正弦函数等等。基本上,像我们在学校一样做数学。

问题是,我将如何编写一个计算机程序来解决这个问题?我知道这是可能的,因为像 Mathematica,Maple 等程序已经这样做了几xx年!但是我找不到任何关于如何制作一个简单的方程求解器的好文档。

我不希望答案告诉我“这正是你如何做到这一点”,因为当然这样的事情是一个完整的大型程序,而不仅仅是一个代码片段。

但只是一个一般的概述,或链接到一些好的文件?这将是伟大的!谢谢:)

尤其是所需的数据结构和算法。

如果做不到这一点,我只需要弄清楚如何求解方程,并进行编码。但这需要几个月的时间才能正确(我以前做过这种事情,将我自己的思维过程形式化为代码,它可以工作,但速度很慢)。

3

看一些关于symbolic manipulation的论文。

Peter Norvig 的PAIP本书介绍了一个非常简单的系统,用于符号操作和求解方程,因此值得一读。它介绍了名为MacSyma的 AI 程序的基础知识,该程序最终构成了Mathematica的基础。

3

Wolfram Alpha将是您最容易获得的基准。

您的输入是字符串,所以第一步是编写一个词法分析器 / 解析器将这些字符串分解为标记,并将它们放入抽象语法树(AST)。

你不会说你想用什么语言来实现这个,但我建议看看ANTLR。它是一个解析器生成器,可以帮助你创建 AST。你必须为你的方程想出一个语法。

一旦你有了 AST,你的求解器将遍历树,并将更具体的操作与“+”,“-”等符号相关联,你可以处理的运算符越多,你的求解器就越强大,包罗万象。

但有很多的复杂性,你必须要么处理或排除:

不是所有的方程都有解。

并非所有的方程都有闭式解。

并非所有的方程都是线性的。

许多有趣的问题由许多耦合方程组成(想想线性代数)。

当封闭形式使您失败时,您需要了解很多有关数值方法的知识。

我建议你从简单的算术和多项式开始,然后继续努力。Stephen Wolfram 一天都没有写 Mathematica。

1

基本技术是在计算机程序中表示数学方程式的结构。这与编译器的想法非常相似,但是编译器通常将其输入转换为机器可读格式,但是计算机代数系统通常会产生与输入相同格式的输出,但是以某种有趣的方式进行了转换。在任何一种情况下,直接输出都是抽象语法树。下一步将是将一些有用的表达式重写技术(类似于常规树)。

如果你想看看这实际上是如何完成的,SymPy 是一个 python 符号数学库,它既是开源的,又恰好专注于该主题的符号操作方面。

0

除了其他人的有用答案:这个链接似乎很有趣:http://en..org/wiki/Pattern_matching同样,“抽象树语法”似乎很有趣。基本上,它是关于在语法树上进行“模式匹配”!

我实际上已经写了我自己的“抽象树语法”:) 所以我已经在通往符号操纵器的道路上走了一点路。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(813)
乌龟只能将可变编号分配给补丁吗 (turtle patch)
上一篇
Hibernate抛出org.hibernate.AnnotationException:没有为实体指定标识符:com..dom
下一篇

相关推荐

  • mathematica 编程:如何使用 Mathematica 来解决复杂的数学问题?

    Mathematica 编程是一种使用 Mathematica 语言来编写程序的过程。Mathematica 是一种功能强大的数学计算软件,它可以帮助科学家、工程师和数学家解决各种复杂的数学问题。…

    2023-05-14 01:43:12
    0 94 95
  • Cool math game:无法动态显示我的蛇游戏的分数

    关于Cool math game的问题,在snake game on cool math中经常遇到,嘿,伙计们,每次蛇成为食物时,我都试图在页面上显示用户得分。我有 div 与类“score”这个 div 被存储为全局const score = document.querySelector('.score');。然后在运行游戏的函数中,我有//increase score points++; score.innerText = points;,它位于测试蛇是否吃了食物的条件内。没有显示吗?…

    2022-12-07 10:16:43
    0 81 67
  • Auto turn:开启 /关闭/自动闪光模式(automathic)

    关于Auto turn的问题,在automathic中经常遇到,我试图在三种方法之间切换以打开 / 关闭和自动拍摄我的相机应用程序中的闪光灯..我会像在谷歌相机应用程序中一样只使用一个按钮进行切换。点击第一次,你关闭,第二次你将打开它,第三次你将在自动拍摄中设置它。我创建了按钮,我做了这个方法来改变图标:…

    2022-12-15 04:04:06
    0 82 72
  • Cscx的不定积分是多少:Mathematica中的定积分与不定积分的区别

    关于Cscx的不定积分是多少的问题,在difference between definite and indefinite integral中经常遇到,我注意到 mathematica 会在某些定积分上 chokes 灭,但是如果我做一个无限积分并减去结果函数的极限值,它很容易给我一个答案。…

    2022-12-07 13:45:13
    0 66 43
  • C喷是啥:是为C或C++

    关于C喷是啥的问题,在c++ math.h中经常遇到,我需要在.cpp(c ++)源文件中使用自然对数函数。现在,当然我可以通过快速的 google 搜索和简单的库解决方案来做到这一点。但我有点困惑...…

    2022-12-15 13:01:04
    0 22 96
  • C位出道表情包:找不到包数学 /位(math bits)

    关于C位出道表情包的问题,在math bits中经常遇到,当我执行测试时,我收到以下错误。这是以前的工作。不知道我需要做什么来修复这个错误。…

    2022-12-19 00:28:49
    0 32 22
  • C4d移动坐标轴:坐标轴的箭头(arrow mathematica)

    关于C4d移动坐标轴的问题,在arrow mathematica中经常遇到,在 Mathematica 中使用命令绘图时如何获取轴的箭头?…

    2022-12-18 10:00:20
    0 70 55
  • 在 Mathematica中提取函数的临界点

    让我们进一步考虑使用的函数f[x]:=x^3要在 Mathematica 中找到此函数的最大值,我们可以使用FindMaximum[f[x],x]/,它显示结果{2.093608796950724*10^313,{x->2.75612*10^104}}。这表明x=2.75612*10^104是f(x)的临界值。…

    2022-11-11 15:20:25
    0 44 93

发表评论

登录 后才能评论

评论列表(5条)