matlab数据边界不对,求助边界问题

好 呵呵:)

我还是把程序贴出来吧。

% 对分法找值

%下面是定义输入值

clear all

L=0.01;

neff=1.447;

c=1*1e-7/(2*neff);

deltaneff=0.0004;

N=100;

M=2000;

lamda1=1548;

lamda2=1552;

lamda=linspace(lamda1*1e-9,lamda2*1e-9,M);

deltalamda=(lamda2*1e-9-lamda1*1e-9)/(M-1);

nn = 1;

delta = 1e-4;

% 这里开始使用传输矩阵法计算每个波长对应的正向和反向波振幅

%传输矩阵部分借用网上一位仁兄的程序,在此谢过!

for k=1:M               %不同的光波长

F=[1,0;0,1];        %传输矩阵初始值

checl_M = k

% 对分法找根

aaa1 = 0;         %假设AF(Z)在Z=L处的根为0

for n=1:N         %for循环内计算传输矩阵

deltaneff_z=deltaneff;

lamdaD=1550*1e-9-L*neff*c+2*neff*c*(L*n/N-0.5*L/N);

sigma=2*pi*neff*(1/lamda(k)-1/lamdaD)+2*pi*deltaneff_z/lamda(k)+(4*pi*neff)*c*(2*(neff+deltaneff))*(-L/2+n*L/N)/lamdaD^2;

kac=pi*deltaneff_z/lamda(k);

RB=sqrt(kac^2-sigma^2)+eps;

F=F*[cosh(RB*L/N)-(sigma/RB)*sinh(RB*L/N)*1i,-(kac/RB)*sinh(RB*L/N)*1i;(kac/RB)*sinh(RB*L/N)*1i,cosh(RB*L/N)+(sigma/RB)*sinh(RB*L/N)*1i];

end                %传输矩阵计算结束

MID = F*[aaa1;0];   %计算Z=0处,AF和AB的值

RR1 = MID(1,1);    %RR就是AF的值

chec1 = abs(RR1)-1;   %由于已知AF在Z=0处的初始值为1,因此计算差值,相当于一楼里说的H(X)-IN

aaa2 = 1;          %下面假设AF(Z)在Z=L处的根为1

for n=1:N         %同样是传输矩阵

deltaneff_z=deltaneff;

lamdaD=1550*1e-9-L*neff*c+2*neff*c*(L*n/N-0.5*L/N);

sigma=2*pi*neff*(1/lamda(k)-1/lamdaD)+2*pi*deltaneff_z/lamda(k)+(4*pi*neff)*c*(2*(neff+deltaneff))*(-L/2+n*L/N)/lamdaD^2;

kac=pi*deltaneff_z/lamda(k);

RB=sqrt(kac^2-sigma^2)+eps;

F=F*[cosh(RB*L/N)-(sigma/RB)*sinh(RB*L/N)*1i,-(kac/RB)*sinh(RB*L/N)*1i;(kac/RB)*sinh(RB*L/N)*1i,cosh(RB*L/N)+(sigma/RB)*sinh(RB*L/N)*1i];

end          %传输矩阵计算结束

MID = F*[aaa2;0];

RR2 = MID(1,1);

chec2 = abs(RR2)-1;  %计算另一个假设值对应的插值

while(1)                      %进行对分

if chec1*chec2>0          %没有根的情况

k = k

fpringt('没有根')

break

end

aaa3 = (aaa1+aaa2)/2;            %如果有根,则进行对分

for n=1:N        %传输矩阵

deltaneff_z=deltaneff;

lamdaD=1550*1e-9-L*neff*c+2*neff*c*(L*n/N-0.5*L/N);

sigma=2*pi*neff*(1/lamda(k)-1/lamdaD)+2*pi*deltaneff_z/lamda(k)+(4*pi*neff)*c*(2*(neff+deltaneff))*(-L/2+n*L/N)/lamdaD^2;

kac=pi*deltaneff_z/lamda(k);

RB=sqrt(kac^2-sigma^2)+eps;

F=F*[cosh(RB*L/N)-(sigma/RB)*sinh(RB*L/N)*1i,-(kac/RB)*sinh(RB*L/N)*1i;(kac/RB)*sinh(RB*L/N)*1i,cosh(RB*L/N)+(sigma/RB)*sinh(RB*L/N)*1i];

end                %矩阵计算结束

MID = F*[aaa3;0];

RR3 = MID(1,1);

chec3 = abs(RR3)-1;          %“中间值”得到的差值

if abs(chec3)

final_RR(k) = RR3;           %收集找到的AF在Z=0处的根

final_SS(k) = MID(2,1);     %收集找到的AB在Z=0处的根

final_IN(k) = aaa3;             %收集找到的AF在Z=L处的值

break

elseif chec1*chec3>0           %否则进行替换

aaa1 = aaa3;

chec1 = chec3;

else

aaa2 = aaa3;

chec2 = chec3;

end

if abs(aaa1-aaa2)

aaa4 = (aaa1+aaa2)/2;

for n=1:N            %传输矩阵

deltaneff_z=deltaneff;

lamdaD=1550*1e-9-L*neff*c+2*neff*c*(L*n/N-0.5*L/N);

sigma=2*pi*neff*(1/lamda(k)-1/lamdaD)+2*pi*deltaneff_z/lamda(k)+(4*pi*neff)*c*(2*(neff+deltaneff))*(-L/2+n*L/N)/lamdaD^2;

kac=pi*deltaneff_z/lamda(k);

RB=sqrt(kac^2-sigma^2)+eps;

F=F*[cosh(RB*L/N)-(sigma/RB)*sinh(RB*L/N)*1i,-(kac/RB)*sinh(RB*L/N)*1i;(kac/RB)*sinh(RB*L/N)*1i,cosh(RB*L/N)+(sigma/RB)*sinh(RB*L/N)*1i];

end             %传输矩阵结束

MID = F*[aaa4;0];

RR4 = MID(1,1);

final_RR(k) = RR4;              %收集根

final_SS(k) = MID(2,1);         %收集根

final_IN(k) = aaa4;            %收集根

break

end

nn = nn+1;

end %while

end %k

以上就是程序,是我程序写错了? 还是其他哪里不对?

多谢指教!:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值