问题标签 [computer-algebra-systems]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
math - 计算机代数系统简介?
有人知道有关计算机代数系统的一般理论(例如mathematica、sympy)的任何资源(书籍、课程、讲义或任何东西)吗?
“介绍性”材料是首选,但我意识到,对于这样一个专业的主题,任何事情都必然是相当先进的。
computer-algebra-systems - 有没有办法使 Pari/GP 中的小数合理化?
我正在寻找一种在 PARI/GP 计算器 (gp) 中将十进制值转换为分数的自动化方法。比如我想把0.759765625变成389/512。我知道我可以通过输入“759765625/10^9”手动执行此操作,但我想要一种更简单的方法,例如“合理化(0.759765625);” 将在千里马工作。
如果它不能直接做到这一点,也许有一个计算小数位数的功能?然后我可以将该函数的结果提高 10。(该函数必须计算 0 的前导小数位才有用。)
algorithm - 算法得到正弦波的幅度和相位?
我试图找出一种方法来通过算法获得在 Maxima 计算机代数系统中具有正弦项的函数的幅度和相位。这仅适用于稳态(因为 t -> infinity 和瞬态衰减)。例如,一个简单的案例是:
在这种情况下,增益为 1 / w,相位偏移为 theta,我们将忽略瞬态项 exp(-a * t),因为我们只关心稳态增益和相位延迟,而 exp(- a * t) -> 0 作为 t -> 无穷大。我们也会忽略“+ 8”项,因为它只是一个 DC 偏移量。在我的工程课程中,我被教导这样做的方式需要大量的启发式方法和繁琐的方程式重新排列,以使它们以类似于上述的形式得到,其中答案是显而易见的。
考虑到我拥有计算机代数系统的全部功能(以及人们期望 CAS 具有的标准功能),有谁知道找到增益和相位延迟的通用算法方法。 ? 尽管我可能会在 Maxima 中实现它,但我当然会欣赏仅用数学解释的通用答案。
编辑: 我认为从我的示例中可以清楚地看出,我希望得到象征性的答案,就 w 而言。w 应该是欧米茄,代表输入的频率。我真正要问的是,是否有任何标准的数学运算可以产生增益和相位项,而无需进行大量启发式手动方程重新排列。
python - 计算机代数软,以最小化一组多项式中的运算次数
我有多项式系统,相当简单的多项式表达式,但需要很长时间才能优化我的手。表达式被分组在集合中,并且在给定的集合中,在几个变量中有共同的术语。
我想知道是否有一个计算机代数系统,例如 Mathematica、Matlab 或 sympy,它可以用常用项优化多个多项式,以最大限度地减少运算次数。如果这样的系统能够最大限度地减少中间项的数量以减少寄存器的数量,那也是很好的。
如果这样的系统不存在,我将自己做,使用 Python 符号代数 Sympy。如果您正在开发此类软件包或有兴趣开发或使用其中一个,请告诉我。
这是一个虚构的例子
所以你显然可以考虑 (t - qA) 项。现在,如果您使用常用术语的各种组合使术语数量非常大,则很难手动完成。我的方程最多涉及 40 个项,集合的大小约为 20。希望对您有所帮助
谢谢
haskell - Haskell library like SymPy?
I need to manipulate expressions like 1 + sqrt(3) and do basic arithmetic like addition, subtraction, and division. I'd like the result to be in some sort of canonical form so that it can be used as a key in a map. Turning 1 + sqrt(3) into a float is not feasible due to roundoff problems.
I used SymPy for this task in Python. Is there an equivalent native library for Haskell?
clojure - Clojure 的计算机代数
简短版本:我对一些 Clojure 代码感兴趣,它允许我指定 x 的转换(例如排列、旋转),在这种转换下,函数 f(x) 的值是不变的,这样我就可以有效地生成 x 的序列满足 r = f(x)。Clojure 的计算机代数是否有一些发展?对于(一个微不足道的)示例
我可以调用 (preimage f #{0}),它会有效地返回 #{3 4 7}。自然,它也能够正确地注释 codomain。有什么建议么?
更长的版本:我有一个特定的问题让我有兴趣了解有关 Clojure 计算机代数的开发。谁能指出我这样的项目?我的具体问题涉及找到满足 F(x) = r 的所有单词组合,其中 F 是排名函数,ra 是正整数。在我的特殊情况下, f 可以计算为总和
F(x) = f(x[0]) + f(x[1]) + ... f(x[N-1])
此外,我有一组不相交的集合 S = {s_i},使得 f(a)=f(b) for a,b in s, s in S. 所以生成所有 x 的策略使得 F(x) = r 应该依赖于 F 的这种因式分解和每个 s_i 下 f 的不变性。换句话说,我计算了包含 S 元素总和为 r 的站点的所有排列,并将它们与每个 s_i 中元素的所有组合组成。这在以下情况下非常草率地完成:
这完成了工作,但错过了潜在的画面。例如,如果关联操作是乘积而不是总和,我将不得不重写部分。
cryptography - 找出一个数字在 Maple 中的位数
我正在尝试实现生成 RSA 密钥的基本过程。该过程接受一系列数字 a 和 b。它必须检查 a 和 b 之间的间隔是“五位数”。
所以我想出了一个解决方案:
事情是:Maple 似乎将 p 和 q 理解为类型函数的变量。我想使用 log10 来找出素数有多少位,以便计算安全的 RSA 密钥。所以evalb
失败了,因为它无法确定两个对数??
php - 构建计算机代数系统
我正在用 PHP 创建一个 CAS(计算机代数系统),但我现在被卡住了。我正在使用这个网站。
现在我写了一个分词器。它将转换如下方程:
对此:
(其中 group 是另一组令牌)。我怎样才能简化这个方程?是的,我知道你能做什么:添加 X-vars,但它们在子组中。我可以用来处理这些令牌的最佳方法是什么?
scala - Scala 的计算机代数系统 (CAS)
我正在为 scala 寻找一个简单的 CAS 系统。
它应具有以下特点:
- 提供对抽象语法树的访问权限(最好通过案例类以便于匹配)
- 解析
String
为 AST - 简化表达式
如果不存在并且我必须自己写一些基本的东西,那么最好的表示是什么?
我在想这样的事情:
我会实现这里描述的简化算法,这看起来很乏味。(但在简化代数表达式时,也许乏味是不可避免的?)
对这个特定实现的一些批评是:
- 我将在
simplify
所有地方递归调用案例类的参数(似乎它可以以某种方式集中) - 处理 varargs /
List
参数似乎会变得Add
混乱Mutliply