我是蟒蛇初学者。我最近了解了症状及其象征性的操作能力,特别是分化能力。我正在尝试以最简单的方式执行以下操作:
定义f(x,y)=x^2+xy^2。
区分f相对于x。所以f’(x,y)=2x+xy^2。
计算导数,例如f’(1,1)=2+1=3。
我知道怎么做1和2。问题是,当我试图在步骤3中评估导数时,我得到一个错误:Python不能计算导数。下面是一个最小的工作示例:

import sympy as sym
import math


def f(x,y):
    return x**2 + x*y**2


x, y = sym.symbols('x y')

def fprime(x,y):
    return sym.diff(f(x,y),x)

print(fprime(x,y)) #This works.

print(fprime(1,1))

我希望最后一行打印3。它不打印任何东西,并说“不能计算一阶导数wrt 1”。

最佳答案

你的函数不是导数。它是一个返回导数的函数(作为一个symphy表达式)。为了评估它,可以使用fprime将值插入到该表达式中:

>>> fprime(x, y).evalf(subs={x: 1, y: 1})
3.00000000000000

如果希望.subs实际上是派生表达式,则应将派生表达式直接赋给fprime,而不是将其包装在函数中。然后您可以直接fprime它:
>>> fprime = sym.diff(f(x,y),x)
>>> fprime.evalf(subs={x: 1, y: 1})
3.00000000000000

07-27 13:43