标签: sympy

如何在 sympy 中取矩阵的元素对数?

使用 sympy 矩阵或 sympy 符号的 numpy 数组,如何取元素对数?

例如,如果我有:

m=sympy.Matrix(sympy.symbols('a b c d'))
Run Code Online (Sandbox Code Playgroud)

然后np.abs(m)工作正常,但np.log(m)不起作用(“AttributeError:log”)。

有什么解决办法吗?

python symbolic-math sympy

7
推荐指数
1
解决办法
2404
查看次数

带索引变量的符号求和

我尝试创建一个带有带索引变量的 Sum 的 sympy 表达式,如前面的解释here 但是,我不能对这个表达式进行 Lambdify 并给出一个数组来计算总和。这是不可能的吗?

sum sympy calculus

7
推荐指数
2
解决办法
9717
查看次数

sympy 的高级索引?

使用 numpy,我可以从带有整数列表的数组中选择任意一组项目:

>>> import numpy as np
>>> a = np.array([1,2,3])
>>> a[[0,2]]
array([1, 3])
Run Code Online (Sandbox Code Playgroud)

这似乎不适用于 sympy 矩阵,因为代码:

>>> import sympy as sp
>>> b = sp.Matrix([1,2,3])
>>> b[[0,2]]
Run Code Online (Sandbox Code Playgroud)

结果出现错误消息:

**Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/sympy/matrices/dense.py", line 94, in __getitem__
    return self._mat[a2idx(key)]
  File "/usr/lib/python2.7/dist-packages/sympy/matrices/matrices.py", line 4120, in a2idx
    raise IndexError("Invalid index a[%r]" % (j, ))
IndexError: Invalid index a[[0, 2]]
Run Code Online (Sandbox Code Playgroud)

我的问题是是否有办法在 sympy 中做到这一点?

python numpy sympy

7
推荐指数
1
解决办法
1055
查看次数

如何使用 sympy 求解绝对值方程?

给定方程 |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

7
推荐指数
1
解决办法
3931
查看次数

同情中的递归替换

我有一个需要替换的多个变量的表达式.问题是要替换的一些表达式还包含需要替换的变量实例.

from sympy import *
from sympy.abs import a,b, x,y

expr = a + b
replace = [[a, x+y], [b, 2*a]]

expr.subs(replace) # 2*a + x + y, I want 3*x + 3*y
Run Code Online (Sandbox Code Playgroud)

如果替换列表的顺序正确,它将按顺序应用每个替换,但在我的实际应用程序中,我不知道哪个顺序是合适的:

expr.subs(reversed(replace)) # 3*x + 3*y
Run Code Online (Sandbox Code Playgroud)

我可以通过应用替代n次要么强制替代expr或者replace,但这似乎浪费计算:

result = expr
for _ in replace:
    # Applying n times
    result = result.subs(replace)
Run Code Online (Sandbox Code Playgroud)

我希望有一个recursive选项subs,但这似乎不存在.有更好的选择吗?

python sympy

7
推荐指数
1
解决办法
1365
查看次数

sympy中var和Symbol的区别

这两种方法var和pythonsymbol中的sympy模块有什么区别吗?因为两者的工作方式相同。我用谷歌搜索,我没有找到差异的详细解释。它们真的是完全相同的东西,还是其中一个实际上正在使用另一个或什么?

python symbols var sympy

7
推荐指数
1
解决办法
3440
查看次数

Sympy 允许定义整数符号,但不考虑它们的行为

我有以下一组命令来做一个定积分

n [2]: from sympy import *
init_printing()

x,L = symbols('x, L')
n = symbols('n', integer = True)

exp = sin((n+Rational(1,2))*pi*x/L)**2
integrate(exp, (x,0,L))
Run Code Online (Sandbox Code Playgroud)

这些命令的结果如下所示:

在此处输入图片说明

第一个结果意味着 n=-1/2 这意味着 n 不是整数。如果在如上所示的操作中不考虑它,则为符号提供整数属性有什么意义?如果 n 是整数,我如何强制 sympy 认识到分段结果的第一部分是不可能的?

python sympy

7
推荐指数
1
解决办法
2497
查看次数

矩阵按元素相乘

是否可以从 sympy 库中的 matrix_multiply_elementwise 处理两个以上矩阵?或者还有其他方法可以将两个矩阵按元素相乘吗?

ps 在 numpy 中它很简单,但由于我需要高精度计算,我决定使用 sympy

sympy matrix-multiplication

7
推荐指数
2
解决办法
4949
查看次数

sympy - 符号数量的元素的符号总和

在“sympy”中表达以下内容的最合适方式是什么:

对样本 'x[i]' 的总和,其中 'i' 从具体的 0 到符号的 'N'。'x[i]' 本身应该是象征性的,即总是作为变量出现。

目标是在线性方程组中使用这些表达式。

示例(平凡最小二乘近似):

给定一组样本 (x[i], y[i]),它们应该位于由 'y = m*x + a' 给出的一条线上。即,估计线由“m”和“a”确定。样本和估计线之间的误差可以由下式给出

 error(m, a) = sum((m * x[i] + a - y[i])**2, start_i=0, end_i=N)
Run Code Online (Sandbox Code Playgroud)

现在,在导数 'd/dm error(m,a)' 和 'd/da error(m,a)' 中搜索零转换提供了最小距离。我怎样才能找到 sympy 的解决方案?

linear-equation symbolic-math sympy

7
推荐指数
1
解决办法
3049
查看次数

如何在Sympy中的矩阵运算中组合多项式?

我正在做一些矩阵运算,有时涉及其条目具有恒定值的矩阵。

但是由于某种原因,即使结果很简单,我也无法通过矩阵运算将结果合并为一个多项式。例如,考虑以下因素:

from sympy.matrices import *
import sympy

x= sympy.symbol.symbols('x')

Poly_matrix = sympy.Matrix([[sympy.Poly(x, x)],[sympy.Poly(x, x)]])
constant_matrix = sympy.Matrix([[0,1]])
constant_matrix_poly = constant_matrix.applyfunc(lambda val: sympy.Poly(val, x))

# this doesn't combine them
result1 = constant_matrix * Poly_matrix
print result1
>>>> Matrix([[Poly(0, x, domain='ZZ') + Poly(x, x, domain='ZZ')]])

# even THIS doesn't combine them when I convert the constants to Polynomials 
result = constant_matrix_poly * Poly_matrix
print result
>>>> Matrix([[Poly(0, x, domain='ZZ') + Poly(x, x, domain='ZZ')]])
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试提取表达式并将结果转换为其他多项式时,出现以下错误:

# This is where the trouble starts …
Run Code Online (Sandbox Code Playgroud)

python sympy

7
推荐指数
1
解决办法
177
查看次数