最近论文中常常接触到激光产生混沌的方程,激光器作为非线性元件,在信息处理中具有非常大的潜力,其中激光产生混沌应用在通信中很有用处。论文中对于模拟数据部分,采用了以下公式来产生混沌:
以此公式产生混沌的方法应用于模拟数据中的论文,单我看到的已经不下五篇了。对于使用怕python将其产生的混沌运行出来,自己也在尝试。但是得到的结果并不如意。文章中使用的是二阶龙格库塔(second-order Runge-Kutta)的方法来对这两个式子进行积分。以下是我对于二阶龙格库塔方法解方程的步骤(手写是因为到现在还是不会用csdn来编辑公式)
对于fsp也就是朗格万项的理解确实不够,自己在以后也会精进一下理解,这里把它看成一个常数项进行处理。
对于n~的微分公式的积分并没有采用二阶龙格塔库积分方法,而是通过直接求出原式带入到1式子中。我对于整个解微分方程的python代码书写如下(实验参数已经标注在开头):
import matplotlib.pyplot as plt import math rc=5.36*1e11 rs=5.96*1e9 rn=7.53*1e9 rp=1.91*1e10 b=3.2 J=1.222 fr=1e10 oi=0.05 fi=8*1e9 h=1.19*(1/1e12) chaotic_value=[] def value_A(a): aa=abs(a) anss=(rs+rn*aa*aa)*(-1.0) return anss def value_B(a): aa=abs(a) anss=rs*J*(1-(rp/rc)*aa*aa)*(aa*aa-1)*(-1.0) return anss def value_n(t,a): anss=(math.exp(value_A(a)*t)-value_B(a))/value_A(a) return anss def value_f(t,a): aa=abs(a) first=complex(1,b*(-1))/2.0 second=(((rc*rn*value_n(t,a))/(rs*J))-rp*(aa*aa-1))*a third=oi*rc*complex(math.cos(2*math.pi*fi*t),(-1)*math.sin(2*math.pi*fi*t)) forth=((4.0*math.pi*10.0*1e6)/(1+b*b))**0.5 anss=first*second+third+forth return anss t=0.0 y=0.0 chaotic_value.append(y) for item in range(100): k1=value_f(t,y) k2=value_f(t+h,y+h*k1) y_next=y+h*((k1+k2)/2.0) chaotic_value.append(y_next) y=y_next t=t+h pass for item in chaotic_value: print(item) plt.plot(range(101),chaotic_value) plt.show()
值得注意的是式子中的i应该是复数的虚部,而一开始我认为是当前的步数。得出的结果更加离谱。下面是取样50个点运行的图像:
下图为100个点:
接下来是10000个点
最终产生的混沌图像应该是什么样子我也没有见过,但是我感觉我形成的这一个图像过于规律了,不想混沌,但是我也是通过文章表述来编写的代码,debug了挺长时间。很希望专业认识对于这一混沌产生函数的代码编写进行指正。或者是有哪里理解的不对,欢迎交流。感觉以后写论文肯定会用到这个模型的。希望佬们快快帮帮我。
相关论文链接:https://opg.optica.org/oe/fulltext.cfm?uri=oe-31-24-40592&id=542433