问题标签 [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.

0 投票
2 回答
488 浏览

lisp - 用 maxima 语言编码 vs lisp

我只是想编写一些类似于Mathematica's partition function的函数,并在 maxima 中传递选项,

Usage:listpartitionpad([a,b,c,d,e,f,g],3,3,x); => [[a,b,c],[d,e,f],[g,x,x]]

现在,正如我检查的那样,所有列表操作函数都用 lisp 编码。

我的问题是,我可以用 maxima 语言而不是 lisp 编写任何这样的函数,这很好,否则它会给我一些性能问题或其他我应该知道但我还不知道的东西。我做了一个简单的测试

:lisp(time(loop repeat 1000000))

在另一种基于最大值的方法的情况下,

评估耗时 5.7700 秒(经过 5.7700 秒)

这种差异随着增长呈指数i增长。

这是所有列表操作都用 lisp 编码的原因吗?

0 投票
1 回答
220 浏览

common-lisp - foldl 在 Maxima 中生成绑定堆栈溢出

我写了一个函数,其性能foldl类似于 Maxima 中的 Haskell,

它可以很好地从左侧折叠列表并沿途进行评估,从而防止在缓冲区中积累任何长期未评估的表达式。

我在运行这个时面临的问题,

PROGN [或被调用者] 中的错误:绑定堆栈溢出。

但是如果我将它运行到 96,它会适当地生成结果。我不明白为什么这个简单的加法会导致问题,因为我没有任何无限循环或内存消耗任务正在进行。

0 投票
2 回答
108 浏览

maxima - 千里马:定制拍摄

我无法在 Maxima 中找到任何文档。所以,我尝试编写自己的文档,它给出了元素和它们的位置。只要满足条件,它就会从列表中的任何地方开始。我最终得到了两个有细微差别的函数,

用法 ::takewhile([2,1,2,3,4,5,7,4,1,4,5,2,1,7,8],lambda([x],x>3));

输出 ::[[4,5],[5,6],[7,7],[4,8]]

第二个,

用法 ::takewhile1([2,1,2,3,4,5,7,4,1,4,5,2,1,7,8],\<5);

输出 ::[[2,1],[1,2],[2,3],[3,4],[4,5]]

细微的区别在于使用parse_string创建 lambda 函数而不是应用作为函数参数的 lambda。

Problem:我可以,

takewhile([2,1,2,3,4,5,7,4,1,4,5,2,1,7,8],lambda([x],x^2+3*x>6));

输出 ::[[2,1]]

但是如果我在takewhile1返回时使用它,我不知道如何实现它,

concat: argument must be an atom; found ^2>5

0 投票
2 回答
222 浏览

sage - 我可以在 Sage 中使用符号方程代替吗?

我在 Sage 中使用以下地图:

对于x=0f(x)=1对于x!=0 ,其计算结果为f(x) = 0 ;

在符号结果中,sgn(x)^2sgn(x)^4sgn(x)^8等被视为不相等,即使它们对于x的所有值都是相等的。有没有办法可以替代类似的东西:

对于这些关系的所有出现,以及x的所有符号值?

我可以为每个符号创建一个新的替换规则,例如

等等,但这似乎很难控制。

0 投票
3 回答
5032 浏览

python - sympy中的多元泰勒近似

我的目标是使用 编写多维泰勒近似sympy,其中

  • 使用尽可能多的内置代码,
  • 计算两个变量的给定函数的截断泰勒近似
  • 返回没有Big-O-remainder 项的结果,例如在sin(x)=x - x**3/6 + O(x**4).

这是我到目前为止所尝试的:

方法一

天真地,一个人可以series为每个变量组合两次命令,不幸的是,这不起作用,因为这个例子显示了函数sin(x*cos(y))

方法二

基于这篇文章,我首先写了一个 1D 泰勒近似:

用一维示例检查它工作正常

但是,如果我知道在xand中进行两个扩展的链式调用y,则 sympy 挂断

有人知道如何解决这个问题或以另一种方式实现它吗?

0 投票
1 回答
170 浏览

open-source - 可在 Javascript 中访问的计算机代数系统

有谁知道一个很好的开源 CAS 库,可以在 JavaScript 中轻松访问。它不必非常强大。我正在寻找的核心功能是简化代数表达式。

所有答案都有帮助(抱歉,这是我第一次使用 SO)。

谢谢,迈克尔

0 投票
1 回答
1627 浏览

java - 在 Java 中使用 SymPy(或其他 CAS)

我目前正在用 JavaFX 开发一个接受数学表达式并对其进行评估的项目。我已经设法得到基本的操作和大量的代数工作。我还设法使用梯形规则执行明确的积分。

我面临的主要问题是无限整合。我在网上查找了许多符号计算库,如 JCalculus、JavaCalculus、JScience、SymJa 等。但就功能而言,它们都没有 SymPy 好。我想知道是否有办法从 Java 向 SymPy 发送命令并将结果接收回 Java。

我正在考虑为我的 JavaFX 应用程序提供一个安装程序,如果解决方案需要,它将安装 Python 和 SymPy。我也试图理解 Jython,相信它会以某种方式与问题相关,但我无法理解它的目的和用法。

请帮我。我非常擅长 Java 和 JavaFX,但我对 Python 的了解非常低且受到限制。非常感谢分步说明和示例代码。

提前致谢。

0 投票
2 回答
5000 浏览

python - Sympy:删除多项式中的高阶项

使用 Sympy,假设我们有一个表达式 f,它是符号“x”(以及可能的其他符号)的多项式。

我想知道是否有一种有效的方法可以删除大于某个整数 n 的 f 中的所有项。

作为一个特例,我有一个非常复杂的函数,但我只想在 x 中保持最高 2 阶的术语。这样做的有效方法是什么?

明显的,不是很有效的方法是对于每个小于 n 的 m,取 m 个导数并将 x 设置为 0 以获得 x^m 的系数。我们以这种方式获得每个系数,然后重建多项式。但采取衍生品并不是最有效的事情。

0 投票
1 回答
264 浏览

math - CAS - 二叉树替代方案

有没有一种合理的方法可以在不使用二叉树的情况下制作整个计算机代数系统(代数方程、极限、导数、积分)?

0 投票
1 回答
42 浏览

matlab - 在 Matlab 中执行符号表达式中的规则

我已经在 Matlab 用户社区中问过同样的问题。

我有以下符号表达式:

它存储为符号表达式变量。我想强制执行规则 sij^2 = 1,即变量可以是-1 或+1。如果我在上面提到的表达式中执行规则,表达式将如下所示。

我怎样才能在 Matlab 中做到这一点?