函数建立了变量之间的关系, 有时候也需要考虑函数的连续性. 例如观察温度的变化, 当时间变动微小时, 气温的变化也很微小, 这种特点就是连续性
函数的连续性
设函数
f
(
x
)
f(x)
f(x)在点
x
0
x_0
x0的某个领域内有定义, 当自变量的增量
Δ
x
\Delta x
Δx趋于
0
0
0时, 对应的函数的增量
Δ
y
=
f
(
x
0
+
Δ
x
)
−
f
(
x
0
)
\Delta y=f(x_0 + \Delta x)-f(x_0)
Δy=f(x0+Δx)−f(x0), 即
lim
Δ
x
→
0
Δ
y
=
lim
Δ
X
→
0
[
f
(
x
0
+
Δ
x
)
+
f
(
x
0
)
)
]
=
0
\lim_{\Delta x \rightarrow 0} \Delta y = \lim_{\Delta X \rightarrow 0}[f(x_0 + \Delta x) + f(x_0))] = 0
Δx→0limΔy=ΔX→0lim[f(x0+Δx)+f(x0))]=0
称函数
f
(
x
)
f(x)
f(x)在
x
0
x_0
x0处连续
import numpy as np
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif']=['Hiragino Sans GB'] # 修改字体
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
x = np.linspace(0, 10, 400)
y = x ** 2
# Delta X
y1 = np.linspace(0, y[200], 100)
x1 = len(y1) * [x[200]]
# Delta X 夹角
x3 = x[200:350]
y3 = len(x[200:350]) * [y[200]]
# Delta Y
y2 = np.linspace(0, y[350], 100)
x2 = len(y1) * [x[350]]
plt.figure(figsize=(6, 6))
plt.plot(x, y, label="$y=f(x)=x^2$")
# 绘制 Delta x 线条, 和文本展示
plt.plot(x1, y1, color='gray', linestyle='--')
plt.plot(x3, y3, color='gray', linestyle='--')
plt.text(x3[70], y3[70] - 3, '$\Delta x$')
plt.text(x1[50] - 0.1, -3, '$x_0$')
# 绘制 Delta y 线条
plt.plot(x2, y2, color='gray', linestyle='--')
plt.text(x2[50] + 0.1, y2[50], '$\Delta y$')
plt.text(x2[50] - 0.1, -3, '$x_0 + \Delta x$')
plt.title("函数的连续性")
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.grid()
plt.show()
函数连续性需要满足的条件
函数 f ( x ) f(x) f(x)在点 x 0 x_0 x0处连续, 需要满足以下的条件
- 函数在该点处有定义
- 函数在该点处极限 lim x → x 0 f ( x ) \lim_{x \rightarrow x_0}f(x) limx→x0f(x)存在
- 极限值等于函数值 f ( x 0 ) f(x_0) f(x0)
已知函数
f
(
x
)
=
{
x
+
1
,
x
≤
0
s
i
n
x
x
,
x
>
0
f(x)= \begin{cases} x + 1, x \le 0 \\ \frac{sinx}{x}, x \gt 0 \end{cases}
f(x)={x+1,x≤0xsinx,x>0, 判断
f
(
x
)
f(x)
f(x)在
x
=
−
x=-
x=−处的连续性
解:
f
(
0
)
=
1
f(0)=1
f(0)=1,
lim
x
→
0
−
(
x
+
1
)
=
1
\lim_{x \rightarrow 0^-}(x+1)=1
limx→0−(x+1)=1,
lim
x
→
0
+
s
i
n
x
x
=
1
\lim_{x \rightarrow 0^+}\frac{sinx}{x}=1
limx→0+xsinx=1, 极限存在并且等于
f
(
0
)
f(0)
f(0)
满足上述三个条件, 因此函数
f
(
x
)
f(x)
f(x)在
x
=
0
x=0
x=0处连续
import numpy as np
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif']=['Hiragino Sans GB'] # 修改字体
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
x = np.linspace(0, 10, 400)
y = np.piecewise(x, [x <= 0, x > 0], [lambda t: t + 1, lambda t: np.sin(t) / t])
plt.figure(figsize=(6, 6))
plt.plot(x, y)
plt.title("函数是否连续")
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.grid()
plt.show()
函数的间断点
设函数 f ( x ) f(x) f(x)在点 x 0 x_0 x0的某个去心邻域内有定义, 如果函数 f ( x ) f(x) f(x)有下列3种情况之一, 那么函数 f ( x ) f(x) f(x)在点 x 0 x_0 x0处不连续, 点 x 0 x_0 x0称为函数 f ( x ) f(x) f(x)的间断点或者不连续点
- 函数 f ( x ) f(x) f(x)在点 x = x 0 x=x_0 x=x0处没有定义
- 函数 f ( x ) f(x) f(x)虽然在点 x = x 0 x=x_0 x=x0处有定义, 但是在该点处的极限 lim x → x 0 f ( x ) \lim_{x \rightarrow x_0}f(x) limx→x0f(x)不存在
- 函数 f ( x ) f(x) f(x)虽然x_0在点 x = x 0 x=x_0 x=x0处有定义, 且该点处的极限 lim x → x 0 f ( x ) \lim_{x \rightarrow x_0}f(x) limx→x0f(x)存在, 但 lim x → x f ( x ) ≠ f ( x 0 ) \lim_{x \rightarrow x}f(x) \ne f(x_0) limx→xf(x)=f(x0)
间断点的常见类型
- 跳跃间断点,
l
i
m
x
→
x
0
+
f
(
x
)
lim_{x \rightarrow x_0^+}f(x)
limx→x0+f(x),
l
i
m
x
→
x
0
−
f
(
x
)
lim_{x \rightarrow x_0^-}f(x)
limx→x0−f(x)极限都存在, 但是
l
i
m
x
→
x
0
+
f
(
x
)
≠
l
i
m
x
→
x
0
−
f
(
x
)
lim_{x \rightarrow x_0^+}f(x) \ne lim_{x \rightarrow x_0^-}f(x)
limx→x0+f(x)=limx→x0−f(x)
比如:
f ( x ) = { − 1 , x < 0 0 , x = 0 1 , x > 0 , 0 为跳跃间断点 f(x) = \begin{cases} -1, x \lt 0 \\ 0, x = 0 \\ 1, x \gt 0 \end{cases}, 0 为跳跃间断点 f(x)=⎩ ⎨ ⎧−1,x<00,x=01,x>0,0为跳跃间断点 - 可去间断点,
l
i
m
x
→
x
0
f
(
x
)
lim_{x \rightarrow x_0}f(x)
limx→x0f(x)极限存在且相等, 但是
l
i
m
x
→
x
0
+
f
(
x
)
≠
l
i
m
x
→
x
0
−
f
(
x
)
lim_{x \rightarrow x_0^+}f(x) \ne lim_{x \rightarrow x_0^-}f(x)
limx→x0+f(x)=limx→x0−f(x)或
f
(
x
)
f(x)
f(x)在该点无定义
f ( x ) = x 2 − 1 x 2 − 3 x + 2 , ( 1 , 2 ) 为跳跃间断点 f(x) = \frac{x^2 - 1}{x^2 - 3x + 2}, (1, 2)为跳跃间断点 f(x)=x2−3x+2x2−1,(1,2)为跳跃间断点
导数
如果我们知道平均速度
v
=
s
t
v=\frac{s}{t}
v=ts, 那么如何来表示瞬时速度呢?
瞬时经过的路程:
Δ
s
=
s
(
t
0
+
Δ
t
)
−
s
(
t
0
)
\Delta s= s(t_0 + \Delta t) - s(t_0)
Δs=s(t0+Δt)−s(t0)
那么这一小段的
Δ
t
\Delta t
Δt的平均速度:
v
ˉ
=
Δ
s
Δ
t
=
s
(
t
0
+
Δ
t
)
−
s
(
t
0
)
Δ
t
\bar{v} = \frac{\Delta s}{\Delta t} = \frac{s(t_0 + \Delta t) - s(t_0)}{\Delta t}
vˉ=ΔtΔs=Δts(t0+Δt)−s(t0)
当
Δ
→
0
\Delta \rightarrow 0
Δ→0, 对应的
v
ˉ
\bar{v}
vˉ就是瞬时速度, 此刻
t
0
t_0
t0的瞬时速度
v
=
lim
Δ
t
→
0
=
lim
Δ
t
→
0
s
(
t
0
+
Δ
t
)
−
s
(
t
0
)
Δ
t
v=\lim_{\Delta t \rightarrow 0}=\lim_{\Delta t \rightarrow 0} \frac{s(t_0 + \Delta t) - s(t_0)}{\Delta t}
v=limΔt→0=limΔt→0Δts(t0+Δt)−s(t0)
瞬时速度就是变化率的问题
定义
设
f
(
x
)
f(x)
f(x)在
x
0
x_0
x0的某个邻域内有意义, 当
x
x
x的增量为
Δ
x
\Delta x
Δx,
y
y
y的增量为
Δ
y
\Delta y
Δy为
f
(
x
0
+
Δ
x
)
−
f
(
x
0
)
f(x_0 + \Delta x) - f(x_0)
f(x0+Δx)−f(x0)
当
Δ
x
→
0
\Delta x \rightarrow 0
Δx→0时,
Δ
y
Δ
x
\frac{\Delta y}{\Delta x}
ΔxΔy的极限存在, 则称函数
f
(
x
)
f(x)
f(x)在
x
0
x_0
x0处可导. 此极限值为函数
f
(
x
)
f(x)
f(x)在点
x
0
x_0
x0的导数, 记做
f
′
(
x
0
)
f'(x_0)
f′(x0)
即:
f
′
(
x
)
=
lim
x
→
0
Δ
y
Δ
x
=
lim
x
→
0
f
(
x
0
+
Δ
x
)
−
f
(
x
0
)
Δ
x
f'(x) = \lim_{x \rightarrow 0} \frac{\Delta y}{\Delta x} = \lim_{x \rightarrow 0} \frac{f(x_0 + \Delta x) - f(x_0)}{\Delta x}
f′(x)=limx→0ΔxΔy=limx→0Δxf(x0+Δx)−f(x0)
变换形式:
y
′
∣
x
=
x
0
y'|_{x=x_0}
y′∣x=x0,
d
y
d
x
∣
x
=
x
0
\frac{dy}{dx}|_{x=x_0}
dxdy∣x=x0,
d
f
(
x
)
d
x
∣
x
=
x
0
\frac{df(x)}{dx}|_{x=x_0}
dxdf(x)∣x=x0
几何意义
通常函数 y = f ( x ) y=f(x) y=f(x)的导数表示了因为自变量 y y y在点 x 0 x_0 x0处变化量 x x x变化的快慢程度, 从几何意义上, 函数在某一点 x 0 x_0 x0的变化率等于这一点的切线的斜率
P 0 P_0 P0的导数为在点 P 0 P_0 P0处所做切线的斜率, 即 f ′ ( x 0 ) = t a n α f'(x_0)=tan \alpha f′(x0)=tanα, 其中 α \alpha α是切线的倾角
import numpy as np
import matplotlib.pyplot as plt
import sympy as sp
# 设置中文字体
plt.rcParams['font.sans-serif']=['Hiragino Sans GB'] # 修改字体
plt.rcParams['axes.unicode_minus'] = False # 正常显示负号
def get_tangent_line(x, f, a):
"""获取切线方程
公式为: y - f(a) = f'(a)(x - a)
:param x: 原始x的值
:param f: 原始函数
:a: 从那个点进行切, 获取这个点的切线方程
"""
df = sp.diff(f, x)
f_val = f.subs(x, a)
df_val = df.subs(x, a)
# y - f_val = df_val(x - 1)
# y = df_val(x - 1) + f_val
return df_val * (x - a) + f_val
def get_func_args(func):
"""原函数"""
x = sp.Symbol("x")
return x, func(x)
x_vals = np.linspace(0, 10, 400)
# 定义原函数
f_x = lambda t: t ** 2
# 获取sympy类型原函数
x, f_x = get_func_args(f_x)
np_f_x = sp.lambdify(x, f_x, 'numpy')
y_vals = np_f_x(x_vals)
# 获取点 4 位置 的切线方程
a = 4
tangent_line = get_tangent_line(x, f_x, a=a)
print(f"点 x={a} 处的切线方程: ", tangent_line)
# 通过导函数获取新的函数然后计算新的 numpy 的切线方程
tangent_f_x = sp.lambdify(x, tangent_line, "numpy")
tangent_y_vals = tangent_f_x(x_vals)
# Delta X
y_vals1 = np.linspace(0, y_vals[200], 100)
x_vals1 = len(y_vals1) * [x_vals[200]]
# Delta X 夹角
x_vals3 = x_vals[200:350]
y_vals3 = len(x_vals[200:350]) * [y_vals[200]]
# Delta Y
y_vals2 = np.linspace(0, y_vals[350], 100)
x_vals2 = len(y_vals1) * [x_vals[350]]
plt.figure(figsize=(6, 6))
# 打印原函数
plt.plot(x_vals, y_vals, label="原函数: $f(x)=x^2$")
# 打印切线函数
plt.plot(x_vals, tangent_y_vals, label=f"切线方程: $f(x)={tangent_line}$", linestyle='--')
# 绘制 Delta x 线条, 和文本展示
plt.plot(x_vals1, y_vals1, color='gray', linestyle='--')
plt.plot(x_vals3, y_vals3, color='gray', linestyle='--')
plt.text(x_vals3[70], y_vals3[70] - 3, '$\Delta x$')
plt.text(x_vals1[50] - 0.1, -3, '$x_0$')
# 绘制 Delta y 线条
plt.plot(x_vals2, y_vals2, color='gray', linestyle='--')
plt.text(x_vals2[50] + 0.1, y_vals2[50], '$\Delta y$')
plt.text(x_vals2[50] - 0.1, -3, '$x_0 + \Delta x$')
plt.title("函数的连续性")
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.grid()
plt.show()
求导法则
如果函数 u = u ( x ) u=u(x) u=u(x), v = v ( x ) v=v(x) v=v(x)都在点 x x x有导数, 那么他们的和, 差, 积, 商(除分母为0的点外), 都在点 x x x具有导数, 且满足以下法则
- [ u ( x ) ± v ( x ) ] ′ = u ′ ( x ) ± v ′ ( x ) [u(x) \pm v(x)]' = u'(x) \pm v'(x) [u(x)±v(x)]′=u′(x)±v′(x)
-
[
u
(
x
)
∗
v
(
x
)
]
′
=
u
′
(
x
)
∗
v
(
x
)
+
u
(
x
)
∗
v
′
(
x
)
[u(x) * v(x)]' = u'(x) * v(x) + u(x) * v'(x)
[u(x)∗v(x)]′=u′(x)∗v(x)+u(x)∗v′(x)
当 v ( x ) = C v(x)=C v(x)=C, C C C是常量时, ( C u ) ′ = C u ′ (Cu)'=Cu' (Cu)′=Cu′ -
[
u
(
x
)
v
(
x
)
]
′
=
u
′
(
x
)
∗
v
(
x
)
−
u
(
x
)
∗
v
′
(
x
)
v
2
(
x
)
,
v
(
x
)
≠
0
[\frac{u(x)}{v(x)}]' = \frac{u'(x)*v(x) - u(x) * v'(x)}{v^2(x)}, v(x) \ne 0
[v(x)u(x)]′=v2(x)u′(x)∗v(x)−u(x)∗v′(x),v(x)=0
当 v ( x ) = C v(x)=C v(x)=C, C C C是常量时, ( C V ) ′ = − C v ′ v 2 (\frac{C}{V})'=\frac{-Cv'}{v^2} (VC)′=v2−Cv′
反函数求导
设函数
x
=
f
(
y
)
x = f(y)
x=f(y)在区间
D
y
D_y
Dy内单调可导, 且
f
′
(
y
)
≠
x
f'(y) \ne x
f′(y)=x, 那么它的反函数
y
=
f
−
1
(
x
)
y=f^{-1}(x)
y=f−1(x)在区间
D
x
=
{
x
=
f
(
y
)
,
y
∈
D
y
}
D_x=\{x=f(y), y \in D_y\}
Dx={x=f(y),y∈Dy}内也可导, 且满足以下公式
[
f
−
1
(
x
)
]
′
=
1
f
′
(
y
)
或
d
y
d
x
=
1
d
x
d
y
[f^{-1}(x)]' = \frac{1}{f'(y)} 或 \frac{dy}{dx} = \frac{\frac{1}{dx}}{dy}
[f−1(x)]′=f′(y)1或dxdy=dydx1
复合函数的求导法则
如果 u = g ( x ) u=g(x) u=g(x)在点 x x x处可导, y = f ( u ) y=f(u) y=f(u)在点 u = g ( x ) u=g(x) u=g(x)处可导, 那么复合函数 y = f [ g ( x ) ] y=f[g(x)] y=f[g(x)]在点 x x x处可导, 且其导数为 d y d x = f ′ ( u ) ∗ g ′ ( x ) 或 d y d x = d y d u ∗ d u d x \frac{dy}{dx}=f'(u) * g'(x)或 \frac{dy}{dx}= \frac{dy}{du} * \frac{du}{dx} dxdy=f′(u)∗g′(x)或dxdy=dudy∗dxdu
常用求导公式
一、基础函数导数
常数函数
d
d
x
(
c
)
=
0
\frac{d}{dx}(c) = 0
dxd(c)=0
解释:常数无变化率,导数为0。
幂函数
d
d
x
(
x
n
)
=
n
x
n
−
1
\frac{d}{dx}(x^n) = n x^{n-1}
dxd(xn)=nxn−1
解释:幂法则,指数乘系数后指数减1(
n
n
n为任意实数)。
自然指数函数
d
d
x
(
e
x
)
=
e
x
\frac{d}{dx}(e^x) = e^x
dxd(ex)=ex
解释:自然指数函数的导数与自身相同。
一般指数函数
d
d
x
(
a
x
)
=
a
x
ln
a
\frac{d}{dx}(a^x) = a^x \ln a
dxd(ax)=axlna
解释:底数为
a
a
a的指数函数导数需乘以
ln
a
\ln a
lna。
自然对数函数
d
d
x
(
ln
x
)
=
1
x
\frac{d}{dx}(\ln x) = \frac{1}{x}
dxd(lnx)=x1
解释:对数函数的导数与自变量成反比。
对数函数(底数
a
a
a)
d
d
x
(
log
a
x
)
=
1
x
ln
a
\frac{d}{dx}(\log_a x) = \frac{1}{x \ln a}
dxd(logax)=xlna1
解释:换底公式推导出的对数导数。
二、三角函数导数
d
d
x
(
sin
x
)
=
cos
x
\frac{d}{dx}(\sin x) = \cos x
dxd(sinx)=cosx
解释:正弦函数的导数是余弦。
d
d
x
(
cos
x
)
=
−
sin
x
\frac{d}{dx}(\cos x) = -\sin x
dxd(cosx)=−sinx
解释:余弦函数的导数是负正弦。
d
d
x
(
tan
x
)
=
sec
2
x
\frac{d}{dx}(\tan x) = \sec^2 x
dxd(tanx)=sec2x
解释:正切函数的导数为正割平方。
d
d
x
(
cot
x
)
=
−
csc
2
x
\frac{d}{dx}(\cot x) = -\csc^2 x
dxd(cotx)=−csc2x
解释:余切函数的导数为负余割平方。
d
d
x
(
sec
x
)
=
sec
x
tan
x
\frac{d}{dx}(\sec x) = \sec x \tan x
dxd(secx)=secxtanx
解释:正割的导数是正割乘正切。
d
d
x
(
csc
x
)
=
−
csc
x
cot
x
\frac{d}{dx}(\csc x) = -\csc x \cot x
dxd(cscx)=−cscxcotx
解释:余割的导数是负余割乘余切。
三、反三角函数导数
d
d
x
(
arcsin
x
)
=
1
1
−
x
2
\frac{d}{dx}(\arcsin x) = \frac{1}{\sqrt{1-x^2}}
dxd(arcsinx)=1−x21
解释:反正弦函数的导数与根号内
1
−
x
2
1-x^2
1−x2相关。
d
d
x
(
arccos
x
)
=
−
1
1
−
x
2
\frac{d}{dx}(\arccos x) = -\frac{1}{\sqrt{1-x^2}}
dxd(arccosx)=−1−x21
解释:反余弦函数的导数为负的相同形式。
d
d
x
(
arctan
x
)
=
1
1
+
x
2
\frac{d}{dx}(\arctan x) = \frac{1}{1+x^2}
dxd(arctanx)=1+x21
解释:反正切函数的导数为分母
1
+
x
2
1+x^2
1+x2的分数。
编程求导
import sympy as sp
# 定义变量 x
x = sp.Symbol('x')
# 定义函数 y = f(x)
f_x = x**2 + 2*x + 1
# 求导函数
d_f = sp.diff(f_x, x)
print(d_f)
# output: 2*x + 2
# sqrt(x): 平方根
f_x = sp.asin(sp.sqrt(sp.sin(x)))
d_f = sp.diff(f_x, x)
print(d_f)
# output: cos(x)/(2*sqrt(1 - sin(x))*sqrt(sin(x)))