一些重要的函数图像 matplotlib
import math import numpy as np import matplotlib.pyplot as plt from matplotlib import cm import warnings warnings.filterwarnings("ignore")
幂函数
x = np.linspace(-3 , 3, 64) x1 = np.sqrt(x) x2 = np.power(x, 2) x3 = np.power(x, 3) x4 = 1/x plt.plot(x,x,"red",lw=1) plt.plot(x,x1,"orange",lw=1) plt.plot(x,x2,"magenta",lw=1) plt.plot(x,x3,"blue",lw=1) plt.plot(x,x4,"green",lw=1) plt.grid(True) plt.ylim([-2, 2]) plt.xlabel('X') plt.ylabel('Y') plt.axhline(color='grey') plt.axvline(color='grey') plt.show()
指数函数和对数函数
x = np.linspace(-3 , 3 ,64) x1 = np.power(np.e, x) x2 = np.log(x) plt.plot(x,x,"grey",lw=1) plt.plot(x,x1,"magenta",lw=1) plt.plot(x,x2,"orange",lw=1) plt.box() plt.grid(True) plt.ylim([-3, 3]) plt.xlabel('X') plt.ylabel('Y') plt.axhline(color='grey') plt.axvline(color='grey') plt.show()
三角函数
正弦和余弦
x = np.linspace(-2*np.pi,2*np.pi, 64) sin = np.sin(x) cos = np.cos(x) plt.plot(x,sin,"red",lw=1) plt.plot(x,cos,"orange",lw=1) plt.box() plt.grid(True) plt.ylim([-1.5, 1.5]) plt.xlabel('X') plt.ylabel('Y') plt.axhline(color='grey') plt.axvline(color='grey') plt.axis('equal') plt.show()
正切和余切
tan = np.tan(x) cot = 1/tan plt.plot(x,tan,"red",lw=1) plt.plot(x,cot,"blue",lw=1) plt.grid(True) plt.box() plt.ylim([-1.5, 1.5]) plt.axhline(color='grey') plt.axvline(color='grey') plt.show()
正割和余割
sec = 1/cos csc = 1/sin plt.plot(x,sec,"magenta",lw=1) plt.plot(x,csc,"blue",lw=1) plt.grid(True) plt.box() plt.ylim([-1.5, 1.5]) plt.axhline(color='grey') plt.axvline(color='grey') plt.show()
心形线
y = a( 1 - \cos \theta)
t = np.linspace(-2*np.pi,2*np.pi,64) r = 2 * (1 - np.cos(t)) ax = plt.subplot(111, projection='polar') ax.plot(t, r,"magenta",lw=1) plt.grid(True) plt.box() plt.axhline(color='grey') plt.axvline(color='grey') plt.show()
三叶玫瑰线
r = a\sin 3 \theta
t = np.linspace(-2*np.pi,2*np.pi, 128) r = 2 * np.sin(3 * t) ax = plt.subplot(111, projection='polar') ax.plot(t, r,"red",lw=1) plt.grid(True) plt.box() plt.axhline(color='grey') plt.axvline(color='grey') plt.show()
四叶玫瑰线
r = a\sin 4 \theta
t = np.linspace(-2*np.pi,2*np.pi, 128) r = 2 * np.sin(4 * t) ax = plt.subplot(111, projection='polar') ax.plot(t, r,"red",lw=1) plt.grid(True) plt.box() plt.axhline(color='grey') plt.axvline(color='grey') plt.show()
阿基米德螺旋线
r = a\theta
t = np.linspace(-2*np.pi,2*np.pi, 128) r = 2 * t ax = plt.subplot(111, projection='polar') ax.plot(t, r,"brown",lw=1) plt.grid(True) plt.box() plt.axhline(color='grey') plt.axvline(color='grey') plt.show()
伯努利双纽线
r^2 = 2a^2\cos 2\theta
t = np.linspace(-2*np.pi,2*np.pi, 128) r = 2 * np.cos(2 * t) ax = plt.subplot(111, projection='polar') ax.plot(t, r,"magenta",lw=1) plt.grid(True) plt.box() plt.axhline(color='grey') plt.axvline(color='grey') plt.show()
摆线
摆线方程
$$
\begin{aligned}
x =& a(t - \sin t) \
y =& a(1 - \cos t)
\end{aligned}
$$
t = np.linspace(-2*np.pi,2*np.pi, 64) x = 2 * (t - np.sin(t)) y = 2 * (1 - np.cos(t)) plt.grid() plt.box() plt.ylim([-1, 3]) plt.axes().set_aspect('equal', 'datalim') plt.axhline(color='grey') plt.axvline(color='grey') plt.plot(x,y,"brown",lw=1) plt.axis('equal') plt.show()
星形线
t = np.linspace(-4,4, 64) x = 2 * np.power(np.cos(t), 3) y = 2 * np.power(np.sin(t), 3) plt.grid() plt.box() plt.ylim([-2, 2]) plt.axhline(color='grey') plt.axvline(color='grey') plt.axis('equal') plt.plot(x,y,"brown",lw=1) plt.show()
关于泰勒级数的理解
x = np.linspace(-3*np.pi,3*np.pi, 64) sin = np.sin(x) y3 = x - 1/math.factorial(3) * (x ** 3) y5 = x - 1/math.factorial(3) * (x ** 3) + 1/math.factorial(5) * (x ** 5) plt.plot(x,sin,"red",lw=1) plt.plot(x,x,"blue",lw=1) plt.plot(x,y3,"green",lw=1) plt.plot(x,y5,"brown",lw=1) plt.grid(True) plt.box() plt.ylim([-3, 3]) plt.xlabel('X') plt.ylabel('Y') plt.axhline(color='grey') plt.axvline(color='grey') plt.show()
绘制函数图像如下:
如上图所示,可以看到 \sin x 的泰勒级数展开式,每增加一项,以线性多项式函数来逼近 \sin x 就越精确,这也就是线性的泰勒级数与非线性函数相等的直观表示。
悬链线
\displaystyle y=a \cosh(\frac{x}{a})
x = np.linspace(-8, 8, 32) y = 2 * np.cosh(x / 2) plt.plot(x, y, "magenta",lw=1) plt.grid(True) plt.box() plt.ylim([0, 10]) plt.xlabel('X') plt.ylabel('Y') plt.axhline(color='grey') plt.axvline(color='grey') plt.show()
悬链线看起来真像抛物线,伯努利兄弟俩对这个颇有研究
一些重要的二维函数图像
抛物柱面
y = x^2
fig = plt.figure() ax = fig.gca(projection='3d') x = np.linspace(-5, 5, 16) z = np.linspace(-5, 5, 3) X, Z = np.meshgrid(x, z) Y = X**2 alpha = 0.5 cmap = cm.bone ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') plt.title(r"$y = x^2$") surf = ax.plot_wireframe(X, Y, Z, alpha=alpha, cmap=cmap) plt.show()
椭球面
fig = plt.figure() ax = fig.gca(projection='3d') a, b, c = 3, 4, 5 theta = np.linspace(0, 2*np.pi, 16) phi = np.linspace(0, np.pi, 16) X = a * np.outer(np.cos(theta), np.sin(phi)) Y = b * np.outer(np.sin(theta), np.sin(phi)) Z = c * np.outer(np.ones(np.size(theta)), np.cos(phi)) alpha = 0.5 cmap = cm.bone ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') plt.title(r"$\frac{x^2}{a^2} + \frac{y^2}{b^2} + \frac{z^2}{c^2} = 1$") surf = ax.plot_wireframe(X, Y, Z, alpha=alpha, cmap=cmap) plt.show()
椭圆抛物面
\displaystyle \frac{x^2}{a^2} + \frac{y^2}{b^2} = \frac{z}{c}
fig = plt.figure() ax = fig.gca(projection='3d') X = np.linspace(-5, 5, 10) Y = np.linspace(-5, 5, 10) X, Y = np.meshgrid(X, Y) Z = X ** 2 + Y ** 2 ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') plt.title(r"$\frac{x^2}{a^2} + \frac{y^2}{b^2} = \frac{z}{c}$") surf = ax.plot_wireframe(X, Y, Z, cmap=cm.afmhot) plt.show()
椭圆锥面
\displaystyle \frac{x^2}{a^2} + \frac{y^2}{b^2} = \frac{z^2}{c^2}
fig = plt.figure() ax = fig.gca(projection='3d') X = np.linspace(-5, 5, 16) Y = np.linspace(-5, 5, 16) X, Y = np.meshgrid(X, Y) Z = np.sqrt(X ** 2 + Y ** 2) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') plt.title(r"$\frac{x^2}{a^2} + \frac{y^2}{b^2} = \frac{z^2}{c^2}$") surf = ax.plot_wireframe(X, Y, Z, cmap=cm.afmhot) plt.show()
单页双曲面
\displaystyle \frac{x^2}{a^2} + \frac{y^2}{b^2} - \frac{z^2}{c^2} = 1
我尝试了好几次,发现双曲面用 matplotlib
画出来不太友好,如果有谁知道,希望能评论告诉我。
fig = plt.figure() ax = fig.gca(projection='3d') x = np.linspace(-5, 5, 16) z = np.linspace(-5, 5, 10) X, Z = np.meshgrid(x, z) Y = np.sqrt(1 + Z ** 2 - X ** 2) alpha = 0.5 cmap = cm.bone ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') plt.title(r"$\frac{x^2}{a^2} + \frac{y^2}{b^2} - \frac{z^2}{c^2} = 1$") surf = ax.plot_wireframe(X, Y, Z, alpha=alpha, cmap=cmap) surf = ax.plot_wireframe(X, -Y, Z, alpha=alpha, cmap=cmap) surf = ax.plot_wireframe(Y, X, Z, alpha=alpha, cmap=cmap) surf = ax.plot_wireframe(-Y, X, Z, alpha=alpha, cmap=cmap) plt.show()
双叶双曲面
\displaystyle \frac{x^2}{a^2} - \frac{y^2}{b^2} - \frac{z^2}{c^2} = 1
fig = plt.figure() ax = fig.gca(projection='3d') x = np.linspace(-5, 5, 32) z = np.linspace(-5, 5, 32) X, Z = np.meshgrid(x, z) Y = np.sqrt(X ** 2 - Z ** 2 - 1) alpha = 0.5 cmap = cm.bone ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') plt.title(r"$\frac{x^2}{a^2} - \frac{y^2}{b^2} - \frac{z^2}{c^2} = 1$") surf = ax.plot_wireframe(X, Y, Z, alpha=alpha, cmap=cmap) surf = ax.plot_wireframe(X, -Y, Z, alpha=alpha, cmap=cmap) plt.show()
马鞍面(双曲抛物面)
\displaystyle \frac{y^2}{b^2} - \frac{x^2}{a^2} = \frac{z}{c}
fig = plt.figure() ax = fig.gca(projection='3d') X = np.linspace(-5, 5, 16) Y = np.linspace(-5, 5, 16) X, Y = np.meshgrid(X, Y) Z = Y ** 2 - X ** 2 ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') plt.title(r"$\frac{y^2}{b^2} - \frac{x^2}{a^2} = \frac{z}{c}$") surf = ax.plot_wireframe(X, Y, Z, cmap=cm.bone) plt.show()
其他重要的二维函数图像
z = xy
fig = plt.figure() ax = fig.gca(projection='3d') X = np.linspace(-5, 5, 16) Y = np.linspace(-5, 5, 16) X, Y = np.meshgrid(X, Y) Z = X * Y ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') plt.title(r"$z = xy$") surf = ax.plot_wireframe(X, Y, Z, cmap=cm.Blues) plt.show()
偏导数存在,不可微的例子
fig = plt.figure() ax = fig.gca(projection='3d') X = np.linspace(-5, 5, 32) Y = np.linspace(-5, 5, 32) X, Y = np.meshgrid(X, Y) Z = (X * Y) / (X**2 + Y ** 2) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') plt.title(r"$z = \frac{xy}{x^2 + y^2}$") surf = ax.plot_wireframe(X, Y, Z, cmap=cm.bone) plt.show()
一些二维曲线图像
r(t) = (\sin 3t)(\cos t)\overrightarrow{i} + (\sin 3t)(\sin t)\overrightarrow{j} + t\overrightarrow{k}
fig = plt.figure() ax = fig.gca(projection='3d') theta = np.linspace( -np.pi, np.pi, 64) z = theta x = np.sin(3*theta) * np.cos(theta) y = np.sin(3*theta) * np.sin(theta) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') plt.title(r"$r(t) = (\sin 3t)(\cos t)\overrightarrow{i} + (\sin 3t)(\sin t)\overrightarrow{j} + t\overrightarrow{k}$") ax.plot(x, y, z) plt.show()
r(t) = \cos t \overrightarrow{i} + \sin t \overrightarrow{j} + sin 2t \overrightarrow{k}
fig = plt.figure() ax = fig.gca(projection='3d') theta = np.linspace(-np.pi, np.pi, 40) z = np.sin(2 * theta) x = np.cos(theta) y = np.sin(theta) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_zlabel('z') plt.title(r"$r(t) = \cos t \overrightarrow{i} + \sin t \overrightarrow{j} + sin 2t \overrightarrow{k}$") ax.plot(x, y, z) plt.show()
螺旋线
r(t) = \cos t \overrightarrow{i} + \sin t \overrightarrow{j} + t \overrightarrow{k}
fig = plt.figure() ax = fig.gca(projection='3d') theta = np.linspace(-2* np.pi,