Как найти производную в Python с помощью SymPy - PullRequest
0 голосов
/ 29 мая 2020

Я хочу найти производную определенной функции, введенной пользователем.

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, мне нужно, чтобы пользователь ввел значение 'a' для функции ax ^ 2 . Затем код построит график ax ^ 2. Затем переходит к вопросу, хочет ли пользователь получить производную функции. В этой части я запутался, потому что с синтаксисом, который я использовал выше, он не показывает производную, а вместо этого показывает список нулей, как показано ниже.

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]

Как исправить эту проблему?

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Вам нужно будет определить символ x перед определением функции func. Для построения вы можете использовать графические модули 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')
0 голосов
/ 29 мая 2020

Проблема возникает в строке, где вы установили func = a*x**2. Как видите, x - вектор (еще не символ). Это означает, что func тоже вектор. Когда func передается в sp.diff, это больше не функция, теперь это вектор, который приводит к этой проблеме.

Итак, вам нужно изменить строку sp.diff, чтобы она выглядела так:

sp.diff(a*x**2, x)
# 6*x (when a=3)

Сноска

Очень плохая идея использовать x как как переменную , так и символ . Это беспорядочно и позже приведет к множеству проблем.

...