如何使用 SymPy 在 Python 中找到导数
How to find derivative in Python using SymPy
我想找到用户输入的某个函数的导数。
x = np.linspace(-5,5)
print('Options are:')
print('1. y = x')
print('2. y = ax^2')
print('3. y = k(x-a)(x-b)')
print('4. y = k(x-a)(x-b)(x-c)')
n = int(input('Your option is: '))
if n == 1:
func = x
plt.plot(x,func)
n = input('Do you wanna find its derivative? (Y/N)')
if n == 'Y':
print('Derivative is 1')
else:
print('Done')
elif n == 2:
a = int(input('Enter a value for a: '))
func = a*x**2
plt.plot(x,func)
n = input('Do you wanna find its derivative? (Y/N)')
if n == 'Y':
x = sp.Symbol('x')
print(sp.diff(func,x))
else:
print('Done')
当 n == 2 时,
我需要用户为 ax^2 函数输入 'a' 值。
然后代码将绘制图形 ax^2。
然后继续询问用户是否想要函数的导数。
在这部分我很困惑,因为我上面使用的语法,它不显示导数,而是显示如下所示的 0 列表。
1. y = x
2. y = ax^2
3. y = k(x-a)(x-b)
4. y = k(x-a)(x-b)(x-c)
Your option is: 2
Enter a value for a: 3
Do you wanna find its derivative? (Y/N)Y
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
我该如何解决这个问题?
问题发生在您设置func = a*x**2
的那一行。如您所见,x
是一个向量(还不是符号)。这意味着 func
也是一个向量。当 func
传递给 sp.diff
时,它不再是一个函数,而是一个导致该问题的向量。
因此,您需要将 sp.diff
行更改为:
sp.diff(a*x**2, x)
# 6*x (when a=3)
旁注
将 x
同时用作 变量 和 符号 是一个非常糟糕的主意。很乱,以后会导致很多问题。
您需要在定义函数 func
之前定义符号 x
。对于绘图,您可以使用 SymPy 的绘图模块。以下是一个可能的解决方案。
import sympy as sp
import numpy as np
from sympy.plotting import plot
x = sp.Symbol('x')
print('Options are:')
print('1. y = x')
print('2. y = ax^2')
print('3. y = k(x-a)(x-b)')
print('4. y = k(x-a)(x-b)(x-c)')
n = int(input('Your option is: '))
if n == 1:
func = x
plot(func)
n = input('Do you wanna find its derivative? (Y/N)')
if n == 'Y':
print('Derivative is 1')
else:
print('Done')
elif n == 2:
a = int(input('Enter a value for a: '))
func = a*x**2
plot(func)
n = input('Do you wanna find its derivative? (Y/N)')
if n == 'Y':
print(sp.diff(func,x))
else:
print('Done')
我想找到用户输入的某个函数的导数。
x = np.linspace(-5,5)
print('Options are:')
print('1. y = x')
print('2. y = ax^2')
print('3. y = k(x-a)(x-b)')
print('4. y = k(x-a)(x-b)(x-c)')
n = int(input('Your option is: '))
if n == 1:
func = x
plt.plot(x,func)
n = input('Do you wanna find its derivative? (Y/N)')
if n == 'Y':
print('Derivative is 1')
else:
print('Done')
elif n == 2:
a = int(input('Enter a value for a: '))
func = a*x**2
plt.plot(x,func)
n = input('Do you wanna find its derivative? (Y/N)')
if n == 'Y':
x = sp.Symbol('x')
print(sp.diff(func,x))
else:
print('Done')
当 n == 2 时, 我需要用户为 ax^2 函数输入 'a' 值。 然后代码将绘制图形 ax^2。 然后继续询问用户是否想要函数的导数。 在这部分我很困惑,因为我上面使用的语法,它不显示导数,而是显示如下所示的 0 列表。
1. y = x
2. y = ax^2
3. y = k(x-a)(x-b)
4. y = k(x-a)(x-b)(x-c)
Your option is: 2
Enter a value for a: 3
Do you wanna find its derivative? (Y/N)Y
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
我该如何解决这个问题?
问题发生在您设置func = a*x**2
的那一行。如您所见,x
是一个向量(还不是符号)。这意味着 func
也是一个向量。当 func
传递给 sp.diff
时,它不再是一个函数,而是一个导致该问题的向量。
因此,您需要将 sp.diff
行更改为:
sp.diff(a*x**2, x)
# 6*x (when a=3)
旁注
将 x
同时用作 变量 和 符号 是一个非常糟糕的主意。很乱,以后会导致很多问题。
您需要在定义函数 func
之前定义符号 x
。对于绘图,您可以使用 SymPy 的绘图模块。以下是一个可能的解决方案。
import sympy as sp
import numpy as np
from sympy.plotting import plot
x = sp.Symbol('x')
print('Options are:')
print('1. y = x')
print('2. y = ax^2')
print('3. y = k(x-a)(x-b)')
print('4. y = k(x-a)(x-b)(x-c)')
n = int(input('Your option is: '))
if n == 1:
func = x
plot(func)
n = input('Do you wanna find its derivative? (Y/N)')
if n == 'Y':
print('Derivative is 1')
else:
print('Done')
elif n == 2:
a = int(input('Enter a value for a: '))
func = a*x**2
plot(func)
n = input('Do you wanna find its derivative? (Y/N)')
if n == 'Y':
print(sp.diff(func,x))
else:
print('Done')