| 查看: 720 | 回复: 1 | |||
[求助]
DFB激光器分析程序运算耗时太久
|
|
写了个1/4相移激光器的程序,但运算太慢,一个循环要40几秒,要循环121次,如果while判断eps>10e-14为真还要改变初始值,重新做循环,所以不知道还要多久,看网上说可以向量化节省时间,但弄了一下午也没弄好,因为向量化过程中出现四维乘三维矩阵,老是报错,附上部分未向量化代码,求各位大神支招,主要是将两个for循环向量化,同时考虑两个子方程的适应性。叫改用其他软件编程就算了,本科学的编程少,matlab也是初学。只有5个金币了,请见谅。 ------------ lambda=linspace(lambda00-detl,lambda00+detl,11); CC=linspace(C00-detC,C00+detC,11); E=zeros(2,s+1); T=zeros(2,2,s); P=zeros(2,2); AA=zeros(11,11); N=zeros(1,s+1); neff=zeros(1,s+1); S=zeros(1,s+1); for m=1:11 for n=1:11 n1=neffth; detn=1; E(1,1)=0;E(2,1)=1; while detn>1e-15 N(1,1)=RateEquation(lambda(n),CC(m),J,ath,detth,E(1,1),E(2,1)); g=A0*(N(1,1)-N0)-A1*(lambda(n)-(lambda0-A2*(N(1,1)-N0)))^2; a=L*(Tao*g-aloss)/2; neff(1,1)=n0+Tao*dn*N(1,1); S(1,1)=2*VP*neff(1,1)*ng*lambda(n)*CC(m)^2*(abs(E(1,1))^2+abs(E(2,1))^2)/(h*c); detn=abs(neff-n1); n1=neff(1,1); end det=L*(2*pi*neff(1,1)/lambda(n)-2*pi*ng*(lambda(n)-lambdaB)/(lambda(n)*lambdaB)-pi/period); T(:,:,1)=Matrix(kL,a,det,ritio/R1); for i=2:R1 E(:,i)=T(:,:,i-1)*E(:,i-1); N(1,i)=RateEquation(lambda(n),CC(m),J,ath,detth,E(1,i),E(2,i)); g=A0*(N(1,i)-N0)-A1*(lambda(n)-(lambda0-A2*(N(1,i)-N0)))^2; a=L*(Tao*g-aloss)/2; neff(1,i)=n0+Tao*dn*N(1,i); S(1,i)=2*VP*neff(1,i)*ng*lambda(n)*CC(m)^2*(abs(E(1,i))^2+abs(E(2,i))^2)/(h*c); det=L*(2*pi*neff(1,i)/lambda(n)-2*pi*ng*(lambda(n)-lambdaB)/(lambda(n)*lambdaB)-pi/period); T(:,:,i)=Matrix(kL,a,det,ritio/R1); end P(1,1)=exp(-1i*theta);P(1,2)=0;P(2,1)=0;P(2,2)=exp(1i*theta); E(:,R1+1)=T(:,:,R1)*E(:,R1); E(:,R1+1)=P*E(:,R1+1); N(1,R1+1)=RateEquation(lambda(n),CC(m),J,ath,detth,E(1,R1+1),E(2,R1+1)); g=A0*(N(1,R1+1)-N0)-A1*(lambda(n)-(lambda0-A2*(N(1,R1+1)-N0)))^2; a=L*(Tao*g-aloss)/2; neff(1,R1+1)=n0+Tao*dn*N(1,R1+1); S(1,R1+1)=2*VP*neff(1,R1+1)*ng*lambda(n)*CC(m)^2*(abs(E(1,R1+1))^2+abs(E(2,R1+1))^2)/(h*c); det=L*(2*pi*neff(1,R1+1)/lambda(n)-2*pi*ng*(lambda(n)-lambdaB)/(lambda(n)*lambdaB)-pi/period); T(:,:,R1+1)=Matrix(kL,a,det,(1-ritio)/(s-R1)); for i=(R1+2):s E(:,i)=T(:,:,i-1)*E(:,i-1); N(1,i)=RateEquation(lambda(n),CC(m),J,ath,detth,E(1,i),E(2,i)); g=A0*(N(1,i)-N0)-A1*(lambda(n)-(lambda0-A2*(N(1,i)-N0)))^2; a=L*(Tao*g-aloss)/2; neff(1,i)=n0+Tao*dn*N(1,i); S(1,i)=2*VP*neff(1,i)*ng*lambda(n)*CC(m)^2*(abs(E(1,i))^2+abs(E(2,i))^2)/(h*c); det=L*(2*pi*neff(1,i)/lambda(n)-2*pi*ng*(lambda(n)-lambdaB)/(lambda(n)*lambdaB)-pi/period); T(:,:,i)=Matrix(kL,a,det,(1-ritio)/(s-R1)); end E(:,s+1)=T(:,:,s)*E(:,s); AA(m,n)=abs(E(2,s+1)); end end eps=min(min(AA)); --------------- function N=RateEquation(lambda,CC,J,ath,detth,E1,E2) syms x; L=250e-6; N0=1.5e24;aloss=4e3;A0=2.7e-20;Tao=0.35; n0=3.41351524;dn=-1.8e-26; c=3e8; ng=3.7;period=227.039e-9; lambdaB=2*n0*period; A2=2.7e-32;A1=1.5e-21;non=1.5e-23; to=4e-9;q=1.60217733e-19;d=0.12e-6;B=1e-16; C=3e-41; VP=8.854e-12; h=6.6260693e-34; Nth=N0+(aloss+2*ath)/(A0*Tao); neffth=n0+Tao*dn*Nth; lambdath=2*pi*lambdaB*(neffth+ng)/(detth*lambdaB+2*pi*ng+lambdaB*pi/period); lambda0=lambdath+A2*(Nth-N0); %稳态解 g=A0*(x-N0)-A1*(lambda-(lambda0-A2*(x-N0)))^2; neff=n0+Tao*dn*x; S=2*VP*neff*ng*lambda*CC^2*(abs(E1)^2+abs(E2)^2)/(h*c); f=(1+non*S)*J/(q*d)-((x/to+B*x^2+C*x^3)*(1+non*S)+c*g*S/ng); F=sym2poly(f); Nroots1=roots(F); NN=Nroots1==real(Nroots1); Nroots2=Nroots1(NN); Nroots2(Nroots2<0)=[]; N=min(Nroots2); function T=Matrix(k,a,d,ritio) T=zeros(2,2); r=((a-1i*d)^2+k^2)^0.5; T(1,1)=cosh(r*ritio)+(a-1i*d)*sinh(r*ritio)/r; T(1,2)=-1i*k*sinh(r*ritio)/r; T(2,1)=1i*k*sinh(r*ritio)/r; T(2,2)=cosh(r*ritio)-(a-1i*d)*sinh(r*ritio)/r; |
» 猜你喜欢
拟解决的关键科学问题还要不要写
已经有9人回复
最失望的一年
已经有17人回复
为什么nbs上溴 没有产物点出现呢
已经有6人回复
求推荐博导
已经有4人回复
存款400万可以在学校里躺平吗
已经有34人回复
求助一下有机合成大神
已经有4人回复
求推荐英文EI期刊
已经有5人回复
26申博
已经有3人回复
基金委咋了?2026年的指南还没有出来?
已经有10人回复
疑惑?
已经有5人回复
2楼2014-02-13 08:58:10













回复此楼