通过 Sympy 求方程的导数

Find the derivative of an equation by Sympy

我有一个包含很多变量的方程式。

我正在尝试求出这个方程的导数。我试过“Sympy 1.7”

这是我的代码:

import cmath
from cmath import pi
from sympy import *

kx, ky, λ, n1 = symbols('kx, ky, λ, n1')
init_printing(use_unicode=True)


def kz1(kx, ky, λ, n1):
    return cmath.sqrt((n1 ** 2) * ((2 * pi / λ) ** 2) - ((cmath.sqrt(kx ** 2 + ky ** 2)) ** 2))

diff(kz1(kx, ky, λ, n1), kx)

我原以为我会得到一个由原始方程中的变量组成的方程。但我一直收到这样的错误:

Traceback (most recent call last):
  File "/Users/......./venv/lib/python3.8/site-packages/IPython/core/interactiveshell.py", line 3417, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-2-c3e2605acdaa>", line 12, in <module>
    diff(kz1(kx, ky, λ, n1), kx)
  File "<ipython-input-2-c3e2605acdaa>", line 10, in kz1
    return cmath.sqrt((n1 ** 2) * ((2 * pi / λ) ** 2) - ((cmath.sqrt(kx ** 2 + ky ** 2)) ** 2))
  File "/Users/....../venv/lib/python3.8/site-packages/sympy/core/expr.py", line 355, in __complex__
    return complex(float(re), float(im))
  File "/Users/....../venv/lib/python3.8/site-packages/sympy/core/expr.py", line 350, in __float__
    raise TypeError("can't convert expression to float")
TypeError: can't convert expression to float

为什么 Sympy 似乎想要以浮点数而不是等式的形式显示结果?

您正在混合库。如果你想纯符号操作,你必须像这样将它全部表达为 sympy:

import sympy as sp

kx, ky, λ, n1 = sp.symbols('kx, ky, λ, n1')


def kz1(kx, ky, λ, n1):
    return sp.sqrt((n1 ** 2) * ((2 * sp.pi / λ) ** 2) - ((sp.sqrt(kx ** 2 + ky ** 2)) ** 2))

sp.diff(kz1(kx, ky, λ, n1), kx)