自己瞎折腾,准备用python 试试做孤子脉冲的图
但是一下午就弄了一个示意图。色散长度的参数是错误的。但总算有图出来了,下一步慢慢改。特别得感谢这位博主的分享,他的是MATLAB代码
转自筹码°的博客。参考他的代码,修改的。只是尝试一下,多数是人家写的。我只改了一点点,试试Python的效果。
```python
import numpy as np
import mpl_toolkits.mplot3d
from matplotlib import pyplot as plt
#from matplotlib import animation
from scipy.fftpack import fft,ifft
import matplotlib
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import LinearLocator, FormatStrFormatter
from pylab import *
#注意时间域与频域的选择问题
T = 40
#时间窗口
tn = 2 ** 10
# 时间区域个数(2 ^ M个)
dt = T/tn
#选择的时间步长 np.linspace(2,10,num=5,endpoint=False)
t = (np.linspace(1, tn)- (tn+1)/2)*dt
w = wn(T, tn)
#傅里叶域频率, 调用计算频率函数
b = 0.03
c = (-j*w**2)/2+j*b*w** 3
dz = 0.1
#迭代时选择的步长
#步长的选择影响计算效率
z = np.linspace(0, 101, dz)
print(z)
# 位置坐标
# 输入初始脉冲
u = np.cosh(t)/np.sinh(t)
print(u[0:])
#plt.plot(t, abs(u))
#plt.show()
figure = plt.figure()
ax = Axes3D(figure)
X = t
#Y = t
Z=z
#网格化数据
X, Z = np.meshgrid(X, Y)
Y = abs(u)
ax.plot_surface(X,Y, Z , rstride=1, cstride=1, cmap='rainbow')
plt.show()
#*******************************************************************************************#
可能是步长问题,图怪怪的,看来还有很多巨大错误,管他呢,总算是有图出现了。
搜索学了几种画法,都不行,只有这个也许将来能用,下一步把步长匹配好,进行迭代传输,我就算是把Python孤子的思路,基本理清了,但是迭代,需要分步处理矩阵,这里numpy的迭代处理方法还不会。
下面是又一个版本的画法。也许这个才是正确的方法。
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
fig=plt.figure()
ax=Axes3D(fig)
t=np.arange(-2,2,0.1)
print(t)
y=np.arange(1,20,1)
#生成网格点坐标矩阵。
t,y=np.meshgrid(t,y)
print(t)
print(y)
z=np.cosh(t)/np.sinh(t)*0.2
#绘制3D曲面
ax.plot_surface(t,y,abs(z[0:20,:]),rstride=2,cstride=2,cmap='rainbow')
# rstride(row)指定行的跨度 # cstride(column)指定列的跨度
#ax.view_init(elev=300,azim=300)
plt.show()