这里的初学者程序员希望编写一个可以简单地导出数学函数的函数。
该函数应该像这样运行:
f(x) = x ** 2 + 2 * x <--- 用户输入
f'(x) = 2 * x + 2
我知道有 Wolfram 和 Maple,但我想编写自己的实际派生程序。我想知道这是否可能。
这里的初学者程序员希望编写一个可以简单地导出数学函数的函数。
该函数应该像这样运行:
f(x) = x ** 2 + 2 * x <--- 用户输入
f'(x) = 2 * x + 2
我知道有 Wolfram 和 Maple,但我想编写自己的实际派生程序。我想知道这是否可能。
这显然是可能的,因为有很多程序可以进行符号区分。话虽如此,这并非微不足道。对于上面的简单示例,您需要编写一个解析器:
那只会处理这种非常基本的衍生类型——没有链式规则、产品规则等,你必须分别实现每一个。
所以是的,绝对可行,但也很重要。
这称为符号微分。
您需要将方程解析为表达式和运算树,然后将正常的微分规则(来自微积分 I)应用于树。
当然你可以花几天时间编写自己的微分程序(幸运的是微分非常简单),但如果这不是练习,你实际上可以使用准备好的东西,例如你可以使用sympy:
import sympy
x = sympy.Symbol('x')
sympy.diff(x**2+2*x, x)
# return: 2*x + 2
SICP中有一个很好的基本符号微分示例。它是一个方案,而不是 python,但是一旦你处理了解析你的输入,它应该很容易翻译。
这是绝对可能的。您首先需要解析用户的输入字符串以获取您可以使用的函数的表示形式。然后,您需要根据要支持的微分规则处理函数中的各种术语。