我正在使用 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中使用符号计算我有
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.
有什么建议?
我是Sympy的新手,并且意识到计算和简化代数表达式非常好.
但是,当我写出实数的分数时,它返回零(像'x'这样的符号分数没有问题).我究竟做错了什么?
from sympy import *
1./2
Out[2]: 0.5
1/2
Out[3]: 0
Run Code Online (Sandbox Code Playgroud) 我是一个蟒蛇新手.我正在尝试使用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中使用对数的操作示例.我已经尝试过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)=4或log(x)-log(x+1)=log(x).
是否有某些方法或某处(文档或类似)我在哪里可以找到如何做到这一点?
我正在使用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执行逐元素乘法吗?
这是我的代码:
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]之外.
我正在处理一些较长的方程式,但并不是很复杂,我想使用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。
题
有办法解决这些问题吗?还是我应该使用其他符号数学工具?任何建议都欢迎。
我有一个形式的等式(在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) 我使用Mathematica和Python计算了以下内容.
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中获得相同的结果?或者它可能吗?