今天尝试一下在python中使用库函数求极限和求导。
求极限
求的python代码如下:
import numpy as np
import matplotlib.pyplot as plt
import sympy as sp
def main():
x = sp.Symbol("x")
f = sp.sin(x) / x
f_limit = sp.limit(f, x, 'oo')
print(f'f(x) = {f} 的极限是:{f_limit}')
x_ray = np.arange(-100, 100, 0.01)
y_ray = np.sin(x_ray) / x_ray
# 画坐标轴
plt.figure(figsize=(6, 5))
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('axes', 0.5))
# 生成,展示
plt.plot(x_ray, y_ray)
plt.show()
#
# output:
# f(x) = sin(x)/x 的极限是:0
#
通过下面的图片也可以看出x趋向于无穷大时逐渐向0靠拢。
求导
自制版(比较low)
根据导数的定义:导数是函数的局部性质。一个函数在某一点的导数描述了这个函数在这一点附近的变化率。如果函数的自变量和取值都是实数的话,函数在某一点的导数就是该函数所代表的曲线在这一点上的切线斜率。
其实求导就是求该点的切线斜率,斜率 = 对边/临边。
如何求上图中点的斜率呢?
读图可知,对边长度 = ,邻边长度 =
当然这里的斜边的斜率还不是点的斜率,这里让 尽可能的小,小到P点和 几乎接近,这时的斜率也就近似的取到 点的斜率了。
推广到一般形式:
对边的长度 = 高点 - 低点 =
邻边的长度 = 远点 - 近点 =
即:
对于聪明的你,以上都是废话,直接敲代码,计算的导数:
def numerical_diff(f, x):
# 无穷小的值
delta = 1e-10
return (f(x + delta) - f(x)) / delta
def f1(x):
return x ** 2
print(numerical_diff(f1, 2))
# output:
# 4.000000330961484
没错就是这么简单。。。
的导数是2x,x=2带进去是4。
这里无穷小的值其实是不准确的,只能取个近似吧。
库函数版
直接上代码:
import sympy as sp
x = sp.symbols('x')
expr = sp.sin(x)
# sp.diff 求导返回结果表达式
x_d = sp.diff(expr)
print(x_d)
# 计算x=0时,sin(x)的导数
print(x_d.evalf(subs={'x': 0}))
# output:
# cos(x)
# 1.00000000000000
太厉害了,不知道怎么做到的。。。