这部分Python程序使用了SymPy库。因此,它在sympy.core.add.Add类中生成一个值,该值无法用于程序的其他部分。
from sympy import *
x = symbols('x')
y = 1 - (0.1 * coeff1) / (x + 2) - sin(x) * (2 * x + coeff1)
yprime = y.diff(x)
Run Code Online (Sandbox Code Playgroud)
如何将sympy.core.add.Add class 转换为普通float或int以便在进一步计算中使用变量yprime ?
我使用关系 GreaterThan 定义了一些约束 -
x = sympy.Symbol('x')
constraint1 = (x >= 0)
Run Code Online (Sandbox Code Playgroud)
我现在想检查约束是否适用于任意值“x”。我尝试使用sympy.checksol,但出现属性错误,所以我猜这不是正确的方法 -
In [7]: sympy.checksol(constraint1, {x: 3})
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-7-cc41bd5986e3> in <module>()
----> 1 sympy.checksol(constraint1, {x: 3})
/Library/Python/2.7/site-packages/sympy/solvers/solvers.pyc in checksol(f, symbol, sol, **flags)
200 if attempt == 0:
201 val = f.subs(sol)
--> 202 if val.atoms() & illegal:
203 return False
204 elif attempt == 1:
AttributeError: 'bool' object has no attribute 'atoms'
Run Code Online (Sandbox Code Playgroud)
我什至尝试过constraint1.evalf,但它总是自行返回 -
In [10]: constraint1.evalf(subs={x: 3}) …Run Code Online (Sandbox Code Playgroud) 我正在尝试解决 Sympy 中的一些简单的布尔可满足性问题。在这里,我尝试解决包含逻辑运算符的约束Or:
from sympy import *
a,b = symbols("a b")
print(solve(Or(Eq(3, b*2), Eq(3, b*3))))
# In other words: (3 equals b*2) or (3 equals b*3)
# [1,3/2] was the answer that I expected
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,这会导致错误:
TypeError: unsupported operand type(s) for -: 'Or' and 'int'
Run Code Online (Sandbox Code Playgroud)
我可以使用 解决这个问题Piecewise,但这更加冗长:
from sympy import *
a,b = symbols("a b")
print(solve(Piecewise((Eq(3, b*2),Eq(3, b*2)), (Eq(3, b*3),Eq(3, b*3)))))
#prints [1,3/2], as expected
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我尝试求解两个变量而不是一个变量时,这种解决方法失败了:
from sympy import *
a,b = symbols("a b")
print(solve([Eq(a,3+b),Piecewise((Eq(b,3),Eq(b,3)), …Run Code Online (Sandbox Code Playgroud) 是否有安全保存和加载 sympy 对象的官方方法(用于通过互联网发送)?
使用np.save并np.load给出以下异常。
Traceback (most recent call last):
File "testSave.py", line 19, in <module>
print np.load("out.npy", out)
File "C:\Python27\lib\site-packages\numpy\lib\npyio.py", line 415, in load
if mmap_mode:
File "C:\Python27\lib\site-packages\sympy\core\relational.py", line 195, in __nonzero__
raise TypeError("cannot determine truth value of Relational")
TypeError: cannot determine truth value of Relational
Run Code Online (Sandbox Code Playgroud)
我用的是考虑srepr转Eq(5*x + 12 - 8, 12*x - 10)成Equality(Add(Add(Mul(Integer(5), Symbol('x')), Integer(12)), Integer(-8)), Add(Mul(Integer(12), Symbol('x')), Integer(-10))),但据我所知,只有这样,才能将其加载从文本是使用parse,但我不喜欢从互联网EXEC字符串。
这与问题SymPy: Safely parsing strings as I am …
我试图使用来自 的 Jacobi 椭圆函数mpmath,但得到下面给出的简单代码的错误:
import numpy as np
import scipy.integrate as spi
from scipy import special as sp
import matplotlib.pyplot as plt
from math import sqrt, pow, log
from mpmath import ellipfun
sn = ellipfun('sn')
y=sn(0.5,-1)
print y
y1=y.real
print y1, np.arcsin(y), np.arcsin(y1)
Run Code Online (Sandbox Code Playgroud)
即使我只传递函数的实部,我也会收到错误消息sn(0.5,-1)。我不知道我是不是弄错了。请帮忙。提前致谢。
下面的 python 脚本计算表达式中的第一项, 4.939e-3xAxB+8.7989 at (A,B) = (1.0,1.0):
import sympy
from sympy import *
A = sympy.Symbol(A)
B = sympy.Symbol(B)
F = 4.939e-3*A*B+8.7989
G = str(F).split("+")[0]
H = lambdify([A,B], G, "numpy")
print H(1,1)
Run Code Online (Sandbox Code Playgroud)
输出为:0.004939
现在下面的代码旨在实现相同的目标:
A = sympy.Symbol(A)
B = sympy.Symbol(B)
F = 4.939e-3*A*B+8.7989
G = str(F).split("+")[0]
H = lambdify(A, G, "numpy")
I = lambdify(B, H(1), "numpy")
print I(1)
Run Code Online (Sandbox Code Playgroud)
但这会返回错误:
NameError: global name 'B' is not defined
有人可以解释一下吗?
我想做类似的事情deltax=symbols(",,\delta x")
但这似乎给出了一个元组而不是多字符符号。有可能吗?我应该补充一点,我正在使用 Jupyter。
我正在尝试实现指数回归函数。sp 代表 sympy。我使用 numpy 和 sympy。首先,在 func_exp 中我尝试使用 np.exp 但它生成了一个错误(属性错误),所以我决定使用 sympy 代替。嗯,这是代码
\n\nimport numpy as np\nfrom numpy.linalg import matrix_rank\nimport scipy \nimport scipy.integrate\n\nimport random \n\nimport matplotlib.pyplot as plt\nimport matplotlib as mpl\nfrom mpl_toolkits.mplot3d import Axes3D\n\nfrom sympy import integrate\nimport sympy as sp\n\nx, y = sp.symbols(\'x, y\')\n\nsp.init_printing(use_unicode=True,use_latex=\'mathjax\')\ndef exponential_regression (x_data, y_data):\n def func_exp(x, a, b):\n return a*sp.exp(b*x)\n popt, pcov = scipy.optimize.curve_fit(func_exp, x_data, y_data)\n a = popt[0] # componente a, Par\xc3\xa1metro \xc3\x93PTimo (popt).\n b = popt[1] # componente b, Par\xc3\xa1metro \xc3\x93PTimo (popt).\n plt.figure()\n puntos = …Run Code Online (Sandbox Code Playgroud) 我正在尝试用 Python 求解非线性三角方程组。我尝试了以下方法:
from sympy import symbols,solve,sin,cos,pi, Eq
measurements = [(5.71403,0.347064), (4.28889, -0.396854), (5.78091, -7.29133e-05),
(2.06098, 0.380579), (8.13321, 0.272391), (8.23589, -0.304111), (6.53473, 0.265354), (1.6023,
0.131908)]
f, a, phi = symbols('f a phi')
eq1 = Eq(a*sin((2.0*pi*f*measurements[0][0])+phi) - measurements[0][1])
eq2 = Eq(a*sin((2.0*pi*f*measurements[4][0])+phi) - measurements[4][1])
eq3 = Eq(a*sin((2.0*pi*f*measurements[6][0])+phi) - measurements[6][1])
solve((eq1,eq2,eq3), (a, f, phi))
Run Code Online (Sandbox Code Playgroud)
Python 需要花很长时间来尝试求解方程。但是,MATLAB 可以立即完成。
有什么问题?
我试过
import sympy as sp
? = sp.symbols("?")
? * sp.eye
Run Code Online (Sandbox Code Playgroud)
但看到错误
TypeError Traceback (most recent call last)
<ipython-input-25-dc4fb0b9f400> in <module>
3 ? = sp.symbols("?")
4
----> 5 ? * sp.eye
TypeError: unsupported operand type(s) for *: 'Symbol' and 'function'
Run Code Online (Sandbox Code Playgroud)
sp.eye用标量符号乘法的正确方法是什么