首页 > 解决方案 > 如何写函数的导数

问题描述

我必须用 python 写一个方程。等式是计算和f(x)=(3+2x)e-x 计算位置,然后将其积分。对于这个问题,我尝试了 python 中的程序f'(x)x=2f'(x)=limit(i->0){[f(x+i)-f(x-i)]/2i}i= 10^-nn=2, 3, 4

import math
from math import exp
import sympy as sp
x = sp.Symbol('x')
sp.diff((3+2*x)*math.exp(-x),x)
from scipy.misc import derivative
def f(x):
    return (3+2*x)*math.exp(-x)
def d(x):
    return derivative (f,x)
def d(x):
    h=1./1000.
    rise=f(x+h)-f(x-h)
    run=2*h
    slop = rise/run
    return slop
def integral(startingx, endingx, number of rectangles):
    width = (endingx-startingx)/number of rectangles
    runningsum = 0
    for i in range(number of rectangles):
        height = f(startingx + i*width)
        area= height*width
        runningSum += area
        return runningSum
print (f)
print (derivative(f,2))
print (integral)

标签: pythonsympy

解决方案


以下 sympy 代码象征性地计算导数和积分。请注意,您不能在符号计算中使用 Python 数学库或其他库(如 scipy 和 numpy)中的函数。lambdify()如果您需要生成用于数值计算的函数,Sympy 有一个函数。Sympy 的subs命令可以用特定值替换变量。simplify()以更简单的形式编写公式可能很有用。

import sympy as sp
x = sp.Symbol('x')

def f(x):
    return (3+2*x)*sp.exp(-x)

def d(x):
    return sp.diff(f(x), x)

def derivative_via_formula(x, eps):
    return (f(x + eps) - f(x - eps)) / (2 * eps)

print ("f(x):", f(x))
print ("derivative:", d(x).simplify())
print ("derivative at x=2 :", d(x).subs(x, 2).simplify())
print ("derivative at x=2 evaluated:", d(x).subs(x, 2).evalf())
print ("the integral of f(x):", sp.integrate(f(x)).simplify())
for n in range(2,5):
    eps = 10**(-n)
    print("derivative_via_formula, eps=10^-%d:" % n, derivative_via_formula(2, eps))

输出:

f(x): (2*x + 3)*exp(-x)
derivative: -(2*x + 1)*exp(-x)
derivative at x=2 : -5*exp(-2)
derivative at x=2 evaluated: -0.676676416183063
the integral of f(x): -(2*x + 5)*exp(-x)
derivative_via_formula, eps=10^-2: -0.676678671737280
derivative_via_formula, eps=10^-3: -0.676676438738810
derivative_via_formula, eps=10^-4: -0.676676416409006

推荐阅读