标签: sympy

我如何注意到 exp(x) 实际上是 sympy.exp(x)?

我正在使用 python + Nest.js 开发一个图形绘制和微积分执行计算器应用程序。我正在使用 SymPy 带来微积分功能,但微分时存在严重问题。

derivative.py

from latex2sympy2 import latex2sympy, latex2latex
import sympy as smp

def derivative(latex):
  ...
  x = smp.symbols('x', real=True)
  f = latex2sympy(latex)
  dfdx = smp.diff(f, x)
  return smp.latex(dfdx)
Run Code Online (Sandbox Code Playgroud)

一切都运转良好,除了sympy.diff();它总是返回0(例如f = sin(x)会导致dfdx = 0)。

我发现,由于latex2sympy()返回一个没有库名称的函数,smp.diff()因此不认为它是来自 SymPy 的函数。当我在 Google Colab 上测试完全相同的代码时,它运行得很好。

f = latex2sympy(latex)
# latex = '$$ \sin x $$'
# f = sin(x)

dfdx = smp.diff(f, x)
# dfdx = 0
Run Code Online (Sandbox Code Playgroud)

所以我觉得 …

python sympy

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

复数:将SymPy转换为数字(I到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])
Run Code Online (Sandbox Code Playgroud)

抓取网页我只发现这将解决print命令问题,但无法使用cplot.

有什么建议?

python sympy complex-numbers

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

对于具有实数的分数,Sympy返回零

我是Sympy的新手,并且意识到计算和简化代数表达式非常好.

但是,当我写出实数的分数时,它返回零(像'x'这样的符号分数没有问题).我究竟做错了什么?

from sympy import *

1./2
Out[2]: 0.5

1/2
Out[3]: 0
Run Code Online (Sandbox Code Playgroud)

python sympy fractions

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

TypeError:无法将表达式转换为float

我是一个蟒蛇新手.我正在尝试使用python评估普朗克方程.我写了一个简单的程序.但是,当我给它输入时,给我一个错误.任何人都可以告诉我哪里出错了?这是程序和错误:

程序:

from __future__ import division
from sympy.physics.units import *
from math import *
import numpy
from scipy.interpolate import interp1d

#Planck's Law evaluation at a single wavelength and temperature
def planck_law(wavelength,temperature):
    T=temperature
    f=c/wavelength
    h=planck
    k=boltzmann
    U=2*h/(c**3)*(f**3)/(exp(h*f/(k*T))-1)
    return U.evalf()
Run Code Online (Sandbox Code Playgroud)

输入:我已将函数导入为'cp',输入如下

value = (cp.planck_law(400,2000))
Run Code Online (Sandbox Code Playgroud)

错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>`enter code here`
  File "Camera_performance.py", line 14, in planck_law
  U=2*h/(c**3)*(f**3)/(exp(h*f/(k*T))-1)
  File "/usr/lib/python2.7/dist-packages/sympy/core/expr.py", line 221, in __float__
  raise TypeError("can't convert expression to float")

TypeError: can't convert expression to …
Run Code Online (Sandbox Code Playgroud)

python numpy sympy scipy python-2.7

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

Python对数函数

我正在寻找一个Python中使用对数的操作示例.我已经尝试过sympy,numpy而且我仍然不能做我想做的事.例如,对于这样的输入:

log(x+1)+log(4-x)=log(100) # it's just an example 
Run Code Online (Sandbox Code Playgroud)

输出应该给我的x价值.我需要使用任何其他功能,如log(x+1)=4log(x)-log(x+1)=log(x).

是否有某些方法或某处(文档或类似)我在哪里可以找到如何做到这一点?

python numpy logarithm sympy

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

使用SymPy执行Hadamard产品

我正在使用SymPy进行线性代数。我想在两个矩阵上执行逐元素乘法(Hadamard积)。

例如,

sympy.MatrixSymbol('X', 4, 3) [operator/method] sympy.MatrixSymbol('W', 4, 3)
Run Code Online (Sandbox Code Playgroud)

会给

[[X[0,0]*W[0,0], X[0,1]*W[0,1], ...],[X[1,0]*W[1,0], X[1,1]*W[1,1], ...]]
Run Code Online (Sandbox Code Playgroud)

但是似乎没有办法。有什么方法可以用SymPy执行逐元素乘法吗?

sympy

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

如何在python中提供的间隔之外使我的Piecewise函数为零

这是我的代码:

    In [61]: import sympy as sp

    In [62]: x = sp.Symbol('x')

    In [63]: phi_1 = sp.Piecewise( ( (1.3-x)/0.3, 1<=x <=1.3 ))

    In [64]: phi_1.subs(x,1.2)
    Out[64]: 0.333333333333334

    In [65]: phi_1.subs(x,1.4)
    Out[65]: Piecewise()
Run Code Online (Sandbox Code Playgroud)

更具体地说,我希望得到零作为输入no的答案.65,因为1.4在区间[1,1.3]之外.

python sympy

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

Sympy的订阅限制

我正在处理一些较长的方程式,但并不是很复杂,我想使用sympy来简化和“分解”它们。但是我遇到了一些问题。以下是一些最小示例的列表:

问题1:对称

from sympy import *
from __future__ import division
a = symbols('a')
b = symbols('b')
expr = 1/12*b + 1
expr.subs(1/12*b, a)
expr.subs(b*1/12, a)
Run Code Online (Sandbox Code Playgroud)

第一行给出了预期的结果(即a+1),而第二行则没有替代。

问题2:因式表达式

表达式的某些部分被分解了,当我扩展表达式时,它们被简化了,因此无法进行替换。例如

(((x+1)**2-x).expand()).subs(x**2+2*x, y+1)
Run Code Online (Sandbox Code Playgroud)

会给x^2+x+1,我正在寻找的是y+2-x

有办法解决这些问题吗?还是我应该使用其他符号数学工具?任何建议都欢迎。

python symbolic-math sympy substitution

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

SymPy可以理解由求和指数索引的变量吗?

我有一个形式的等式(在LaTeX语法中):

\sum_{k=0}^{K-1} a_k = 0
Run Code Online (Sandbox Code Playgroud)

a_k是一个"下标k",我正在建立一个线性方程组的变量列表之一.我希望能够尽可能紧凑地将这个方程表达给SymPy.似乎我想用它的Sum()函数来表达求和,但我不知道如何告诉它on term k in the sum, a_k refers to the k-th symbol.

这是可能的,例如,如果我设置这样的符号列表?

a = [sympy.symbols('a' + str(i)) for i in xrange(K)]
Run Code Online (Sandbox Code Playgroud)

sympy

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

Python(+ SymPy):如何获得与Mathematica相同的结果?

我使用MathematicaPython计算了以下内容.

在此输入图像描述

Mathematica具有以下代码

f[x_] = a*b/(a - b)^2*Exp[-r*x] (Exp[-b*x] - Exp[-a*x]) (a*Exp[-b*x] - b*Exp[-a*x])
Assuming[{a > 0, b > 0, r > 0}, Integrate[f[x], {x, 0, \[Infinity]}]]
Run Code Online (Sandbox Code Playgroud)

给出了相当不错的结果:

在此输入图像描述

但是,以下Python(带SymPy)代码

from sympy import *
init_printing()
x = symbols('x')
a, b, r = symbols('a b r', positive=True)
fun = a*b/((a-b)**2) * exp(-r*x) * (exp(-b*x) - exp(-a*x)) * (a*exp(-b*x) - b*exp(-a*x))
simplify(integrate(fun, (x, 0, oo)))
Run Code Online (Sandbox Code Playgroud)

产生一个相当混乱的结果:

在此输入图像描述

我在Python代码中缺少什么才能在Mathematica中获得相同的结果?或者它可能吗?

python wolfram-mathematica sympy

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