在推文为什么 sin(x2)+sin(y2)=1 的图象这么复杂? 给出不同维度下的正弦波。看到最后心里有点接受不了。
01 一维正弦波
把周期震荡的正弦波当做组成任何信号的基础是傅里叶分析的核心内容,这一点实际上并不非常直观。相关的理论直到十九世纪初期(1807年)才被法国数学家 Fourier 正式提出,并经历了大约一个世纪相关数学基础在逐步完善起来。
1.1 单个正弦波
下图是 在不同相位 对应的函数波形。
▲ 图1.1 正弦波图像
1.2 多个正弦波
下面显示多个正弦波叠化后的图像。函数具有八个正弦波叠加而成,它们的幅值与频率成反比。
▲ 图1.2 具有多个谐波周期波形图像
下面将所有的频率分量的幅度修改成一致。
下面显示了波形形状,大家也需注意到这个波形似乎随着相位补赛,波形在变化。
▲ 图1.4 正弦波图像
这实际上是个错觉。上面的波形是成将原来信号采集了512个点进行显示,由于采集频率过低使得采集到的的序列波形不能够很好的反映出原来信号幅度。下面是采集两10000个点进行显示,可以看到波形非常稳定。
▲ 图1.2.3 多个正弦波叠加
1.3 正弦波变成随机数字
虽然整体上,正弦波是周期可预测的,但从局部来看,数字的小数部分则呈现随机特性。
sint = (sin(tt)*1000000.0) % 1.0
将 乘以 取小数部分,绘制波形可以看到这几乎就是一个随机小数。
▲ 图1.3.1 数字小数部分取值
下面是某些程序用于产生随机数的公式。至于其中为什么出现 12.9898 和 43758.5453123 这两个参数,也许大神的思维不是我们凡人能够理解的。
t = linspace(0, 20, 10000)
for id,phase in tqdm(enumerate(linspace(0, 2*pi, 10))):
tt = t + phase
sint = (sin(tt)*1000000.0) % 1.0
plt.clf()
plt.figure(figsize=(10,6))
plt.plot(t, sint)
plt.xlabel('t')
plt.ylabel('sin(t)')
plt.axis([0, 20, -.2, 1.2])
plt.grid(True)
plt.tight_layout()
savefile = os.path.join(gifpath, '%03d.jpg'%id)
plt.savefig(savefile)
plt.close()
02 二维正弦波
将 扩展到以下几个函数:
▲ 二维函数波形
▲ 二维函数波形
▲ 二维函数波形
▲ 二维函数波形$$zleft( {x,y} right) = sin left( {x2 + y2 } right) $$
▲ 二维函数波形$$zleft( {x,y} right) = sin left( {x2 } right) + sin left( {y2 } right) $$
▲ 图2.6 二维函数图像
from headm import * # =
from mpl_toolkits.mplot3d import Axes3D
ax = Axes3D(plt.figure(figsize=(12,8)))
x = linspace(-5,5, 50)
y = linspace(-5,5, 50)
xx,yy = meshgrid(x,y)
z = sin(xx * yy)
ax.plot_surface(xx,yy,z,
rstride=1,
cstride=1,
cmap=plt.cm.Blues)
ax.contourf(xx,yy,z,
zdir='z',
offset=-1,
cmap=plt.cm.BuGn)
plt.savefig('/home/aistudio/stdout.jpg')
plt.show()
03 三维正弦波
剩下一个问题,对于三维正弦波该如何绘制呢?
对于这个问题我现在还不知道,下面是
- 知乎上的原始链接[1] : https://www.zhihu.com/question/325445882/answer/692389802
给出的体素绘制图片,搬运到这儿一起欣赏一下。
▲ 图3.1 三维函数图像
▲ 图3.2 三维函数图像
▲ 图3.3 三维函数等高面
▲ 图3.4 三维函数等高面
▲ 图3.5 三维函数等高面
▲ 图3.6 三维函数
▲ 图3.7 三维函数
▲ 图3.8 三维函数
▲ 图3.9 三维函数
▲ 图3.10 三维函数
▲ 图3.11 三维函数
参考资料
[1]知乎上的原始链接: https://www.zhihu.com/question/325445882/answer/692389802