Python中的多变量区分

时间:2015-08-28 18:12:34

标签: python matlab function pde

我有一个功能

Multivariate function 我希望在Python中简化和区分,定义为**

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中多个变量的数学函数?

2 个答案:

答案 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

您必须指定您要区分的变量。