首页 文章

Python中的多变量区分

提问于
浏览
2

我有一个功能

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))

哪个返回正确的答案,

4x ^ 3

但是,这个

diff(u(x, t))

或这个

diff(u(x, t), t)

返回错误如下

Type()最后一次调用最后一次调用()----> 1 diff(u(x,t))in u(x,t)1 def u(x,t):----> 2 return math.erf((x 1)/(2 *(k * t)**(1/2)))C:\ Anaconda \ lib \ site-packages \ sympy \ core \ expr.py in float(self)223如果result.is_number和result.as_real_imag()1:224引发TypeError(“无法将complex转换为float”) - > 225引发TypeError(“无法将表达式转换为float”)226 227 def complex(self) :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 回答

  • 3

    您需要使用 sympy.erf ,而不是 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)
    
  • 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
    

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

相关问题