问题标签 [symbolic-computation]

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 投票
1 回答
954 浏览

sympy - Sympy 符号和 cls 参数

我见过 f = sympy.symbols('f', cls=Function) 但没有任何文档。Python 不喜欢 x = sympy.symbols('x', cls=FF(8)),它抱怨

raise CoercionFailed("期望一个整数,得到 %s" % a) CoercionFailed: 期望一个整数,得到 x

cls 参数的目的是什么?我必须做什么才能使 cls=FF(8) 表示完整?

使用 x = sympy.symbols('x', cls=FF(8)) 我希望 x 成为 FF(8) 字段中的符号,即 x^(2^8-1) 必须给我 1。

0 投票
2 回答
3871 浏览

python - SymPy,使用已知模式或子表达式的简化/替换

我有以下表达式:

可以简化:

给定子表达式:

目前我手动替换bjcj在简化u0表达式中得到:

是否可以使用 SymPy 来实现这一点,避免手动替换?

0 投票
0 回答
432 浏览

matlab - OOP:操作后对象类的更改 - 不再按需要进行操作

我是面向对象编程的新手。经过一番压力,我终于设法在matlab的符号引擎muPad中定义了我自己的对象类。该引擎有自己的语言,其语法非常合乎逻辑,与matlab本身相似。

我想指出,没有必要知道 muPad 来帮助解决这个问题。我认为任何具有相关 OOP 经验的人都能够提供对该问题的更多见解。

我将从一些背景开始。我的班级叫Bx。它的对象有两个不同的属性,nk,使得n => k => 0。在 "Bx" 中正确定义的对象可能看起来像 Bx(0, 0),或 Bx(2, 2) 或 Bx(7 , 2)... "Bx" 中的每个对象都是唯一的;如果n1 = n2并且k1 = k2这意味着 Bx( n1 , k1 ) = Bx( n2 , k2 )。

请注意,muPad 有一个名为“DOM_EXPR”的内置表达式类,它是子类型“_mult”、“_plus”等的超类。例如,a + b 将是“_plus”类型,a * b 将是“_mult”类型“ ETC。

我在课堂上定义的运算之一是乘法。规则如下:

这现在在我的代码中完美运行,只要被相乘的两个对象之一属于“Bx”类。例如:

问题出现如下。每当我将“Bx”类的两个对象相乘时,输出将属于不同的类,称为“DOM_EXPR”,类型为“_mult”。上面的输出就是一个很好的例子。这是有道理的;3/5*Bx(6, 3) 是一个表达式,由“DOM_RAT”和“Bx”类的对象组成,(4*y)/7*Bx(10, 5) 由“DOM_RAT”、“DOM_IDENT”组成”和“Bx”。

如果我将这样的表达式与纯“Bx”相乘,例如:

然后我得到输出: (10*Bx(9, 7))/3 正如预期的那样。这是因为在“Bx”类的 _mult 操作定义中,我已经定义了“Bx”对象与“_mult”类型“DOM_EXPR”对象相乘时的行为方式。

但是,有时可能会出现两个“Bx”对象都作为“DOM_EXPR”对象的一部分出现的情况。下面的一个例子:

现在输出看起来像: (3*Bx(4, 3))*(6*Bx(5, 4))

这不是我想要的。我希望 muPad 进一步评估这个表达式。如果我将参数的所有操作数与现有代码相乘,我会得到:

这是正确的,也是我希望 muPad 在上面将 a 和 b 相乘时做的事情。

对于如何纠正我的代码以使其行为正确的任何见解,我将非常感激。我不一定要寻找语法,但也许更多的是您,一个经验丰富的 OOP 程序员,可能如何实现我正在尝试做的事情,以及它与我正在做的事情有何不同。一旦我了解了我的方法有什么问题以及如何改进它,我就可以自己弄清楚语法。

我在下面粘贴了完整的 muPad 代码。您可以在 matlab 中运行它,只需在命令窗口中键入 mupadwelcome,打开一个新的 mupad 笔记本并将各个代码块粘贴到新行中。

编辑:有趣的是,如果我没有定义自己的 _mult 和 _power 方法,那么当两个包含“Bx”的 mult 对象相乘时,muPad 似乎会做我想做的事,但显然实际的“Bx”乘法除外,见下图。

mupad 截图

0 投票
0 回答
250 浏览

recursion - 真实系统/程序中的递归定义示例

我正在开发一个求解器来解决递归约束。求解器的工作原理就是这样,例如给定一个递归定义为的序列a(n) = a(n-1)*2 + 2。然后求解器将找到表示a(n)基于的确切公式n。您可以在 wolfram alpha 中查看此示例以获得更多理解

在编程中。计算序列的程序是这样的:

然后通过使用我们的求解器,我可以表示a[n]并将n这个特征添加到约束中。但是,我正在寻找现实世界的例子,其中包括像这样的递归序列或线性递归关系。你知道任何可以作为我的测试台的代码吗?

0 投票
1 回答
567 浏览

python - 使用非交换符号时 Sympy 中的最大递归深度误差

我有一些大表达式,它们的符号带有属性is_commutative=False

这是一个例子:

如果我尝试这样做f.simplify()会引发错误:

我已经尝试过 "gotcha" sys.setrecursionlimit,但在这种情况下它没有帮助。

有帮助的是设置commutative=Truesympy.var(无需将其设置Truesin,cosexp

由于这些表达式来自先前的过程,因此我有以下解决方法:

然后get_new_f(f).simplify()工作!

有没有另一种方法来克服这个错误?

0 投票
1 回答
456 浏览

python - 是否有一种解决方法可以避免 SymPy 挂起高阶三角被积函数?

我在 SymPy 0.7.3 中尝试了以下积分:

我已经尝试过不使用conds参数,并且在没有成功integer=True声明时不使用。i, k

有没有其他解决方法来解决这个积分?

这个积分的解是0.

注意:如果有人感兴趣,SymPy 还会挂起其他类似的被积函数。我注意到当沿集成的简化导致0术语时,SymPy 的趋势是挂起,所以问题可能出在沿集成应用的简化算法中。

0 投票
2 回答
253 浏览

c++ - 重载三元 ?: 运算符,或在包含的文件中更改为 if{}else{}

研究项目在这里。在我的 C++ 库中,我包含 C 文件:

我通过重载(几乎)所有运算符来象征性地执行它。

我必须能够检测(condition) ? this : that和提取condition,thisthat在我的符号执行库中使用。但是,SO 1SO 2SO 3等已经帮助我意识到?:不能超载。

  • 有什么办法让我强行超载?:吗?
  • 我可以?:在不实际更改文件的情况下将包含的 C 文件中的所有语句更改为 ifelse 语句吗?
0 投票
1 回答
1203 浏览

matlab - Matlab:用插值函数求解线性方程的符号系统

我一直在尝试求解一个线性方程组,其中一些变量是其他变量的插值函数。我尝试将这些函数转换为符号函数,但这似乎不起作用。有没有人有不涉及曲线拟合数据的解决方法?我真的很想保留我的原始数据集以确保准确性。我的数据集太大,无法在此代码示例中放入真实的数据集,因此我提供了 [0 100]、[100 0]、[0 100;0 100] 的占位符数据集。

这是我的代码:

0 投票
1 回答
492 浏览

matlab - MATLAB:(Good Ol')MuPAD 命令中的错误

我知道以前有人问过很多这样的问题,但我看到的案例更复杂(即我不明白),答案似乎只与具体案例有关。

我的案例非常简单(因此广泛适用),取自 MATLAB 自己的帮助页面

输出应该如下:

但相反,我收到此错误消息。怎么来的?我该如何解决?谢谢。

0 投票
4 回答
222 浏览

matlab - 检查符号计算

我必须做一些计算,其中长公式,主要涉及具有可变系数的多项式的导数。

不幸的是,我从 Mathematica 或 Maple 等引擎获得的结果的表示方式与我需要的非常不同,并且将结果重新排列为所需的形式需要很长时间(更不用说重新引入错误的风险)。

因此,我想知道是否有某种方法可以代替自己进行计算,然后检查结果——即某种“方程式检查器”:

我输入了 d/dx f(x) = g(x) ,其中我提供了双方,系统评估这是对还是错。