有没有人知道有关计算机代数系统一般理论的任何资源(书籍,课程,讲义或任何内容)(例如mathematica,sympy)?
"介绍性"材料是首选,但我意识到,对于这样一个专门的主题,任何东西都必定相当先进.
math symbolic-math computer-algebra-systems symbolic-computation
我需要操作像1 + sqrt(3)这样的表达式,并进行加法,减法和除法等基本算法.我希望结果是某种规范形式,以便它可以用作地图中的键.由于舍入问题,将1 + sqrt(3)转换为浮点是不可行的.
我在Python中使用SymPy来完成这项任务.Haskell有一个等效的本机库吗?
我正在寻找一个能够在大型有限域上进行精确计算的库,例如GF(2 128)/ 2 128和GF(2 256)/ 2 256.我列出了我需要的功能以及下面很酷的功能.显然,图书馆应尽可能快:-).啊,因为我不是C++主人(可能大多数库是C++),所以示例代码生成一个随机元素/一个常量并将其乘以它的乘法逆
x^(-1)
c++ math linear-algebra computer-algebra-systems finite-field
网上有很多代数求解器和简化器(例如,algebra.com上的正确代数).但是,我正在寻找一些可以插入C#的东西,作为一个更大的项目的一部分(我正在制作我自己的计算器,但显然我会请求许可等).
理想情况下,我使用的代码如下:
String s = MathLib.Simplify("5x*(500/x^2*(sqrt(3)/4)+1)+2x^2+(sqrt(3)/2)*x^2");
Run Code Online (Sandbox Code Playgroud)
并且's'将简化为: "1082.532/x+5*x+2.866*x^2"
(那里的3dp准确性,但如果需要可以改变).
解决特定变量也会很好.我需要一些轻量级和快速的东西(如上所述的计算最好在5ms左右,包括启动延迟).
经过一些研究,像Sage,Octave或Mathematica这样的程序可能有点过分(我的应用程序可能只是一个小的<200k exe).Dotnumerics.com或Mathdotnet.com可能是合适的,但前者似乎没有提到代数简化,后者缺乏文档和示例是关闭的.我想知道是否有任何合适的替代方案.可在此处找到大型列表:http: //en.wikipedia.org/wiki/Comparison_of_computer_algebra_systems
简短版本:我对一些Clojure代码很感兴趣,它允许我指定x的变换(例如置换,旋转),在该变换下函数f(x)的值是不变的,这样我就可以有效地生成x的序列满足r = f(x).Clojure的计算机代数有一些发展吗?对于(一个微不足道的)例子
(defn #^{:domain #{3 4 7}
:range #{0,1,2}
:invariance-group :full}
f [x] (- x x))
Run Code Online (Sandbox Code Playgroud)
我可以打电话(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)表示a,b表示s,s表示S.所以生成所有x的策略使得F(x)= r应该依赖于F的这种因式分解和每个s_i下f的不变性.换句话说,我计算包含S元素的站点的所有排列,这些元素总和为r,并用每个s_i中元素的所有组合组成它们.以下内容非常简单:
(use 'clojure.contrib.combinatorics)
(use 'clojure.contrib.seq-utils)
(defn expand-counter [c]
(flatten (for [m c] (let [x (m 0) y (m 1)] (repeat y x)))))
(defn partition-by-rank-sum [A N f r]
(let [M (group-by f A)
image-A (set (keys M))
;integer-partition computes restricted integer partitions,
;returning a multiset …
Run Code Online (Sandbox Code Playgroud) 我正在用PHP创建一个CAS(计算机代数系统),但我现在卡住了.我正在使用这个网站.
现在我写了一个tokenizer.它将转换如下的等式:
1+2x-3*(4-5*(3x))
Run Code Online (Sandbox Code Playgroud)
对此:
NUMBER PLUS_OPERATOR NUMBER VAR[X] MINUS_OPERATOR NUMBER MULTIPLY_OPERATOR GROUP
Run Code Online (Sandbox Code Playgroud)
(其中group是另一组令牌).我该如何简化这个等式?是的,我知道你能做什么:添加X-vars,但它们在子组中.我可以用来处理这些令牌的最佳方法是什么?
同情我有一个积分返回一个Piecewise对象,例如
In [2]: from sympy.abc import x,y,z
In [3]: test = exp(-x**2/z**2)
In [4]: itest = integrate(test,(x,0,oo))
In [5]: itest
Out[5]:
? ___
? ?? ? ?z ? ? 1 ?? ?
? ??????? for ?periodic_argument???????????????, ??? ? ?
? 2 ? ? 2 ?? 2
? ? ?polar_lift (z) ??
?
??
??
?? 2
?? -x
?? ???
?? 2
?? z
?? ? dx otherwise
??
?0
?
Run Code Online (Sandbox Code Playgroud)
我想提取这个分段方程的第一个分支,换句话说,我希望能够做一些itest.parts(0)
简单的提取sqrt(pi)*z/2
.我似乎无法找到任何方法来做到这一点,但也许我在文档中使用了错误的搜索词.有任何想法吗?
编辑
稍微探讨一下,我已经设法发现,如果我这样做,itest.args[0][0]
我可以提取这个表达式.然而,这看起来有点像黑客.有更好的方法吗?
python symbolic-math sympy computer-algebra-systems symbolic-computation
我按照以下方式将列表转换为Maxima中的矩阵:
DataL : [ [1,2], [2,4], [3,6], [4,8] ];
DataM: apply('matrix,DataL);
Run Code Online (Sandbox Code Playgroud)
怎么用其他方式呢?如何将给定矩阵DataM转换为DataL列表?
在我的研究小组中,我们有不同的人在不同的符号工具中进行代数建模,例如Matlab中的Symbolic Toolbox和Python中的Sympy.然后,这些模型通常导出为C代码并复制粘贴到我们自己的基于符号C++的工具中,以进一步进行符号操作.
在寻找这种难以维护的方法的替代方案时,我发现了两种看起来或多或少标准化的格式:OpenMath和"Content MathML".请注意,我们只对语义感兴趣,没有漂亮的打印.
这两种格式之间有什么关系?两者都可以用来存储和交换工具之间的数学表达式吗?
是否还有其他或多或少标准化的数学表达式交换格式?
给定方程 |x - 5| + |y| = 5,如何使用 SymPy 解决它?
如果我使用solve()和Abs()的组合,它会给我这个错误
当参数不是实数或虚数时求解 Abs(x - 5)
但是,在会议开始时我写下了
x, y, z = symbols('x, y, z', RealNumber = True)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
谢谢!
python equation sympy computer-algebra-systems equation-solving