((gamma-(gamma**2-omega**2)**0.5)*(gamma+(gamma**2-omega**2)**0.5)).simplify()
Run Code Online (Sandbox Code Playgroud)
输出为:gamma^2 - (gamma^2 -omega^2)^{1.0} $
然而,我预计结果是 omega^2。我知道在 sympy 文档中,它警告要小心浮点数,但我的印象是整数和 2 的小数次幂(可以精确表示)都很好。
以下代码正确地再现了 omega^2:
((gamma-(gamma**2-omega**2)**sym.Rational(1,2))*(gamma+(gamma**2-omega**2)**sym.Rational(1,2))).simplify()
Run Code Online (Sandbox Code Playgroud)
为什么第一个代码没有产生预期的结果?
当您的表达式由 sp.sympify 给出时,sp.simplify 似乎不起作用。我怎样才能改变这一点?
\nimport sympy as sp\n\nr = sp.Symbol('r', real = True)\nf_str = 'sqrt(1/r**4)'\n\nf1 = sp.sympify( f_str )\nf2 = sp.sqrt(1/r**4)\n\nfor f in f1,f2:\n sp.pprint(sp.simplify(f))\nRun Code Online (Sandbox Code Playgroud)\n哪个输出
\n ____\n \xe2\x95\xb1 1 \n \xe2\x95\xb1 \xe2\x94\x80\xe2\x94\x80 # f1\n \xe2\x95\xb1 4 \n\xe2\x95\xb2\xe2\x95\xb1 r \n\n1 \n\xe2\x94\x80\xe2\x94\x80 # f2\n 2\nr \nRun Code Online (Sandbox Code Playgroud)\n我期望给定一个实值 (r),sympify 表达式可以得到简化
\n例如,我想解决
这是我试过的:
from sympy import var, solve
x = var('x')
f = lambda N: sum( n**2 for n in range(1,N+1) )
f(x)
# output:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
TypeError: range() integer end argument expected, got Add.
Run Code Online (Sandbox Code Playgroud) Sympy似乎无法简化涉及变量的平方的平方根的表达式:
In [28]: a = x**2
In [29]: b = a**(1/2)
In [30]: b
Out[30]:
0.5
? 2?
?x ?
In [31]: b.simplify()
Out[31]:
0.5
? 2?
?x ?
Run Code Online (Sandbox Code Playgroud)
我不认为这与其他变体有关simplify,特别是我认为b.powsimp()应该有效.
In [32]: b.powsimp()
Out[32]:
0.5
? 2?
?x ?
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么这不起作用,或者我做错了什么?
我需要计算python中的积分.
我有进口同情.
g(a,z) = integral_from_z_to_inf of ( t^(a-1) * e^(-1))
Run Code Online (Sandbox Code Playgroud)
在python中:
x,a,z = symbols('x a z')
g = integrate(x**(a-1) * exp(-x), z, oo)
Run Code Online (Sandbox Code Playgroud)
我收到了错误:
ValueError: Invalid limits given: (z, oo)
Run Code Online (Sandbox Code Playgroud)
我打了电话:
b,c,mean,variance = S('b c mean variance'.split())
ff1 = b*g((1+c), lb / b) // lb is a constant, b and c are unknown var that I need to solve. and mean and variance are constants.
Run Code Online (Sandbox Code Playgroud)
我收到了错误:
TypeError: 'Add' object is not callable
Run Code Online (Sandbox Code Playgroud) 我想使用符号数学库从矢量/标量字段派生类似curl/ divergence等的属性.根据sympy文档,这可以通过sympy.physics.vector模块实现,
http://docs.sympy.org/dev/modules/physics/vector/api/fieldfunctions.html
http://docs.sympy.org/dev/modules/physics/vector/fields.html
但是我无法找到卷曲/发散功能随时随地为这个模块中,根据文档应该
sympy.physics.vector.curl和sympy.physics.vector.divergence
我用pip安装了版本并检查了它的0.7.5版本.那么我能找到这些功能的任何想法?也许文档不是最新的?
我必须在一个复杂的积分中使用dirac delta,并希望看到它如何与一个简单的情况一起工作,但它返回错误的答案.我在下面做错了什么线索?
from sympy import DiracDelta
from scipy import integrate
def f(x):
return x*DiracDelta(x-1)
b, err = integrate.quad(f, 0, 5)
print b
Run Code Online (Sandbox Code Playgroud)
这会返回,0.0而不应该返回.
在我的代码中,我需要将sin(g(t))(g作为连续函数)的所有表达式替换为g(t)(它是紧密角度近似).这是我从代码中获得的一个示例:
-29.4*sin(2*t) - 19.6*sin(f(t)) + 4.0*Derivative(f(t), t)**2
Run Code Online (Sandbox Code Playgroud)
我需要替换这两个sin(f(t))和sin(2*t).不只是其中之一和sin(2*t)变化,(sin(f(t))总是一样的).有没有比为其中的内部添加额外变量更简单的方法sin?
在使用符号表达式数组时,使用numpy数组是否明智?
就像是
u0=numpy.array([Number(1.0), Number(1.0), Number(1.0)])
我的意思是,使用numpy数组而不是python列表会更快吗?
如果是这样,具有numpy数组的某些操作似乎会自动转换为浮动符号表达式,例如:
u0=np.array([Number(1.0), Number(1.0), Number(1.0)])
u = np.zeros((10, 3))
u[0] = u0
现在虽然
type(u0[0])>> sympy.core.numbers.Float,
type(u[0][0]) >> numpy.float64
如何避免numpy转换复制到float64的符号表达式?
我正在尝试学习python中符号操作的细节(我是初学者).
我有以下基本代码,输出给我一个错误告诉我它"无法将表达式转换为浮点数".
这段代码有什么问题:
from sympy import *
from math import *
def h(x):
return log(0.75392 * x)
x = symbols('x')
hprime = h(x).diff(x)
print(hprime)
Run Code Online (Sandbox Code Playgroud) python ×10
sympy ×10
python-3.x ×2
derivative ×1
integral ×1
integrate ×1
numpy ×1
simplify ×1