标签: sympy

Sympy plot:传递符号表达式列表

我有一些未知数量的符号表达用sympy创建.

例如:

f1 = x
f2 = exp(x)
...
fn = ...
Run Code Online (Sandbox Code Playgroud)

由于它是一个未知数量,我不能简单地做:plot(f1, f2, f3),所以我想传递一个符号表达式列表.我无法弄明白该怎么做?

python sympy

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

symPy中的inv()没有返回正确的值

我有一个MutableDenseMatrix , Q. theta1并且theta2属于SymPy类型symbol.

In[12]:  Q
Out[12]: [cos(theta1), -sin(theta1), 0,   0]
         [sin(theta1),  cos(theta1), 0,   0]
         [          0,            0, 1, 980]
         [          0,            0, 0,   1]
Run Code Online (Sandbox Code Playgroud)

当我打电话给逆时,我得到:

In[13]:  Q_inv=Q.inv()
Out[13]: [-sin(theta1)**2/cos(theta1) + 1/cos(theta1), sin(theta1), 0,    0]
         [                               -sin(theta1), cos(theta1), 0,    0]
         [                                          0,           0, 1, -980]
         [                                          0,           0, 0,    1]
Run Code Online (Sandbox Code Playgroud)

当我应该得到的是:

Out[X]:  [cos(theta1),  sin(theta1),  0,    0]
         [-sin(theta1),  cos(theta1), 0,    0]
         [          0,            0,  1, -980]
         [          0,            0,  0,    1]
Run Code Online (Sandbox Code Playgroud)

关于这里可能出现什么问题的任何想法?

python matrix sympy

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

声明一个 SymPy 符号非零

有没有办法在 sympy 中使 Symbol 非零?例如,如果我集成:

psi = a * cos( sqrt(2/mu)*x ) + b * sin( sqrt(2/mu)*x )
Psi = integrate(psi, x)
Run Code Online (Sandbox Code Playgroud)

它给了我两个结果,一个是 mu == 0,一个是 mu != 0。我只需要第二个。

python sympy

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

在使用solveset()中的erf()函数时,sympy和mpmath给出"TypeError:无法创建mpf"

我有4个输入变量(浮点数):

  • XMAX
  • XMIN
  • 百分比
  • 模式

我想为s解决以下(相当长的)等式:

> (1/2+1/2*erf((log(Xmax)-(log(mode)+s**2))/(sqrt(2)*s))-(1/2+1/2*erf((log(Xmin)-(log(mode)+s**2))/(sqrt(2)*s))) - percentage == 0
Run Code Online (Sandbox Code Playgroud)

我想用mpmath和sympy来解决这个等式,但它给了我以下错误信息:

TypeError:无法从0.707106781186547*( - s**2 - 0.287682072451781)/ s创建mpf

我的代码如下:

from mpmath import erf, log, sqrt
from sympy import Symbol, solveset, S

percentage = 0.95
mode = 2
Xmin = 1.
Xmax = 1.5
s = Symbol('s')

eqn = (1/2+1/2*erf((log(Xmax)-(log(mode)+s**2))/(sqrt(2)*s))-(1/2+1/2*erf((log(Xmin)-(log(mode)+s**2))/(sqrt(2)*s))) - percentage)

solveset(eqn, s, domain=S.Reals)
Run Code Online (Sandbox Code Playgroud)

mpf是mpmath创建的float类型.

我想我把问题缩小到erf()函数,它返回

EmptySet()
Run Code Online (Sandbox Code Playgroud)

当我跑

solveset(log(Xmax) - (log(mode) + s ** 2), s, domain=S.Reals)
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚下一步该尝试什么,任何帮助将不胜感激!

我最初认为这是数学问题,但是方程式在matlab中成功解决,所以问题可能来自于sympy或者mpmath.

python sympy mpmath

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

PyPy 上的 Sympy - 有时快 6 倍,有时慢 4 倍

在这里,pypy 计算速度较慢,无论给定数字是否为素数:

C:\Users\User>python -m timeit -n10 -s"from sympy import isprime" "isprime(2**521-1)"
10 loops, best of 3: 25.9 msec per loop

C:\Users\User>pypy -m timeit -n10 -s"from sympy import isprime" "isprime(2**521-1)"
10 loops, best of 3: 97.9 msec per loop
Run Code Online (Sandbox Code Playgroud)

在这里,pypy 在创建素数列表(从 1 到 1000000)时更快:

C:\Users\User>pypy -m timeit -n10 -s"from sympy import sieve" "primes = list(sieve.primerange(1, 10**6))"
10 loops, best of 3: 2.12 msec per loop

C:\Users\User>python -m timeit -n10 -s"from sympy import sieve" "primes = list(sieve.primerange(1, 10**6))"
10 loops, best of …
Run Code Online (Sandbox Code Playgroud)

python performance pypy sympy

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

如何使用python简化三角表达式?

我有一个这样的表达式,由 Sympy 计算:

-1.0*pi*(-1.0*sin(1.0*t) - 0.025*cos(1.0*t) + 4.0*cos(2.0*t))
Run Code Online (Sandbox Code Playgroud)

然后我尝试了很多为简化表达而提供的选项,但它们并没有太大作用。

当我使用时expand_trig(),它返回:

pi*(1.0*sin(1.0*t) + 0.025*cos(1.0*t) - 4.0*cos(2.0*t))
Run Code Online (Sandbox Code Playgroud)

但是当我使用 Mathematica 时,它返回:

-25.0542 Cos t + 3.14159 Sin t
Run Code Online (Sandbox Code Playgroud)

如何使用 Python 获得像 Mathematica 这样的结果?如果我想进一步简化 Mathematica 给出的表达式,我该怎么办?

python wolfram-mathematica sympy

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

Python,Sympy计算多元函数

让我们假设我们有两个列表:

variables = ['a','b','c'...]
values = [1,2,3...]
Run Code Online (Sandbox Code Playgroud)

和一个简单的产品功能:

function = 'a*b*c*...*z'
Run Code Online (Sandbox Code Playgroud)

我尝试过这种方式(我确实意识到这是100%不正确的,但是我不知道如何将多个变量替换为简化的表达式):

import sympy
y = sympy.sympify(function).evalf(subs={variable:values})
Run Code Online (Sandbox Code Playgroud)

python sympy

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

如何通过完成平方来分解方程式?

我想通过完成平方来分解方程式:

>>>> import sympy
>>>> x, c = symbols('x c')
>>>> factor(x**2 - 4*x  - 1)
x**2 - 4*x - 1
Run Code Online (Sandbox Code Playgroud)

但是,我期望看到:

(x - 2)**2 - 5
Run Code Online (Sandbox Code Playgroud)

如何在sympy中完成?

sympy

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

在python中导入模块和方法名称

假设我导入以下两个模块如下:

from sympy import *
from numpy import *
Run Code Online (Sandbox Code Playgroud)

两个模块都exp()定义了一个功能.python如何选择使用哪一个?有没有办法在上面导入模块后区分这些功能?在这种情况下,有什么机制可以警告用户?考虑以下一组命令IDLE

=============================== RESTART: Shell ===============================
>>> from sympy import *
>>> from numpy import *
>>> exp(5)
148.4131591025766
>>> c = symbols('c')
>>> exp(c)
Traceback (most recent call last):
  File "<pyshell#162>", line 1, in <module>
    exp(c)
AttributeError: 'Symbol' object has no attribute 'exp'
>>> 
=============================== RESTART: Shell ===============================
>>> from sympy import *
>>> c = symbols('c')
>>> exp(c)
exp(c)
Run Code Online (Sandbox Code Playgroud)

看来默认情况下 python使用了exp()定义,numpy但是当它被一个被sympy …

python numpy sympy

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

如何使用lambdify评估我的功能?

我有一个包含多个变量的表达式,让我们说如下:

import numpy as np
import sympy as sym
from sympy import Symbol, Add, re, lambdify
x = sym.Symbol('x')
y = sym.Symbol('y')
z = sym.Symbol('z')

F = x+ y +z
Run Code Online (Sandbox Code Playgroud)

我有如下三个变量列表:

x = [3, 2 ,3]   
y = [4, 5 , 6] 
z = [7, 10 ,3]
Run Code Online (Sandbox Code Playgroud)

我想为变量的每个元素评估函数。我知道我可以定义如下内容:

f_dis = lambdify([x, y, z], x + y + z, 'numpy')
d = f_dis(3, 4, 7)
print ( "f_dis =", d)
Run Code Online (Sandbox Code Playgroud)

这给了我14个理想的结果。但是如何将x,y和z作为三个列表传递(而不是分别编写元素),并得到如下结果:

[14, 17, 12]
Run Code Online (Sandbox Code Playgroud)

根据以下说明,使用lambdify似乎是评估函数的更有效方法:https ://www.sympy.org/scipy-2017-codegen-tutorial/notebooks/22-lambdify.html

谢谢。

python symbols numpy sympy lambdify

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