我有一个功能
def u(x, t):
return math.erf((x + 1) / (2 * (k * t) ** (1 / 2)))
**如果我错了,请纠正我。
我拥有以下所有必要的导入:
import math
import scipy
import matplotlib
from sympy import *
以及定义符号
x, k, t = symbols('x k t')
这完全没问题:
def f(x):
return x ** 4
diff(f(x))
返回正确答案,
4倍^ 3
但是,这个
diff(u(x, t))
或者
diff(u(x, t), t)
返回如下错误
TypeError Traceback(最近一次调用最后一次) in() ----> 1 diff(u(x,t))
(x,t) 1 def u(x,t): ----> 2返回math.erf((x + 1)/(2 *(k * t)**(1/2)))\ anaconda \ lib \ site-packages \ sympy \ core \ expr.py float (个体经营) 223如果result.is_number和result.as_real_imag()1: 224引发TypeError(“无法将complex转换为float”) - > 225引发TypeError(“无法将表达式转换为float”) 226 227 def 复杂(自我):
TypeError:无法将表达式转换为float
在Matlab中我可以很容易地做到:
syms x;
syms k;
syms t;
u = erf((x + 1)/(2 * sqrt(k * t)));
LHS = simplify(diff(u, t))
RHS = k * simplify(diff(u, x, 2))
我的问题是,如何区分和/或简化Python中多个变量的数学函数?
答案 0 :(得分:3)
您需要使用math.erf
,而不是>>> import sympy
>>> x, k, t = sympy.symbols('x k t')
>>> def u(x, t):
... return sympy.erf((x + 1) / (2 * (k * t) ** (1 / 2)))
>>> sympy.diff(u(x, t), x, t)
(0.25*(k*t)**(-1.5)*(x + 1)**2 - 0.5*(k*t)**(-0.5))*exp(-(k*t)**(-1.0)*(x + 1)**2/4)/(sqrt(pi)*t)
:
display:block
答案 1 :(得分:2)
像这样使用sympy
:
>>> from sympy import symbols, diff
>>> x, y = symbols('x y', real=True)
>>> diff( x**2 + y**3, y)
3*y**2
>>> diff( x**2 + y**3, y).subs({x:3, y:1})
3
您必须指定您要区分的变量。