24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1703  |  回复: 10

惜梦寻草

新虫 (初入文坛)

[求助] 利用matlab画出级联OPO波长调谐曲线

求高手指点!如题,模拟PPLN晶体级联OPO+OPA温度调谐曲线,但是不知道该怎么模拟!要得到最后面的那个图。
下面是我的程序,希望哪位高人能帮忙调一下!十分感激!

clear
clc
n=1;
m=1;
a1=5.756;
a2=0.0983;
a3=0.2020;
a4=189.32;
a5=12.52;
a6=1.32e-2;
b1=2.860e-6;
b2=4.700e-8;
b3=6.113e-8;
b4=1.516e-4;
A=31.5;
lamdap=1.064;
T = [25:0.1:250];
lamdas = [1.065:0.01:3.2];
lamdass = [2.5:0.01:4.5];
for i_T = 1:length(T)
    f=(T(i_T)-24.5)*(T(i_T)+570.82);
    ni = zeros(size(lamdas));
    np = ni;
    ns = ni;
    nss = ni;
    nii = ni;
    for i_lamdas = 1:length(lamdas)
        lamdai(i_lamdas)=1./(1./lamdap-1./lamdas(i_lamdas));
        ni(i_lamdas)=(a1+b1.*f+(a2+b2.*f)./(lamdai(i_lamdas).^2-(a3+b3.*f)^2)+(a4+b4.*f)./(lamdai(i_lamdas).^2-a5^2)-a6.*lamdai(i_lamdas).^2).^(1/2);
        np(i_lamdas)=(a1+b1.*f+(a2+b2.*f)./(lamdap.^2-(a3+b3*f)^2)+(a4+b4.*f)./(lamdap.^2-a5^2)-a6.*lamdap.^2).^(1/2);
        ns(i_lamdas)=(a1+b1.*f+(a2+b2.*f)./(lamdas(i_lamdas).^2-(a3+b3.*f)^2)+(a4+b4.*f)./(lamdas(i_lamdas).^2-a5^2)-a6.*lamdas(i_lamdas).^2).^(1/2);
    end
    for i_lamdass = 1:length(lamdass)
        lamdaii(i_lamdass)=1/(1/lamdas-1/lamdass(i_lamdass));
        nii(i_lamdass)=(a1+b1.*f+(a2+b2.*f)./(lamdai2(i_lamdass).^2-(a3+b3.*f)^2)+(a4+b4.*f)./(lamdai2(i_lamdass).^2-a5^2)-a6.*lamdai2(i_lamdass).^2).^(1/2);
        ns(i_lamdass)=(a1+b1.*f+(a2+b2.*f)./(lamdas(i_lamdass).^2-(a3+b3.*f)^2)+(a4+b4.*f)./(lamdas(i_lamdass).^2-a5^2)-a6.*lamdas(i_lamdass).^2).^(1/2);
        nss(i_lamdass)=(a1+b1.*f+(a2+b2.*f)./(lamdass(i_lamdass).^2-(a3+b3.*f)^2)+(a4+b4.*f)./(lamdass(i_lamdass).^2-a5^2)-a6.*lamdass(i_lamdass).^2).^(1/2);
    end
       temp1 = abs(np./lamdap-ns./lamdas-ni./lamdai-1/A);
       [x1,i_x1] = min(temp1);
       lamdai_opt(i_T) = lamdai(i_x1);
       lamdas_opt(i_T) = lamdas(i_x1);
       temp2 = abs(ns./lamdas-nss./lamdass-nii./lamdaii-1/A);   
       [x2,i_x2] = min(temp2);
       lamdaii_opt(i_T) = lamdaii(i_x2);
       lamdass_opt(i_T) = lamdass(i_x2);     
end
plot(T,lamdai_opt,'b.')
hold on
plot(T,lamdas_opt,'b.')
hold on
plot(T,lamdaii_opt,'b.')
hold on
plot(T,lamdass_opt,'b.')

级联OPO+OPA温度调谐曲线.jpg
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

★ ★ ★
感谢参与,应助指数 +1
惜梦寻草: 金币+3, 有帮助 2013-01-05 15:56:02
你这问题好多,比如
lamdai2是多少
lamdas和lamdass长度不一样怎么一对一的计算
  lamdai(i_lamdas)=1./(1./lamdap-1./lamdas(i_lamdas));到底是除元素还是除矩阵?我估计除元素
showmethemoney
2楼2013-01-05 10:44:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

惜梦寻草

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by csgt0 at 2013-01-05 10:44:09
你这问题好多,比如
lamdai2是多少
lamdas和lamdass长度不一样怎么一对一的计算
  lamdai(i_lamdas)=1./(1./lamdap-1./lamdas(i_lamdas));到底是除元素还是除矩阵?我估计除元素

lamdai2就是lamdaii,我在编程序的时候疏忽了
lamdas和lamdass需要长度一样才能算吗?这个我不太清楚
lamdai(i_lamdas)=1./(1./lamdap-1./lamdas(i_lamdas));正如你想的,是要除元素。
我知道这个程序的错误很多,我不知道应该怎么算这个,你能帮我写一下能得到下面那张图的程序吗?谢谢啦!
3楼2013-01-05 15:55:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

引用回帖:
3楼: Originally posted by 惜梦寻草 at 2013-01-05 15:55:28
lamdai2就是lamdaii,我在编程序的时候疏忽了
lamdas和lamdass需要长度一样才能算吗?这个我不太清楚
lamdai(i_lamdas)=1./(1./lamdap-1./lamdas(i_lamdas));正如你想的,是要除元素。
我知道这个程序的错误很多 ...

因为你的temp2 = abs(ns./lamdas-nss./lamdass-nii./lamdaii-1/A);
在一个公式里面必须保证lamdas,lamdass,lamdaii都是一样长得
showmethemoney
4楼2013-01-05 16:49:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

惜梦寻草

新虫 (初入文坛)

引用回帖:
4楼: Originally posted by csgt0 at 2013-01-05 16:49:51
因为你的temp2 = abs(ns./lamdas-nss./lamdass-nii./lamdaii-1/A);
在一个公式里面必须保证lamdas,lamdass,lamdaii都是一样长得...

我将lamdas范围改成[1.2:0.01:3.2],lamdass范围改成[2.5:0.01:4.5]了,按你的说法,公式temp2=abs(ns./lamdas-nss./lamdass-nii./lamdaii-1/A)长度应该是一样的了,可是还是出不来图啊。
仍然是Error using ==> mrdivide
Matrix dimensions must agree.
你要是能帮我画出来,我可以再加金币的。拜托了!
5楼2013-01-06 08:43:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★
惜梦寻草: 金币+7, ★★★很有帮助 2013-01-06 14:40:14
能算,就是不知道图对不对,不对就看你的算法错没错
CODE:
clear
clc
n=1;
m=1;
a1=5.756;
a2=0.0983;
a3=0.2020;
a4=189.32;
a5=12.52;
a6=1.32e-2;
b1=2.860e-6;
b2=4.700e-8;
b3=6.113e-8;
b4=1.516e-4;
A=31.5;
lamdap=1.064;
T = [25:0.1:250];
lamdas = [1.2:0.01:3.2];
lamdass = [2.5:0.01:4.5];
for i_T = 1:length(T)
     f=(T(i_T)-24.5)*(T(i_T)+570.82);
     ni = zeros(size(lamdas));
     np = ni;
     ns = ni;
     nss = ni;
     nii = ni;
     for i_lamdas = 1:length(lamdas)
         lamdai(i_lamdas)=1./(1./lamdap-1./lamdas(i_lamdas));
         ni(i_lamdas)=(a1+b1.*f+(a2+b2.*f)./(lamdai(i_lamdas).^2-(a3+b3.*f)^2)+(a4+b4.*f)./(lamdai(i_lamdas).^2-a5^2)-a6.*lamdai(i_lamdas).^2).^(1/2);
         np(i_lamdas)=(a1+b1.*f+(a2+b2.*f)./(lamdap.^2-(a3+b3*f)^2)+(a4+b4.*f)./(lamdap.^2-a5^2)-a6.*lamdap.^2).^(1/2);
         ns(i_lamdas)=(a1+b1.*f+(a2+b2.*f)./(lamdas(i_lamdas).^2-(a3+b3.*f)^2)+(a4+b4.*f)./(lamdas(i_lamdas).^2-a5^2)-a6.*lamdas(i_lamdas).^2).^(1/2);
     end
     for i_lamdass = 1:length(lamdass)
         lamdaii(i_lamdass)=1/(1/lamdas(i_lamdass)-1/lamdass(i_lamdass));
         nii(i_lamdass)=(a1+b1.*f+(a2+b2.*f)./(lamdaii(i_lamdass).^2-(a3+b3.*f)^2)+(a4+b4.*f)./(lamdaii(i_lamdass).^2-a5^2)-a6.*lamdaii(i_lamdass).^2).^(1/2);
         ns(i_lamdass)=(a1+b1.*f+(a2+b2.*f)./(lamdas(i_lamdass).^2-(a3+b3.*f)^2)+(a4+b4.*f)./(lamdas(i_lamdass).^2-a5^2)-a6.*lamdas(i_lamdass).^2).^(1/2);
         nss(i_lamdass)=(a1+b1.*f+(a2+b2.*f)./(lamdass(i_lamdass).^2-(a3+b3.*f)^2)+(a4+b4.*f)./(lamdass(i_lamdass).^2-a5^2)-a6.*lamdass(i_lamdass).^2).^(1/2);
     end
        temp1 = abs(np./lamdap-ns./lamdas-ni./lamdai-1/A);
       [x1,i_x1] = min(temp1);
        lamdai_opt(i_T) = lamdai(i_x1);
        lamdas_opt(i_T) = lamdas(i_x1);
        temp2 = abs(ns./lamdas-nss./lamdass-nii./lamdaii-1/A);   
        [x2,i_x2] = min(temp2);
        lamdaii_opt(i_T) = lamdaii(i_x2);
        lamdass_opt(i_T) = lamdass(i_x2);     
end
plot(T,lamdai_opt,'b',T,lamdas_opt,'r',T,lamdaii_opt,'g',T,lamdass_opt,'b')
grid

showmethemoney
6楼2013-01-06 11:12:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

惜梦寻草

新虫 (初入文坛)

引用回帖:
6楼: Originally posted by csgt0 at 2013-01-06 11:12:53
能算,就是不知道图对不对,不对就看你的算法错没错

clear
clc
n=1;
m=1;
a1=5.756;
a2=0.0983;
a3=0.2020;
a4=189.32;
a5=12.52;
a6=1.32e-2;
b1=2.860e-6;
b2=4.700e-8;
b3=6.113e-8; ...

非常感谢!
不过我还有两个问题:
第一,为什么我的程序里lamdas = [1.2:0.01:3.2];lamdass = [2.5:0.01:4.5];修改以后还是出不了图呢?
第二,为什么你写的程序理论上没有问题,但是输出的图形和我要的不一样呢?
7楼2013-01-06 14:39:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

引用回帖:
7楼: Originally posted by 惜梦寻草 at 2013-01-06 14:39:20
非常感谢!
不过我还有两个问题:
第一,为什么我的程序里lamdas = ;lamdass = ;修改以后还是出不了图呢?
第二,为什么你写的程序理论上没有问题,但是输出的图形和我要的不一样呢?...

可能有的地方你没有改正。
至于图形不一样那就看你的算法对不对,你可以检查计算方法和过程。
showmethemoney
8楼2013-01-06 14:41:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

惜梦寻草

新虫 (初入文坛)

引用回帖:
8楼: Originally posted by csgt0 at 2013-01-06 14:41:30
可能有的地方你没有改正。
至于图形不一样那就看你的算法对不对,你可以检查计算方法和过程。...

过程应该不会有错的,还是没找出来原因。
9楼2013-01-07 08:19:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

惜梦寻草

新虫 (初入文坛)

引用回帖:
8楼: Originally posted by csgt0 at 2013-01-06 14:41:30
可能有的地方你没有改正。
至于图形不一样那就看你的算法对不对,你可以检查计算方法和过程。...

我的问题已经解决了,不用费心了~谢谢啦!
10楼2013-01-07 10:50:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 惜梦寻草 的主题更新
信息提示
请填处理意见