24小时热门版块排行榜    

查看: 720  |  回复: 1

cdg234

新虫 (初入文坛)

[求助] 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;
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cdg234

新虫 (初入文坛)

大神帮忙啊
2楼2014-02-13 08:58:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 cdg234 的主题更新
信息提示
请填处理意见