通过 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)
我有一个包含很多变量的方程式。
我正在尝试求出这个方程的导数。我试过“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)