天道酬勤,学无止境

sympy

复数:将 SymPy 转换为数字(I 到 1j)(Complex numbers: convert SymPy to numeric (I to 1j))

问题 在 Python 中使用符号计算我有 import sympy from cmath import * from mpmath import arg, cplot z = sympy.symbols('z') fhandle='z**2' g = lambda w: sympy.sympify(fhandle).evalf(subs={z: w}) g(1+2j) # Returns: -3.0 + 4.0*I # hence the next command fails, because I is expected to be 1j cplot(g, [-3,3], [-3,3]) 爬网我只发现这将解决print命令的问题,但不适用于 cplot。 有什么建议? 回答1 一种选择是通过调用complex来包装结果: >>> def g(w): ... return complex(sympy.sympify(fhandle).evalf(subs={z: w})) ... >>> g(1+2j) (-3+4j) 之后mpmath.cplot(g, [-3, 3], [-3, 3])产生 请注意,我在这里使用了一个命名函数。 如果您无论如何要立即为其命名,那么使用lambda没有多大意义。

2021-09-25 18:23:21    分类:技术分享    python   complex-numbers   sympy

On import modules and method names in python

Suppose I import the following two modules as follows: from sympy import * from numpy import * both modules have an exp() function defined. How does python pick which one to use? Is there a way to distinguish these functions after the modules have been imported as above? What mechanism exists to warn the user when this is the case? Consider the following set of commands in IDLE =============================== RESTART: Shell =============================== >>> from sympy import * >>> from numpy import * >>> exp(5) 148.4131591025766 >>> c = symbols('c') >>> exp(c) Traceback (most recent call

2021-09-25 15:39:19    分类:问答    python   numpy   sympy

Complex numbers: convert SymPy to numeric (I to 1j)

using symbolic calculation in Python I have import sympy from cmath import * from mpmath import arg, cplot z = sympy.symbols('z') fhandle='z**2' g = lambda w: sympy.sympify(fhandle).evalf(subs={z: w}) g(1+2j) # Returns: -3.0 + 4.0*I # hence the next command fails, because I is expected to be 1j cplot(g, [-3,3], [-3,3]) Crawling the web I only found this which will fix the matter for the print command, but will not work with cplot. Any suggestions?

2021-09-25 00:09:02    分类:问答    python   complex-numbers   sympy

Python3 - Sympy:展开三角函数的乘积(Python3 - Sympy: expand products of trig functions)

问题 我找不到让 SymPy 将cos(a)*cos(b)之类的乘积扩展为角和的三角函数之和的方法。 from sympy import * init_printing() wrf,wlo,t = symbols('\omega_RF \omega_LO t') c = cos(wrf*t)*cos(wlo*t) expand_trig(c) 保持产品完好无损。 trigsimp(c) simplify(c)或trigsimp(c)也没有给出任何替代形式。 我想让cos(a)*cos(b)扩展到1/2*(cos(a+b) + cos(ab)) ...有什么提示吗? 回答1 根据文档字符串, help(sympy.fu) , fu将尝试最小化目标函数measure 。 默认情况下,这首先最小化触发项的数量,然后最小化总操作数。 但是,如果您通过 measure=lambda x: -x.count_ops() 然后fu将尝试最大化操作数。 import sympy as sy sy.init_printing() wrf, wlo, t = sy.symbols('\omega_RF \omega_LO t') c = sy.cos(wrf*t)*sy.cos(wlo*t) print(sy.fu(c, measure=lambda x: -x.count_ops())) 产量

2021-09-21 20:46:46    分类:技术分享    python   sympy

cosd 和 sind 同情(cosd and sind with sympy)

问题 cosd似乎没有等价物,sympy 中的sind (即余弦和正弦用于度数的参数)。 有没有简单的方法来实现这些功能? 对于 numpy,我做了: numpy.cosd = lambda x : numpy.cos( numpy.deg2rad(x) ) 就像是 : sympy.cosd = lambda x : sympy.cos( sympy.pi/180*x ) 适用于评估,但表达式打印为: cos(pi*x/180) 这不利于可读性(由于 3D 坐标变化,我的表达式很复杂)。 有没有办法创建一个sympy.cosd函数来计算cos(pi/180 * x)但打印cosd(x) ? 回答1 sympy在mpmath模块中确实有一个弧度转换器。 sympy.cosd = lambda x : sympy.cos( sympy.mpmath.radians(x) ) 回答2 为了在使用度数时保持符号完整,我做了一些类似的事情: import sympy as sp def tand(x): return sp.tan(x * sp.pi / 180) def sind(x): return sp.sin(x * sp.pi / 180) def cosd(x): return sp.cos(x * sp.pi / 180) 示例结果 In [5]: tand(60) Out[5

2021-09-21 19:42:18    分类:技术分享    python   numpy   sympy

Julia 在循环中更改名称,使用符号变量(Julia changing name in loop, using symbolic variables)

问题 我想在循环的每次迭代中更改符号变量的名称,然后使用这些符号变量求解方程,例如: using SymPy for i in 1:5 p{i} = symbols("p"{i}, real=true,positive=true) solve(p{i}^2-i^2) end 因此,我希望创建一系列标量符号变量(因为我认为不可能创建向量值符号变量),每个变量都具有不同的名称 - p1、p2、p3、p4 和 p5 - 然后使用这些在方程求解器中。 然而,花括号符号似乎不适用于按照 matlab 在 julia 中命名。 快速谷歌没有建议任何明显的答案。 有任何想法吗? 回答1 在 julia 和大多数计算机语言中,如果您发现自己需要一堆数字变量 x1, x2, x3, ... ,您可能需要一个数组。 在 julia 中,这可能看起来像这样,(但请注意,我不知道我在用 SymPy 做什么) using SymPy pp=Sym[] for i in 1:5 p = symbols("x$i", real=true,positive=true) push!(pp,p) solve(pp[i]^2-i^2) end 在这里,我们从 pp 空开始,但类型正确; 我们将每个符号推到 pp 的末尾; 最后,我们可以用pp[i]找出 pp 的第 i 个项目,这几乎是您的代码,但没有 shift 键。

2021-09-21 17:53:14    分类:技术分享    julia   sympy   symbolic-math

python Scipy + sympy (?) 中变量边界的二重积分(Double integral with variable boundaries in python Scipy + sympy (?))

问题 完整的数学问题在这里。 简而言之,我想将一个函数与二重积分相结合。 内积分有边界20和x-2 ,而外积分有边界22和30 。 我知道使用 Scipy 我可以使用scipy.integrate.nquad计算scipy.integrate.nquad 。 我想做这样的事情: def f(x, y): return (x ** 2 + y ** 2) res = sp.integrate.nquad(f, [[22, 30], [20, x-2]]) 是否可以? 也许还使用sympy ? 回答1 我用sympy解决了: from sympy import * x, y = symbols("x y") f = (x ** 2 + y ** 2) res = integrate(f, (y, 20, x-2), (x, 22, 30)) 基本上sympy.integrate能够处理多个集成,也有可变边界。 回答2 如果您需要数值积分,则 sympy 不是一种选择。 然后你可以尝试类似下面的方法。 对于这个例子,它看起来很快,但我怀疑你可能会遇到一般问题,看看它对你的用例有多好。也许这个可能不完美的答案会促使某人提交更好的东西。 我利用这样一个事实,即我们可以一个接一个地进行积分,首先积分出 y,以获得 x 的函数,然后对其进行积分。 from scipy.integrate

2021-09-21 12:04:06    分类:技术分享    python   scipy   sympy   integral

如何在 Sympy 中将 `sin(x)^2` 重写为 cos(2*x) 形式(How to rewrite `sin(x)^2` to cos(2*x) form in Sympy)

问题 在 Mathematica 等其他 CAS 中很容易获得这种重写。 TrigReduce[Sin[x]^2] (*1/2 (1 - Cos[2 x])*) 但是,在 Sympy 中,所有测试方法的trigsimp返回sin(x)**2 trigsimp(sin(x)*sin(x),method='fu') 回答1 完整的“fu”方法会尝试多种不同的变换组合以找到“最佳”结果。 Fu 例程中使用的单个转换可用于进行有针对性的转换。 您将必须阅读文档以了解不同功能的作用,但只需运行 FU 字典的功能即可将 TR8 识别为您的主力: >>> for f in FU.keys(): ... print("{}: {}".format(f, FU[f](sin(var('x'))**2))) ... 8<--- TR8 -cos(2*x)/2 + 1/2 TR1 sin(x)**2 8<--- 回答2 在处理类似问题时,减少 sin(x)**6 的阶数,我注意到 sympy 可以减少 sin(x)**n 的阶数,其中 n=2,3,4,5,...使用,重写,扩展,然后重写,然后是简化,如下所示: expr = sin(x)**6 expr.rewrite(sin, exp).expand().rewrite(exp, sin).simplify() 这将返回: -15*cos(2*x)

2021-09-21 06:14:36    分类:技术分享    sympy

没有名为 sympy 的模块(No module named sympy)

问题 嗨,我正在通过 Edx 课程使用 python 学习线性代数。 (http://nbviewer.ipython.org/github/ULAFF/notebooks/tree/may-14-2014/)。 在第一个框的“02.4.2.10练习矩阵向量乘法”上,代码是: import generate_problems as gp print("What is the result of the matrix vector product below?") p = gp.Problem() p.new_problem() generate_problems 是 Edx 教授创建的一个模块。 但是,我在导入 sympy 时出错。 我收到以下错误: --------------------------------------------------------------------------- ImportError Traceback (most recent call last) <ipython-input-10-79d56e0988cb> in <module>() ----> 1 import generate_problems as gp 2 print("What is the result of the matrix vector product below

2021-09-21 00:34:44    分类:技术分享    python   python-2.7   ipython   ipython-notebook   sympy

检测变量是否为 sympy 类型(detect if variable is of sympy type)

问题 我有一个变量,它可能是也可能不是一个 sympy 类。 我想将其转换为浮点数,但我在一般情况下无法做到这一点: $ python Python 2.7.3 (default, Dec 18 2014, 19:10:20) [GCC 4.6.3] on linux2 >>> import sympy >>> x = sympy.sqrt(2) >>> type(x) <class 'sympy.core.power.Pow'> >>> y = 1 + x >>> type(y) <class 'sympy.core.add.Add'> >>> z = 3 * x >>> type(z) <class 'sympy.core.mul.Mul'> >>> if isinstance(z, sympy.core): ... z = z.evalf(50) # 50 dp ... Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types 我将测试x , y , z转换为浮点数。 请注意,我不能只在x 、 y和z上运行evalf()而不检查

2021-09-20 16:34:02    分类:技术分享    python   sympy   isinstance